Use timeouts instead of relying on runtime.GoSched

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
Brian Goff 2015-11-11 20:49:06 -05:00
parent 98054a8b5c
commit fd672d5926

View file

@ -1,8 +1,8 @@
package locker
import (
"runtime"
"testing"
"time"
)
func TestLockCounter(t *testing.T) {
@ -34,7 +34,21 @@ func TestLockerLock(t *testing.T) {
close(chDone)
}()
runtime.Gosched()
chWaiting := make(chan struct{})
go func() {
for range time.Tick(1 * time.Millisecond) {
if ctr.count() == 1 {
close(chWaiting)
break
}
}
}()
select {
case <-chWaiting:
case <-time.After(3 * time.Second):
t.Fatal("timed out waiting for lock waiters to be incremented")
}
select {
case <-chDone:
@ -42,25 +56,14 @@ func TestLockerLock(t *testing.T) {
default:
}
if ctr.count() != 1 {
t.Fatalf("expected waiters to be 1, got: %d", ctr.count())
}
if err := l.Unlock("test"); err != nil {
t.Fatal(err)
}
runtime.Gosched()
select {
case <-chDone:
default:
// one more time just to be sure
runtime.Gosched()
select {
case <-chDone:
default:
t.Fatalf("lock should have completed")
}
case <-time.After(3 * time.Second):
t.Fatalf("lock should have completed")
}
if ctr.count() != 0 {
@ -80,11 +83,9 @@ func TestLockerUnlock(t *testing.T) {
close(chDone)
}()
runtime.Gosched()
select {
case <-chDone:
default:
case <-time.After(3 * time.Second):
t.Fatalf("lock should not be blocked")
}
}