package hostops import ( "context" "errors" "testing" ) type sqlCommittedProof struct{ sqlProof } func (p *sqlCommittedProof) FenceSQLOutcome(ctx context.Context, s SQLReceiptScope) (bool, error) { return true, p.FenceSQL(ctx, s) } // M13: recovery that finds the original commit records sql-committed, not // sql-fenced; a plain FenceSQL adapter keeps sql-fenced. func TestPlan9Fix1RecoveryRecordsCommittedReceipt(t *testing.T) { for _, tc := range []struct { proof SQLRecovery want string }{{&sqlCommittedProof{}, "sql-committed"}, {&sqlProof{}, "sql-fenced"}} { w, raw, _ := testWriter(t) ctx := t.Context() seedAdmission(t, raw, "bab", "demo", openAdmission("app")) h, err := w.RegisterIngest(ctx, "bab", "demo", "app", "ingest", testOwner) if err != nil { t.Fatal(err) } _, settle, err := h.start.Runner(w.now).Issue(ctx, Effect{ID: "ingest", Resource: "app-sql:ingest", Action: sqlIngestAction, Inputs: map[string]string{"sql_database": "original"}}) if err != nil { t.Fatal(err) } _ = settle("", errors.New("console vanished")) if err = w.RecoverIngest(ctx, "bab", "demo", "app", "ingest", tc.proof); err != nil { t.Fatal(err) } a, _ := ReadAdmission(ctx, raw, "bab", "demo", "app") if got := a.Value.Effects["ingest"].ResultReference; got != tc.want { t.Fatalf("result %q, want %q", got, tc.want) } } }