@@ -974,13 +974,13 @@ func (f *fakeResumeTokenClient) RefreshResumeToken(_ context.Context, _ *proto.R
974974}
975975select {
976976case <- f .ctx .Done ():
977- return nil ,f . ctx . Err ()
977+ return nil ,timeoutOnFakeErr
978978case f .calls <- call :
979979// OK
980980}
981981select {
982982case <- f .ctx .Done ():
983- return nil ,f . ctx . Err ()
983+ return nil ,timeoutOnFakeErr
984984case err := <- call .errCh :
985985return nil ,err
986986case resp := <- call .resp :
@@ -1240,6 +1240,11 @@ func (p *pipeDialer) Dial(_ context.Context, _ tailnet.ResumeTokenController) (t
12401240},nil
12411241}
12421242
1243+ // timeoutOnFakeErr is the error we send when fakes fail to send calls or receive responses before
1244+ // their context times out. We don't want to send the context error since that often doesn't trigger
1245+ // test failures or logging.
1246+ var timeoutOnFakeErr = xerrors .New ("test timeout" )
1247+
12431248type fakeCoordinatorClient struct {
12441249ctx context.Context
12451250t testing.TB
@@ -1253,15 +1258,13 @@ func (f fakeCoordinatorClient) Close() error {
12531258errs := make (chan error )
12541259select {
12551260case <- f .ctx .Done ():
1256- f .t .Error ("timed out waiting to send close call" )
1257- return f .ctx .Err ()
1261+ return timeoutOnFakeErr
12581262case f .close <- errs :
12591263// OK
12601264}
12611265select {
12621266case <- f .ctx .Done ():
1263- f .t .Error ("timed out waiting for close call response" )
1264- return f .ctx .Err ()
1267+ return timeoutOnFakeErr
12651268case err := <- errs :
12661269return err
12671270}
@@ -1276,15 +1279,13 @@ func (f fakeCoordinatorClient) Send(request *proto.CoordinateRequest) error {
12761279}
12771280select {
12781281case <- f .ctx .Done ():
1279- f .t .Error ("timed out waiting to send call" )
1280- return f .ctx .Err ()
1282+ return timeoutOnFakeErr
12811283case f .reqs <- call :
12821284// OK
12831285}
12841286select {
12851287case <- f .ctx .Done ():
1286- f .t .Error ("timed out waiting for send call response" )
1287- return f .ctx .Err ()
1288+ return timeoutOnFakeErr
12881289case err := <- errs :
12891290return err
12901291}
@@ -1300,15 +1301,13 @@ func (f fakeCoordinatorClient) Recv() (*proto.CoordinateResponse, error) {
13001301}
13011302select {
13021303case <- f .ctx .Done ():
1303- f .t .Error ("timed out waiting to send Recv() call" )
1304- return nil ,f .ctx .Err ()
1304+ return nil ,timeoutOnFakeErr
13051305case f .resps <- call :
13061306// OK
13071307}
13081308select {
13091309case <- f .ctx .Done ():
1310- f .t .Error ("timed out waiting for Recv() call response" )
1311- return nil ,f .ctx .Err ()
1310+ return nil ,timeoutOnFakeErr
13121311case err := <- errs :
13131312return nil ,err
13141313case resp := <- resps :
@@ -1348,15 +1347,13 @@ func (f *fakeWorkspaceUpdateClient) Close() error {
13481347errs := make (chan error )
13491348select {
13501349case <- f .ctx .Done ():
1351- f .t .Error ("timed out waiting to send close call" )
1352- return f .ctx .Err ()
1350+ return timeoutOnFakeErr
13531351case f .close <- errs :
13541352// OK
13551353}
13561354select {
13571355case <- f .ctx .Done ():
1358- f .t .Error ("timed out waiting for close call response" )
1359- return f .ctx .Err ()
1356+ return timeoutOnFakeErr
13601357case err := <- errs :
13611358return err
13621359}
@@ -1372,15 +1369,13 @@ func (f *fakeWorkspaceUpdateClient) Recv() (*proto.WorkspaceUpdate, error) {
13721369}
13731370select {
13741371case <- f .ctx .Done ():
1375- f .t .Error ("timed out waiting to send Recv() call" )
1376- return nil ,f .ctx .Err ()
1372+ return nil ,timeoutOnFakeErr
13771373case f .recv <- call :
13781374// OK
13791375}
13801376select {
13811377case <- f .ctx .Done ():
1382- f .t .Error ("timed out waiting for Recv() call response" )
1383- return nil ,f .ctx .Err ()
1378+ return nil ,timeoutOnFakeErr
13841379case err := <- errs :
13851380return nil ,err
13861381case resp := <- resps :
@@ -1440,28 +1435,26 @@ func (f *fakeDNSSetter) SetDNSHosts(hosts map[dnsname.FQDN][]netip.Addr) error {
14401435}
14411436select {
14421437case <- f .ctx .Done ():
1443- f .t .Error ("timed out waiting to send SetDNSHosts() call" )
1444- return f .ctx .Err ()
1438+ return timeoutOnFakeErr
14451439case f .calls <- call :
14461440// OK
14471441}
14481442select {
14491443case <- f .ctx .Done ():
1450- f .t .Error ("timed out waiting for SetDNSHosts() call response" )
1451- return f .ctx .Err ()
1444+ return timeoutOnFakeErr
14521445case err := <- errs :
14531446return err
14541447}
14551448}
14561449
14571450func setupConnectedAllWorkspaceUpdatesController (
1458- ctx context.Context ,t testing.TB ,logger slog.Logger ,dnsSetter tailnet.DNSHostsSetter ,
1451+ ctx context.Context ,t testing.TB ,logger slog.Logger ,opts ... tailnet.TunnelAllOption ,
14591452) (
14601453* fakeCoordinatorClient ,* fakeWorkspaceUpdateClient ,
14611454) {
14621455fConn := & fakeCoordinatee {}
14631456tsc := tailnet .NewTunnelSrcCoordController (logger ,fConn )
1464- uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc ,dnsSetter )
1457+ uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc ,opts ... )
14651458
14661459// connect up a coordinator client, to track adding and removing tunnels
14671460coordC := newFakeCoordinatorClient (ctx ,t )
@@ -1496,7 +1489,8 @@ func TestTunnelAllWorkspaceUpdatesController_Initial(t *testing.T) {
14961489logger := testutil .Logger (t )
14971490
14981491fDNS := newFakeDNSSetter (ctx ,t )
1499- coordC ,updateC := setupConnectedAllWorkspaceUpdatesController (ctx ,t ,logger ,fDNS )
1492+ coordC ,updateC := setupConnectedAllWorkspaceUpdatesController (ctx ,t ,logger ,
1493+ tailnet .WithDNS (fDNS ,"testy" ))
15001494
15011495// Initial update contains 2 workspaces with 1 & 2 agents, respectively
15021496w1ID := testUUID (1 )
@@ -1532,9 +1526,13 @@ func TestTunnelAllWorkspaceUpdatesController_Initial(t *testing.T) {
15321526
15331527// Also triggers setting DNS hosts
15341528expectedDNS := map [dnsname.FQDN ][]netip.Addr {
1535- "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1536- "w2a1.w2.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0201::" )},
1537- "w2a2.w2.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0202::" )},
1529+ "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1530+ "w2a1.w2.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0201::" )},
1531+ "w2a2.w2.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0202::" )},
1532+ "w1a1.w1.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1533+ "w2a1.w2.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0201::" )},
1534+ "w2a2.w2.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0202::" )},
1535+ "w1.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
15381536}
15391537dnsCall := testutil .RequireRecvCtx (ctx ,t ,fDNS .calls )
15401538require .Equal (t ,expectedDNS ,dnsCall .hosts )
@@ -1547,7 +1545,8 @@ func TestTunnelAllWorkspaceUpdatesController_DeleteAgent(t *testing.T) {
15471545logger := testutil .Logger (t )
15481546
15491547fDNS := newFakeDNSSetter (ctx ,t )
1550- coordC ,updateC := setupConnectedAllWorkspaceUpdatesController (ctx ,t ,logger ,fDNS )
1548+ coordC ,updateC := setupConnectedAllWorkspaceUpdatesController (ctx ,t ,logger ,
1549+ tailnet .WithDNS (fDNS ,"testy" ))
15511550
15521551w1ID := testUUID (1 )
15531552w1a1ID := testUUID (1 ,1 )
@@ -1571,7 +1570,9 @@ func TestTunnelAllWorkspaceUpdatesController_DeleteAgent(t *testing.T) {
15711570
15721571// DNS for w1a1
15731572expectedDNS := map [dnsname.FQDN ][]netip.Addr {
1574- "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1573+ "w1a1.w1.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1574+ "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1575+ "w1.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
15751576}
15761577dnsCall := testutil .RequireRecvCtx (ctx ,t ,fDNS .calls )
15771578require .Equal (t ,expectedDNS ,dnsCall .hosts )
@@ -1601,7 +1602,9 @@ func TestTunnelAllWorkspaceUpdatesController_DeleteAgent(t *testing.T) {
16011602
16021603// DNS contains only w1a2
16031604expectedDNS = map [dnsname.FQDN ][]netip.Addr {
1604- "w1a2.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0102::" )},
1605+ "w1a2.w1.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0102::" )},
1606+ "w1a2.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0102::" )},
1607+ "w1.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0102::" )},
16051608}
16061609dnsCall = testutil .RequireRecvCtx (ctx ,t ,fDNS .calls )
16071610require .Equal (t ,expectedDNS ,dnsCall .hosts )
@@ -1619,7 +1622,9 @@ func TestTunnelAllWorkspaceUpdatesController_DNSError(t *testing.T) {
16191622fDNS := newFakeDNSSetter (ctx ,t )
16201623fConn := & fakeCoordinatee {}
16211624tsc := tailnet .NewTunnelSrcCoordController (logger ,fConn )
1622- uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc ,fDNS )
1625+ uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc ,
1626+ tailnet .WithDNS (fDNS ,"testy" ),
1627+ )
16231628
16241629updateC := newFakeWorkspaceUpdateClient (ctx ,t )
16251630updateCW := uut .New (updateC )
@@ -1639,7 +1644,9 @@ func TestTunnelAllWorkspaceUpdatesController_DNSError(t *testing.T) {
16391644
16401645// DNS for w1a1
16411646expectedDNS := map [dnsname.FQDN ][]netip.Addr {
1642- "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1647+ "w1a1.w1.me.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1648+ "w1a1.w1.testy.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
1649+ "w1.coder." : {netip .MustParseAddr ("fd60:627a:a42b:0101::" )},
16431650}
16441651dnsCall := testutil .RequireRecvCtx (ctx ,t ,fDNS .calls )
16451652require .Equal (t ,expectedDNS ,dnsCall .hosts )
@@ -1746,7 +1753,7 @@ func TestTunnelAllWorkspaceUpdatesController_HandleErrors(t *testing.T) {
17461753
17471754fConn := & fakeCoordinatee {}
17481755tsc := tailnet .NewTunnelSrcCoordController (logger ,fConn )
1749- uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc , nil )
1756+ uut := tailnet .NewTunnelAllWorkspaceUpdatesController (logger ,tsc )
17501757updateC := newFakeWorkspaceUpdateClient (ctx ,t )
17511758updateCW := uut .New (updateC )
17521759
@@ -1780,18 +1787,16 @@ func (f fakeWorkspaceUpdatesController) New(client tailnet.WorkspaceUpdatesClien
17801787}
17811788select {
17821789case <- f .ctx .Done ():
1783- f .t .Error ("timed out waiting to send New call" )
17841790cw := newFakeCloserWaiter ()
1785- cw .errCh <- f . ctx . Err ()
1791+ cw .errCh <- timeoutOnFakeErr
17861792return cw
17871793case f .calls <- call :
17881794// OK
17891795}
17901796select {
17911797case <- f .ctx .Done ():
1792- f .t .Error ("timed out waiting to get New call response" )
17931798cw := newFakeCloserWaiter ()
1794- cw .errCh <- f . ctx . Err ()
1799+ cw .errCh <- timeoutOnFakeErr
17951800return cw
17961801case resp := <- resps :
17971802return resp