@@ -2,10 +2,8 @@ package vpn
22
33import (
44"context"
5- "encoding/json"
65"maps"
76"net"
8- "net/http"
97"net/netip"
108"net/url"
119"slices"
@@ -24,51 +22,32 @@ import (
2422"github.com/coder/quartz"
2523
2624maputil"github.com/coder/coder/v2/coderd/util/maps"
27- "github.com/coder/coder/v2/codersdk"
2825"github.com/coder/coder/v2/tailnet"
2926"github.com/coder/coder/v2/tailnet/proto"
3027"github.com/coder/coder/v2/testutil"
3128)
3229
3330func newFakeClient (ctx context.Context ,t * testing.T )* fakeClient {
3431return & fakeClient {
35- t :t ,
36- ctx :ctx ,
37- connCh :make (chan * fakeConn ,1 ),
38- }
39- }
40-
41- func newFakeClientWithOptsCh (ctx context.Context ,t * testing.T )* fakeClient {
42- return & fakeClient {
43- t :t ,
44- ctx :ctx ,
45- connCh :make (chan * fakeConn ,1 ),
46- optsCh :make (chan * Options ,1 ),
32+ t :t ,
33+ ctx :ctx ,
34+ ch :make (chan * fakeConn ,1 ),
4735}
4836}
4937
5038type fakeClient struct {
51- t * testing.T
52- ctx context.Context
53- connCh chan * fakeConn
54- optsCh chan * Options // options will be written to this channel if it's not nil
39+ t * testing.T
40+ ctx context.Context
41+ ch chan * fakeConn
5542}
5643
5744var _ Client = (* fakeClient )(nil )
5845
59- func (f * fakeClient )NewConn (_ context.Context ,_ * url.URL ,_ string ,opts * Options ) (Conn ,error ) {
60- if f .optsCh != nil {
61- select {
62- case <- f .ctx .Done ():
63- return nil ,f .ctx .Err ()
64- case f .optsCh <- opts :
65- }
66- }
67-
46+ func (f * fakeClient )NewConn (context.Context ,* url.URL ,string ,* Options ) (Conn ,error ) {
6847select {
6948case <- f .ctx .Done ():
7049return nil ,f .ctx .Err ()
71- case conn := <- f .connCh :
50+ case conn := <- f .ch :
7251return conn ,nil
7352}
7453}
@@ -155,53 +134,37 @@ func TestTunnel_StartStop(t *testing.T) {
155134t .Parallel ()
156135
157136ctx := testutil .Context (t ,testutil .WaitShort )
158- client := newFakeClientWithOptsCh (ctx ,t )
137+ client := newFakeClient (ctx ,t )
159138conn := newFakeConn (tailnet.WorkspaceUpdate {}, time.Time {})
160139
161140_ ,mgr := setupTunnel (t ,ctx ,client ,quartz .NewMock (t ))
162141
163142errCh := make (chan error ,1 )
164143var resp * TunnelMessage
165144// When: we start the tunnel
166- telemetry := codersdk.CoderDesktopTelemetry {
167- DeviceID :"device001" ,
168- DeviceOS :"macOS" ,
169- CoderDesktopVersion :"0.24.8" ,
170- }
171- telemetryJSON ,err := json .Marshal (telemetry )
172- require .NoError (t ,err )
173145go func () {
174146r ,err := mgr .unaryRPC (ctx ,& ManagerMessage {
175147Msg :& ManagerMessage_Start {
176148Start :& StartRequest {
177149TunnelFileDescriptor :2 ,
178- // Use default value for TunnelUseSoftNetIsolation
179- CoderUrl :"https://coder.example.com" ,
180- ApiToken :"fakeToken" ,
150+ CoderUrl :"https://coder.example.com" ,
151+ ApiToken :"fakeToken" ,
181152Headers : []* StartRequest_Header {
182153{Name :"X-Test-Header" ,Value :"test" },
183154},
184- DeviceOs :telemetry . DeviceOS ,
185- DeviceId :telemetry . DeviceID ,
186- CoderDesktopVersion :telemetry . CoderDesktopVersion ,
155+ DeviceOs :"macOS" ,
156+ DeviceId :"device001" ,
157+ CoderDesktopVersion :"0.24.8" ,
187158},
188159},
189160})
190161resp = r
191162errCh <- err
192163}()
193-
194- // Then: `NewConn` is called
195- opts := testutil .RequireReceive (ctx ,t ,client .optsCh )
196- require .Equal (t , http.Header {
197- "X-Test-Header" : {"test" },
198- codersdk .CoderDesktopTelemetryHeader : {string (telemetryJSON )},
199- },opts .Headers )
200- require .False (t ,opts .UseSoftNetIsolation )// the default is false
201- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
202-
164+ // Then: `NewConn` is called,
165+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
203166// And: a response is received
204- err = testutil .TryReceive (ctx ,t ,errCh )
167+ err : =testutil .TryReceive (ctx ,t ,errCh )
205168require .NoError (t ,err )
206169_ ,ok := resp .Msg .(* TunnelMessage_Start )
207170require .True (t ,ok )
@@ -234,7 +197,7 @@ func TestTunnel_PeerUpdate(t *testing.T) {
234197wsID1 := uuid.UUID {1 }
235198wsID2 := uuid.UUID {2 }
236199
237- client := newFakeClientWithOptsCh (ctx ,t )
200+ client := newFakeClient (ctx ,t )
238201conn := newFakeConn (tailnet.WorkspaceUpdate {
239202UpsertedWorkspaces : []* tailnet.Workspace {
240203{
@@ -248,28 +211,22 @@ func TestTunnel_PeerUpdate(t *testing.T) {
248211
249212tun ,mgr := setupTunnel (t ,ctx ,client ,quartz .NewMock (t ))
250213
251- // When: we start the tunnel
252214errCh := make (chan error ,1 )
253215var resp * TunnelMessage
254216go func () {
255217r ,err := mgr .unaryRPC (ctx ,& ManagerMessage {
256218Msg :& ManagerMessage_Start {
257219Start :& StartRequest {
258- TunnelFileDescriptor :2 ,
259- TunnelUseSoftNetIsolation :true ,
260- CoderUrl :"https://coder.example.com" ,
261- ApiToken :"fakeToken" ,
220+ TunnelFileDescriptor :2 ,
221+ CoderUrl :"https://coder.example.com" ,
222+ ApiToken :"fakeToken" ,
262223},
263224},
264225})
265226resp = r
266227errCh <- err
267228}()
268-
269- // Then: `NewConn` is called
270- opts := testutil .RequireReceive (ctx ,t ,client .optsCh )
271- require .True (t ,opts .UseSoftNetIsolation )
272- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
229+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
273230err := testutil .TryReceive (ctx ,t ,errCh )
274231require .NoError (t ,err )
275232_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -334,7 +291,7 @@ func TestTunnel_NetworkSettings(t *testing.T) {
334291resp = r
335292errCh <- err
336293}()
337- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
294+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
338295err := testutil .TryReceive (ctx ,t ,errCh )
339296require .NoError (t ,err )
340297_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -475,7 +432,7 @@ func TestTunnel_sendAgentUpdate(t *testing.T) {
475432resp = r
476433errCh <- err
477434}()
478- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
435+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
479436err := testutil .TryReceive (ctx ,t ,errCh )
480437require .NoError (t ,err )
481438_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -646,7 +603,7 @@ func TestTunnel_sendAgentUpdateReconnect(t *testing.T) {
646603resp = r
647604errCh <- err
648605}()
649- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
606+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
650607err := testutil .TryReceive (ctx ,t ,errCh )
651608require .NoError (t ,err )
652609_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -746,7 +703,7 @@ func TestTunnel_sendAgentUpdateWorkspaceReconnect(t *testing.T) {
746703resp = r
747704errCh <- err
748705}()
749- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
706+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
750707err := testutil .TryReceive (ctx ,t ,errCh )
751708require .NoError (t ,err )
752709_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -849,7 +806,7 @@ func TestTunnel_slowPing(t *testing.T) {
849806resp = r
850807errCh <- err
851808}()
852- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
809+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
853810err := testutil .TryReceive (ctx ,t ,errCh )
854811require .NoError (t ,err )
855812_ ,ok := resp .Msg .(* TunnelMessage_Start )
@@ -938,7 +895,7 @@ func TestTunnel_stopMidPing(t *testing.T) {
938895resp = r
939896errCh <- err
940897}()
941- testutil .RequireSend (ctx ,t ,client .connCh ,conn )
898+ testutil .RequireSend (ctx ,t ,client .ch ,conn )
942899err := testutil .TryReceive (ctx ,t ,errCh )
943900require .NoError (t ,err )
944901_ ,ok := resp .Msg .(* TunnelMessage_Start )