portlock - portlock_test.go
1 package portlock
2
3 import (
4 "runtime"
5 "sync"
6 "testing"
7 )
8
9 var _ sync.Locker = &mutex{}
10
11 func HammerMutex(m Locker, loops int, cdone chan bool) {
12 for i := 0; i < loops; i++ {
13 if i%3 == 0 {
14 if m.TryLock() {
15 m.Unlock()
16 }
17
18 continue
19 }
20
21 m.Lock()
22 m.Unlock()
23 }
24
25 cdone <- true
26 }
27
28 func TestMutex(t *testing.T) {
29 if n := runtime.SetMutexProfileFraction(1); n != 0 {
30 t.Logf("got mutexrate %d expected 0", n)
31 }
32
33 defer runtime.SetMutexProfileFraction(0)
34
35 m := New("127.0.0.1:9999")
36
37 m.Lock()
38
39 if m.TryLock() {
40 t.Fatalf("TryLock succeeded with mutex locked")
41 }
42
43 m.Unlock()
44
45 if !m.TryLock() {
46 t.Fatalf("TryLock failed with mutex unlocked")
47 }
48
49 m.Unlock()
50
51 c := make(chan bool)
52
53 for i := 0; i < 10; i++ {
54 go HammerMutex(m, 1000, c)
55 }
56
57 for i := 0; i < 10; i++ {
58 <-c
59 }
60 }
61