package outbound import ( "testing" "time" ) // Review M-2: outbound work is bounded per identity and globally, and a // released slot is reusable. func TestReserveBoundsPerKeyAndGlobally(t *testing.T) { releaseA, retry, ok := Reserve("test-a", 1, time.Minute) if !ok || releaseA == nil { t.Fatalf("first reservation rejected (retry %v)", retry) } if _, _, ok := Reserve("test-a", 1, time.Minute); ok { t.Fatal("per-key limit did not reject the second reservation") } // Fill the remaining global slots on distinct keys. releases := []func(){releaseA} for i := 0; i < defaultConcurrent-1; i++ { release, _, ok := Reserve("test-global-"+string(rune('a'+i)), 10, time.Minute) if !ok { t.Fatalf("global slot %d rejected below the cap", i) } releases = append(releases, release) } if _, _, ok := Reserve("test-overflow", 10, time.Minute); ok { t.Fatal("global concurrency cap did not reject an extra reservation") } // Release one slot and verify the global capacity is usable again. releases[0]() release, _, ok := Reserve("test-after-release", 1, time.Minute) if !ok { t.Fatal("released slot was not reusable") } release() for _, r := range releases[1:] { r() } }