package store import ( "testing" "git.ipao.vip/rogee/go-sip/internal/testfixture" ) func TestFinalizeReservationPreservesControlBarrier(t *testing.T) { for _, state := range []string{"paused", "draining", "stopped"} { for _, unknown := range []bool{false, true} { t.Run(state+map[bool]string{false: "-rejected", true: "-unknown"}[unknown], func(t *testing.T) { s := testStore(t) raw, err := testfixture.Execute() if err != nil { t.Fatal(err) } if _, err := s.IngestCommand(raw, testfixture.InboundKey("tenant-demo-key")); err != nil { t.Fatal(err) } if err := s.SetQuota("global", 1); err != nil { t.Fatal(err) } if err := s.Reserve("reservation-a", "exec_demo_001", "tenant-demo-key", []string{"global"}); err != nil { t.Fatal(err) } if _, err := s.DB().Exec(`UPDATE tasks SET status=?`, state); err != nil { t.Fatal(err) } if err := s.FinalizeReservation("reservation-a", "exec_demo_001", unknown); err != nil { t.Fatal(err) } var current, reservation string if err := s.DB().QueryRow(`SELECT status FROM tasks`).Scan(¤t); err != nil { t.Fatal(err) } if err := s.DB().QueryRow(`SELECT state FROM reservations`).Scan(&reservation); err != nil { t.Fatal(err) } expected := "released" if unknown { expected = "unknown" } if current != state || reservation != expected { t.Fatalf("task=%s reservation=%s", current, reservation) } }) } } }