github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/deadlock/detector_test.go (about) 1 package deadlock 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 func TestDetector(t *testing.T) { 9 var ( 10 lock1, lock2 Mutex 11 ) 12 lock1.Init() 13 lock2.Init() 14 15 var ( 16 errDL *ErrorDeadlock 17 errUsage *ErrorUsage 18 ) 19 20 go func() { 21 lock1.Lock() 22 23 time.Sleep(time.Millisecond * 200) 24 25 defer func() { 26 panicErr := recover() 27 errDL, errUsage = ParsePanicError(panicErr) 28 }() 29 30 lock2.Lock() 31 32 select {} 33 }() 34 35 time.Sleep(time.Millisecond * 100) 36 37 go func() { 38 lock2.Lock() 39 40 lock1.Lock() 41 }() 42 43 time.Sleep(time.Millisecond * 300) 44 if errDL == nil { 45 t.FailNow() 46 } 47 if errUsage != nil { 48 t.FailNow() 49 } 50 51 } 52 53 func TestMap(t *testing.T) { 54 m := make(map[int]int) 55 56 m[1]++ 57 58 if m[1] != 1 { 59 t.FailNow() 60 } 61 62 m[1]-- 63 m[1]-- 64 65 if m[1] != -1 { 66 t.FailNow() 67 } 68 69 var nilMap map[int]int 70 if _, ok := nilMap[1]; ok { 71 t.FailNow() 72 } 73 }