From c21fbfea57a15bd8f6b204dfcf8b74321cbe9124 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Tue, 24 Jun 2025 06:03:27 +0000 Subject: [PATCH 1/3] chore: fix wsproxy test flake --- enterprise/wsproxy/wsproxy_test.go | 49 ++++++++++++++++++------------ 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/enterprise/wsproxy/wsproxy_test.go b/enterprise/wsproxy/wsproxy_test.go index 99cb5c60545f9..21a0c4e458dab 100644 --- a/enterprise/wsproxy/wsproxy_test.go +++ b/enterprise/wsproxy/wsproxy_test.go @@ -838,27 +838,33 @@ func TestWorkspaceProxyDERPMeshProbe(t *testing.T) { require.NoError(t, err) // Create 1 real proxy replica. - replicaPingErr := make(chan string, 4) + replicaPingRes := make(chan replicaPingCallback, 4) proxy := coderdenttest.NewWorkspaceProxyReplica(t, api, client, &coderdenttest.ProxyOptions{ Name: "proxy-2", ProxyURL: proxyURL, - ReplicaPingCallback: func(_ []codersdk.Replica, err string) { - replicaPingErr <- err + ReplicaPingCallback: func(replicas []codersdk.Replica, err string) { + t.Logf("got wsproxy ping callback: replica count: %v, ping error: %s", len(replicas), err) + replicaPingRes <- replicaPingCallback{ + replicas: replicas, + err: err, + } }, }) + // Create a second proxy replica that isn't working. ctx := testutil.Context(t, testutil.WaitLong) otherReplicaID := registerBrokenProxy(ctx, t, api.AccessURL, proxyURL.String(), proxy.Options.ProxySessionToken) - // Force the proxy to re-register immediately. - err = proxy.RegisterNow() - require.NoError(t, err, "failed to force proxy to re-register") - - // Wait for the ping to fail. + // Force the proxy to re-register and wait for the ping to fail. for { - replicaErr := testutil.TryReceive(ctx, t, replicaPingErr) - t.Log("replica ping error:", replicaErr) - if replicaErr != "" { + err = proxy.RegisterNow() + require.NoError(t, err, "failed to force proxy to re-register") + + pingRes := testutil.TryReceive(ctx, t, replicaPingRes) + // We want to ensure that we know about the other replica, and the + // ping failed. + if len(pingRes.replicas) == 1 && pingRes.err != "" { + t.Log("got failed ping callback for other replica, continuing") break } } @@ -884,17 +890,17 @@ func TestWorkspaceProxyDERPMeshProbe(t *testing.T) { }) require.NoError(t, err) - // Force the proxy to re-register immediately. - err = proxy.RegisterNow() - require.NoError(t, err, "failed to force proxy to re-register") - - // Wait for the ping to be skipped. + // Force the proxy to re-register and wait for the ping to be skipped + // because there are no more siblings. for { - replicaErr := testutil.TryReceive(ctx, t, replicaPingErr) - t.Log("replica ping error:", replicaErr) + err = proxy.RegisterNow() + require.NoError(t, err, "failed to force proxy to re-register") + + replicaErr := testutil.TryReceive(ctx, t, replicaPingRes) // Should be empty because there are no more peers. This was where // the regression was. - if replicaErr == "" { + if len(replicaErr.replicas) == 0 && replicaErr.err == "" { + t.Log("got empty ping callback with no sibling replicas, continuing") break } } @@ -993,6 +999,11 @@ func TestWorkspaceProxyWorkspaceApps(t *testing.T) { }) } +type replicaPingCallback struct { + replicas []codersdk.Replica + err string +} + func TestWorkspaceProxyWorkspaceApps_BlockDirect(t *testing.T) { t.Parallel() From 5d1bb94fbc556ac521ab06106b5bc94301b2143f Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Tue, 24 Jun 2025 06:57:07 +0000 Subject: [PATCH 2/3] flake 2 --- enterprise/wsproxy/wsproxy_test.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/enterprise/wsproxy/wsproxy_test.go b/enterprise/wsproxy/wsproxy_test.go index 21a0c4e458dab..ca08ea19d385d 100644 --- a/enterprise/wsproxy/wsproxy_test.go +++ b/enterprise/wsproxy/wsproxy_test.go @@ -1,6 +1,7 @@ package wsproxy_test import ( + "bytes" "context" "encoding/json" "fmt" @@ -1129,7 +1130,7 @@ func createDERPClient(t *testing.T, ctx context.Context, name string, derpURL st // received on dstCh. // // If the packet doesn't arrive within 500ms, it will try to send it again until -// testutil.WaitLong is reached. +// the context expires. // //nolint:revive func testDERPSend(t *testing.T, ctx context.Context, dstKey key.NodePublic, dstCh <-chan derp.ReceivedPacket, src *derphttp.Client) { @@ -1150,11 +1151,17 @@ func testDERPSend(t *testing.T, ctx context.Context, dstKey key.NodePublic, dstC for { select { case pkt := <-dstCh: - require.Equal(t, src.SelfPublicKey(), pkt.Source, "packet came from wrong source") - require.Equal(t, msg, pkt.Data, "packet data is wrong") + if pkt.Source != src.SelfPublicKey() { + t.Logf("packet came from wrong source: %s", pkt.Source) + continue + } + if !bytes.Equal(pkt.Data, msg) { + t.Logf("packet data is wrong: %s", pkt.Data) + continue + } return case <-ctx.Done(): - t.Fatal("timed out waiting for packet") + t.Fatal("timed out waiting for valid packet") return case <-ticker.C: } From cc4b0a4792d45e624aec463e7ffc5f34efe66925 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Tue, 24 Jun 2025 07:12:29 +0000 Subject: [PATCH 3/3] reduce count --- enterprise/wsproxy/wsproxy_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enterprise/wsproxy/wsproxy_test.go b/enterprise/wsproxy/wsproxy_test.go index ca08ea19d385d..b49dfd6c1ceaa 100644 --- a/enterprise/wsproxy/wsproxy_test.go +++ b/enterprise/wsproxy/wsproxy_test.go @@ -498,8 +498,8 @@ func TestDERPMesh(t *testing.T) { proxyURL, err := url.Parse("https://proxy.test.coder.com") require.NoError(t, err) - // Create 6 proxy replicas. - const count = 6 + // Create 3 proxy replicas. + const count = 3 var ( sessionToken = "" proxies = [count]coderdenttest.WorkspaceProxy{} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy