diff --git a/common/event_emitter_test.go b/common/event_emitter_test.go index d459037b8..fa62f6b6b 100644 --- a/common/event_emitter_test.go +++ b/common/event_emitter_test.go @@ -24,6 +24,7 @@ import ( "context" "sync" "testing" + "time" "github.com/chromedp/cdproto" "github.com/stretchr/testify/assert" @@ -145,7 +146,7 @@ func TestBaseEventEmitter(t *testing.T) { eventName := "AtomicIntEvent" maxInt := 100 - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) emitter := NewBaseEventEmitter(ctx) ch := make(chan Event) emitter.on(ctx, []string{eventName}, ch) @@ -158,11 +159,16 @@ func TestBaseEventEmitter(t *testing.T) { defer wg.Done() for expectedI != maxInt { - e := <-ch + var e Event + select { + case e = <-ch: + case <-ctx.Done(): + assert.FailNow(t, "context cancelled before test completed, deadlock?") + } i, ok := e.data.(int) if !ok { - assert.Fail(t, "unexpected type read from channel", e.data) + assert.FailNow(t, "unexpected type read from channel", e.data) } assert.Equal(t, eventName, e.typ) @@ -181,6 +187,12 @@ func TestBaseEventEmitter(t *testing.T) { defer wg.Done() for i := 0; i < maxInt; i++ { + select { + case <-ctx.Done(): + assert.FailNow(t, "context cancelled before test completed, deadlock?") + default: + } + i := i emitter.emit(eventName, i) } @@ -207,7 +219,7 @@ func TestBaseEventEmitter(t *testing.T) { eventName2 := "AtomicIntEvent2" maxInt := 100 - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) emitter := NewBaseEventEmitter(ctx) ch := make(chan Event) emitter.on(ctx, []string{eventName1, eventName2}, ch) @@ -224,19 +236,24 @@ func TestBaseEventEmitter(t *testing.T) { break } - e := <-ch + var e Event + select { + case e = <-ch: + case <-ctx.Done(): + assert.FailNow(t, "context cancelled before test completed, deadlock?") + } switch e.typ { case eventName1: i, ok := e.data.(int) if !ok { - assert.Fail(t, "unexpected type read from channel", e.data) + assert.FailNow(t, "unexpected type read from channel", e.data) } emitter.emit(eventName2, i) case eventName2: expectedI2++ default: - assert.Fail(t, "unexpected event type received") + assert.FailNow(t, "unexpected event type received") } } @@ -250,6 +267,12 @@ func TestBaseEventEmitter(t *testing.T) { defer wg.Done() for i := 0; i < maxInt; i++ { + select { + case <-ctx.Done(): + assert.FailNow(t, "context cancelled before test completed, deadlock?") + default: + } + i := i emitter.emit(eventName1, i) }