safetimer_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "sync"
  4. "testing"
  5. "time"
  6. )
  7. func TestSafeTimer(tt *testing.T) {
  8. deadtime := time.Now().Add(2 * time.Second)
  9. t := NewSafeTimer(100 * time.Hour)
  10. wg := sync.WaitGroup{}
  11. wg.Add(8)
  12. for i := 0; i < 8; i++ {
  13. go func() {
  14. for {
  15. t.Reset(10 * time.Hour)
  16. if time.Now().After(deadtime) {
  17. break
  18. }
  19. }
  20. wg.Done()
  21. }()
  22. }
  23. wg.Wait()
  24. }
  25. func TestSafeTimerUsage(tt *testing.T) {
  26. t := NewSafeTimer(500 * time.Millisecond)
  27. done := make(chan bool, 1)
  28. go func() {
  29. for range t.C {
  30. done <- true
  31. }
  32. }()
  33. select {
  34. case <-done:
  35. case <-time.After(time.Second):
  36. tt.Fatal("Should accept signal, but got nothing")
  37. }
  38. t.Reset()
  39. select {
  40. case <-done:
  41. case <-time.After(time.Second):
  42. tt.Fatal("Should accept signal, but got nothing")
  43. }
  44. t.Reset()
  45. t.Reset()
  46. select {
  47. case <-done:
  48. case <-time.After(time.Second):
  49. tt.Fatal("Should accept signal, but got nothing")
  50. }
  51. select {
  52. case <-done:
  53. tt.Fatal("Should accept nothing, because already accept someting")
  54. case <-time.After(time.Second):
  55. }
  56. t.Stop()
  57. select {
  58. case <-done:
  59. tt.Fatal("Should not accept for timer already stopped")
  60. case <-time.After(time.Second):
  61. }
  62. }
  63. // func TestMustPanic(tt *testing.T) {
  64. // defer func() {
  65. // if r := recover(); r == nil {
  66. // tt.Errorf("The code did not panic")
  67. // }
  68. // }()
  69. // deadtime := time.Now().Add(2 * time.Second)
  70. // t := time.NewTimer(100 * time.Hour)
  71. // wg := sync.WaitGroup{}
  72. // wg.Add(8)
  73. // for i := 0; i < 8; i++ {
  74. // go func() {
  75. // for {
  76. // t.Reset(10 * time.Hour)
  77. // if time.Now().After(deadtime) {
  78. // break
  79. // }
  80. // }
  81. // wg.Done()
  82. // }()
  83. // }
  84. // wg.Wait()
  85. // }