package registry import ( "errors" "path/filepath" "testing" ) func TestPlan12RecoveryIntentJournalDurable(t *testing.T) { path := filepath.Join(t.TempDir(), "registry.db") r, err := Open(path) if err != nil { t.Fatal(err) } if err = r.BeginRecoveryHandover(t.Context(), "intent", "before"); err != nil { t.Fatal(err) } if err = r.Close(); err != nil { t.Fatal(err) } r, err = Open(path) if err != nil { t.Fatal(err) } defer r.Close() pending, err := r.PendingRecoveryHandovers(t.Context()) if err != nil || pending["intent"] != "before" { t.Fatal(pending, err) } if err = r.ReviseRecoveryHandover(t.Context(), "intent", "before", "after"); err != nil { t.Fatal(err) } if err = r.ReviseRecoveryHandover(t.Context(), "intent", "before", "stale"); !errors.Is(err, ErrClaimOwnership) { t.Fatal("stale revision", err) } if err = r.CompleteRecoveryHandover(t.Context(), "intent", "before"); !errors.Is(err, ErrClaimOwnership) { t.Fatal("stale completion", err) } if err = r.CompleteRecoveryHandover(t.Context(), "intent", "after"); err != nil { t.Fatal(err) } pending, err = r.PendingRecoveryHandovers(t.Context()) if err != nil || len(pending) != 0 { t.Fatal(pending, err) } if err = r.ReviseRecoveryHandover(t.Context(), "intent", "after", "reopened"); !errors.Is(err, ErrClaimOwnership) { t.Fatal("reopened completed intent", err) } }