From 1ff9131e7d3cc56fb923864176369f21689760ef Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Tue, 10 Oct 2023 16:45:50 +0400 Subject: [PATCH] fix: ignore spurious node updates while waiting for errors --- enterprise/tailnet/pgcoord_test.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/enterprise/tailnet/pgcoord_test.go b/enterprise/tailnet/pgcoord_test.go index 031b863144e92..7bc7c89767054 100644 --- a/enterprise/tailnet/pgcoord_test.go +++ b/enterprise/tailnet/pgcoord_test.go @@ -645,12 +645,20 @@ func (c *testConn) recvNodes(ctx context.Context, t *testing.T) []*agpl.Node { func (c *testConn) recvErr(ctx context.Context, t *testing.T) error { t.Helper() - select { - case <-ctx.Done(): - t.Fatal("timeout receiving error") - return ctx.Err() - case err := <-c.errChan: - return err + // pgCoord works on eventual consistency, so it sometimes sends extra node + // updates, and these block errors if not read from the nodes channel. + for { + select { + case nodes := <-c.nodeChan: + t.Logf("ignoring nodes update while waiting for error; id=%s, nodes=%+v", + c.id.String(), nodes) + continue + case <-ctx.Done(): + t.Fatal("timeout receiving error") + return ctx.Err() + case err := <-c.errChan: + return err + } } }