github.com/status-im/status-go@v1.1.0/server/timeout_test.go (about) 1 package server 2 3 import ( 4 "crypto/rand" 5 "math/big" 6 "testing" 7 "time" 8 ) 9 10 func TestTimeoutManager(t *testing.T) { 11 tm := newTimeoutManager() 12 13 // test 0 timeout means timeout does not occur 14 tm.SetTimeout(0) 15 16 // test fuzzing - 0 timeout - multiple sequential calls to random init and stop funcs 17 for i := 0; i < 30; i++ { 18 b, err := rand.Int(rand.Reader, big.NewInt(2)) 19 if err != nil { 20 t.Error(err) 21 } 22 23 if b.Int64() == 1 { 24 tm.StartTimeout(t.FailNow) 25 } else { 26 tm.StopTimeout() 27 } 28 } 29 30 // test fuzzing - random timeout - multiple sequential calls to random init and stop funcs 31 for i := 0; i < 30; i++ { 32 b, err := rand.Int(rand.Reader, big.NewInt(2)) 33 if err != nil { 34 t.Error(err) 35 } 36 to, err := rand.Int(rand.Reader, big.NewInt(11)) 37 if err != nil { 38 t.Error(err) 39 } 40 41 tm.SetTimeout(uint(to.Int64() * 20)) 42 43 if b.Int64() == 1 { 44 tm.StartTimeout(t.FailNow) 45 } else { 46 tm.StopTimeout() 47 } 48 tm.StopTimeout() 49 } 50 51 // test StopTimeout() prevents termination func 52 tm.SetTimeout(20) 53 tm.StartTimeout(t.FailNow) 54 time.Sleep(10 * time.Millisecond) 55 tm.StopTimeout() 56 57 // test StartTimeout() executes termination func on timeout 58 ok := false 59 tm.SetTimeout(10) 60 tm.StartTimeout(func() { 61 ok = true 62 }) 63 time.Sleep(20 * time.Millisecond) 64 if !ok { 65 t.FailNow() 66 } 67 68 }