Files
go-sip/internal/store/finalize_control_test.go

51 lines
1.5 KiB
Go

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(&current); 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)
}
})
}
}
}