package taskscheduler import ( "context" "testing" "time" ) func TestSingleFlightGateBlocksUntilTerminalRelease(t *testing.T) { gate := NewSingleFlightGate() if err := gate.Acquire(context.Background()); err != nil { t.Fatal(err) } blocked, cancel := context.WithTimeout(context.Background(), 20*time.Millisecond) defer cancel() if err := gate.Acquire(blocked); err == nil { t.Fatal("second task acquired capacity before release") } gate.Release() gate.Release() if err := gate.Acquire(context.Background()); err != nil { t.Fatal(err) } blockedAgain, cancelAgain := context.WithTimeout(context.Background(), 20*time.Millisecond) defer cancelAgain() if err := gate.Acquire(blockedAgain); err == nil { t.Fatal("duplicate terminal release increased capacity") } }