mirror of
https://github.com/jeremyd/ergo.git
synced 2026-04-29 17:09:59 -07:00
add AcquireWithTimeout for semaphores
This commit is contained in:
48
irc/utils/semaphores_test.go
Normal file
48
irc/utils/semaphores_test.go
Normal file
@@ -0,0 +1,48 @@
|
||||
// Copyright (c) 2019 Shivaram Lingamneni
|
||||
// released under the MIT license
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestTryAcquire(t *testing.T) {
|
||||
count := 3
|
||||
var sem Semaphore
|
||||
sem.Initialize(count)
|
||||
|
||||
for i := 0; i < count; i++ {
|
||||
assertEqual(sem.TryAcquire(), true, t)
|
||||
}
|
||||
// used up the capacity
|
||||
assertEqual(sem.TryAcquire(), false, t)
|
||||
sem.Release()
|
||||
// got one slot back
|
||||
assertEqual(sem.TryAcquire(), true, t)
|
||||
}
|
||||
|
||||
func TestAcquireWithTimeout(t *testing.T) {
|
||||
var sem Semaphore
|
||||
sem.Initialize(1)
|
||||
|
||||
assertEqual(sem.TryAcquire(), true, t)
|
||||
|
||||
// cannot acquire the held semaphore
|
||||
assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), false, t)
|
||||
|
||||
sem.Release()
|
||||
// can acquire the released semaphore
|
||||
assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), true, t)
|
||||
sem.Release()
|
||||
|
||||
// XXX this test could fail if the machine is extremely overloaded
|
||||
sem.Acquire()
|
||||
go func() {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
sem.Release()
|
||||
}()
|
||||
// we should acquire successfully after approximately 100 msec
|
||||
assertEqual(sem.AcquireWithTimeout(1*time.Second), true, t)
|
||||
}
|
||||
Reference in New Issue
Block a user