|
@@ -140,6 +140,25 @@ func TestPeriodicalExecutor_WaitFast(t *testing.T) {
|
|
assert.Equal(t, total, cnt)
|
|
assert.Equal(t, total, cnt)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func TestPeriodicalExecutor_Deadlock(t *testing.T) {
|
|
|
|
+ ticker := timex.NewFakeTicker()
|
|
|
|
+ defer ticker.Stop()
|
|
|
|
+
|
|
|
|
+ exec := NewPeriodicalExecutor(time.Millisecond, newContainer(time.Millisecond, nil))
|
|
|
|
+ exec.newTicker = func(d time.Duration) timex.Ticker {
|
|
|
|
+ return ticker
|
|
|
|
+ }
|
|
|
|
+ ticker.Tick()
|
|
|
|
+ exec.lock.Lock()
|
|
|
|
+ exec.backgroundFlush()
|
|
|
|
+ time.Sleep(20 * time.Millisecond)
|
|
|
|
+ ticker.Tick()
|
|
|
|
+ exec.commander <- 1
|
|
|
|
+ exec.lock.Unlock()
|
|
|
|
+ <-exec.confirmChan
|
|
|
|
+ exec.Wait()
|
|
|
|
+}
|
|
|
|
+
|
|
// go test -benchtime 10s -bench .
|
|
// go test -benchtime 10s -bench .
|
|
func BenchmarkExecutor(b *testing.B) {
|
|
func BenchmarkExecutor(b *testing.B) {
|
|
b.ReportAllocs()
|
|
b.ReportAllocs()
|