semaphores_test.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package semaphores
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestSemaphoresQueueDisabled(t *testing.T) {
  7. s, err := New(&Config{RequestsQueueSize: 0, Workers: 1})
  8. require.NoError(t, err)
  9. // Queue acquire should always work when disabled
  10. release, err := s.AcquireQueue()
  11. require.NoError(t, err)
  12. release() // Should not panic
  13. procRelease, err := s.AcquireProcessing(t.Context())
  14. require.NoError(t, err)
  15. procRelease()
  16. }
  17. func TestSemaphoresQueueEnabled(t *testing.T) {
  18. s, err := New(&Config{RequestsQueueSize: 1, Workers: 1})
  19. require.NoError(t, err)
  20. // Should be able to acquire up to queue size + workers
  21. release1, err := s.AcquireQueue()
  22. require.NoError(t, err)
  23. release2, err := s.AcquireQueue()
  24. require.NoError(t, err)
  25. // Third should fail (exceeds capacity)
  26. _, err = s.AcquireQueue()
  27. require.Error(t, err)
  28. // Release and try again
  29. release1()
  30. release3, err := s.AcquireQueue()
  31. require.NoError(t, err)
  32. release2()
  33. release3()
  34. }
  35. func TestSemaphoresInvalidConfig(t *testing.T) {
  36. _, err := New(&Config{RequestsQueueSize: 0, Workers: 0})
  37. require.Error(t, err)
  38. }