github.com/teng231/glock@v1.1.11/distributed_lock_test.go (about) 1 package glock 2 3 import ( 4 "fmt" 5 "log" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 /* 12 Run test: go test -run TestDistributeLock 13 go test -bench BenchmarkDistributedLock100t -benchmem 14 go test -bench BenchmarkDistributedLock10000t -benchmem 15 ?*/ 16 func TestDistributeLock(t *testing.T) { 17 dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 100*time.Second) 18 if err != nil { 19 panic(err) 20 } 21 wg := &sync.WaitGroup{} 22 wg.Add(3) 23 go func() { 24 time.AfterFunc(500*time.Millisecond, func() { 25 lctx, err := dl.Lock("test-redsync") 26 if err != nil { 27 log.Print(err) 28 } 29 log.Print("locked2.1") 30 if err := dl.Unlock(lctx); err != nil { 31 panic(err) 32 } 33 log.Print("done 2.2") 34 wg.Done() 35 }) 36 37 }() 38 go func() { 39 lctx, err := dl.Lock("test-redsync") 40 if err != nil { 41 log.Print(err) 42 log.Panic(err) 43 } 44 log.Print("locked3.1") 45 time.AfterFunc(2*time.Second, func() { 46 if err := dl.Unlock(lctx); err != nil { 47 panic(err) 48 } 49 log.Print("done 3.2") 50 wg.Done() 51 }) 52 53 }() 54 go func() { 55 time.AfterFunc(900*time.Millisecond, func() { 56 lctx, err := dl.Lock("test-redsync") 57 if err != nil { 58 log.Print(err) 59 log.Panic(err) 60 } 61 log.Print("locked1.1") 62 time.AfterFunc(2*time.Second, func() { 63 if err := dl.Unlock(lctx); err != nil { 64 panic(err) 65 } 66 log.Print("done 1.2") 67 wg.Done() 68 }) 69 }) 70 71 }() 72 wg.Wait() 73 } 74 75 func BenchmarkDistributedLock100t(t *testing.B) { 76 dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 4*time.Second) 77 if err != nil { 78 panic(err) 79 } 80 for i := 0; i < 100; i++ { 81 lctx, err := dl.Lock(fmt.Sprintf("test%v", i)) 82 if err != nil { 83 log.Print(err) 84 } 85 if err := dl.Unlock(lctx); err != nil { 86 log.Print(err) 87 } 88 } 89 } 90 91 func BenchmarkDistributedLock10000t(t *testing.B) { 92 dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 4*time.Second) 93 if err != nil { 94 panic(err) 95 } 96 for i := 0; i < 10000; i++ { 97 lctx, err := dl.Lock(fmt.Sprintf("test%v", i)) 98 if err != nil { 99 log.Print(err) 100 } 101 if err := dl.Unlock(lctx); err != nil { 102 log.Print(err) 103 } 104 } 105 }