From eebfd1598377f2cbff1d997d595bc5c3b874d0b0 Mon Sep 17 00:00:00 2001 From: Thomas Jungblut Date: Thu, 17 Nov 2022 10:59:22 +0100 Subject: [PATCH] Fix TestCtlV3Lock/Elect flakes waiting for a proper exit after a signal should ensure the goroutines don't leak. Signed-off-by: Thomas Jungblut --- tests/e2e/ctl_v3_elect_test.go | 12 ++++++++++-- tests/e2e/ctl_v3_lock_test.go | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/tests/e2e/ctl_v3_elect_test.go b/tests/e2e/ctl_v3_elect_test.go index d40b3ae90..f3808e006 100644 --- a/tests/e2e/ctl_v3_elect_test.go +++ b/tests/e2e/ctl_v3_elect_test.go @@ -64,7 +64,12 @@ func testElect(cx ctlCtx) { if err != nil { cx.t.Fatal(err) } - defer blockAcquire.Stop() + defer func(blockAcquire *expect.ExpectProcess) { + err = blockAcquire.Stop() + require.NoError(cx.t, err) + blockAcquire.Wait() + }(blockAcquire) + select { case <-time.After(100 * time.Millisecond): case <-ch: @@ -110,7 +115,10 @@ func ctlV3Elect(cx ctlCtx, name, proposal string, expectFailure bool) (*expect.E return proc, outc, err } go func() { - s, xerr := proc.ExpectFunc(context.TODO(), func(string) bool { return true }) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + s, xerr := proc.ExpectFunc(ctx, func(string) bool { return true }) if xerr != nil { if !expectFailure { cx.t.Errorf("expect failed (%v)", xerr) diff --git a/tests/e2e/ctl_v3_lock_test.go b/tests/e2e/ctl_v3_lock_test.go index 82e6390b1..4f3e329e5 100644 --- a/tests/e2e/ctl_v3_lock_test.go +++ b/tests/e2e/ctl_v3_lock_test.go @@ -69,7 +69,12 @@ func testLock(cx ctlCtx) { if err != nil { cx.t.Fatal(err) } - defer blockAcquire.Stop() + defer func(blockAcquire *expect.ExpectProcess) { + err = blockAcquire.Stop() + require.NoError(cx.t, err) + blockAcquire.Wait() + }(blockAcquire) + select { case <-time.After(100 * time.Millisecond): case <-ch: @@ -130,7 +135,10 @@ func ctlV3Lock(cx ctlCtx, name string) (*expect.ExpectProcess, <-chan string, er return proc, outc, err } go func() { - s, xerr := proc.ExpectFunc(context.TODO(), func(string) bool { return true }) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + s, xerr := proc.ExpectFunc(ctx, func(string) bool { return true }) if xerr != nil { require.ErrorContains(cx.t, xerr, "Error: context canceled") }