package hostbox import ( "context" "errors" "testing" ) func TestPlan11WriterClosureIsDurableAndMonotone(t *testing.T) { j, r := roleLaunchFixture(t) service, err := NewJournalService(j) if err != nil { t.Fatal(err) } remote, _ := RemoteJournals(func(ctx context.Context, q JournalRequest) (JournalResponse, error) { return service.Execute(ctx, "controller", q) }) if err := remote.CloseWriters(t.Context(), r.Target); err != nil { t.Fatal(err) } if err := remote.CloseWriters(t.Context(), r.Target); err != nil { t.Fatal(err) } got, err := j.Read(t.Context(), r.Target) if err != nil || !got.WritersClosed { t.Fatalf("closure not persisted: %+v %v", got, err) } if err := j.IntendUnit(t.Context(), r); !errors.Is(err, ErrChanged) { t.Fatalf("closed session admitted a new unit: %v", err) } if err := j.Prelaunch(t.Context(), LaunchInventory{ControllerPID: got.ControllerPID, ProcessStart: got.ProcessStart, Target: r.Target, Groups: got.Groups, NoState: true}); err == nil { t.Fatal("prelaunch replaced the closed record") } got, err = j.Read(t.Context(), r.Target) if err != nil || !got.WritersClosed { t.Fatal("closure was reopened") } }