You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

semaphores_test.go 1.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Copyright (c) 2019 Shivaram Lingamneni
  2. // released under the MIT license
  3. package utils
  4. import (
  5. "testing"
  6. "time"
  7. )
  8. func TestTryAcquire(t *testing.T) {
  9. count := 3
  10. sem := NewSemaphore(count)
  11. for i := 0; i < count; i++ {
  12. assertEqual(sem.TryAcquire(), true, t)
  13. }
  14. // used up the capacity
  15. assertEqual(sem.TryAcquire(), false, t)
  16. sem.Release()
  17. // got one slot back
  18. assertEqual(sem.TryAcquire(), true, t)
  19. }
  20. func TestAcquireWithTimeout(t *testing.T) {
  21. sem := NewSemaphore(1)
  22. assertEqual(sem.TryAcquire(), true, t)
  23. // cannot acquire the held semaphore
  24. assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), false, t)
  25. sem.Release()
  26. // can acquire the released semaphore
  27. assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), true, t)
  28. sem.Release()
  29. // XXX this test could fail if the machine is extremely overloaded
  30. sem.Acquire()
  31. go func() {
  32. time.Sleep(100 * time.Millisecond)
  33. sem.Release()
  34. }()
  35. // we should acquire successfully after approximately 100 msec
  36. assertEqual(sem.AcquireWithTimeout(1*time.Second), true, t)
  37. }