MCPcopy Index your code
hub / github.com/coder/coder / TestWebsocketDialer_TokenController

Function TestWebsocketDialer_TokenController

codersdk/workspacesdk/dialer_test.go:31–112  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

29)
30
31func TestWebsocketDialer_TokenController(t *testing.T) {
32 t.Parallel()
33 ctx := testutil.Context(t, testutil.WaitMedium)
34 logger := slogtest.Make(t, &slogtest.Options{
35 IgnoreErrors: true,
36 }).Leveled(slog.LevelDebug)
37
38 fTokenProv := newFakeTokenController(ctx, t)
39 fCoord := tailnettest.NewFakeCoordinator()
40 var coord tailnet.Coordinator = fCoord
41 coordPtr := atomic.Pointer[tailnet.Coordinator]{}
42 coordPtr.Store(&coord)
43
44 svc, err := tailnet.NewClientService(tailnet.ClientServiceOptions{
45 Logger: logger,
46 CoordPtr: &coordPtr,
47 DERPMapUpdateFrequency: time.Hour,
48 DERPMapFn: func() *tailcfg.DERPMap { return &tailcfg.DERPMap{} },
49 })
50 require.NoError(t, err)
51
52 dialTokens := make(chan string, 1)
53 wsErr := make(chan error, 1)
54 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
55 select {
56 case <-ctx.Done():
57 t.Error("timed out sending token")
58 case dialTokens <- r.URL.Query().Get("resume_token"):
59 // OK
60 }
61
62 sws, err := websocket.Accept(w, r, nil)
63 if !assert.NoError(t, err) {
64 return
65 }
66 wsCtx, nc := codersdk.WebsocketNetConn(ctx, sws, websocket.MessageBinary)
67 // streamID can be empty because we don't call RPCs in this test.
68 wsErr <- svc.ServeConnV2(wsCtx, nc, tailnet.StreamID{})
69 }))
70 defer svr.Close()
71 svrURL, err := url.Parse(svr.URL)
72 require.NoError(t, err)
73
74 uut := workspacesdk.NewWebsocketDialer(logger, svrURL, &websocket.DialOptions{})
75
76 clientCh := make(chan tailnet.ControlProtocolClients, 1)
77 go func() {
78 clients, err := uut.Dial(ctx, fTokenProv)
79 assert.NoError(t, err)
80 clientCh <- clients
81 }()
82
83 call := testutil.TryReceive(ctx, t, fTokenProv.tokenCalls)
84 call <- tokenResponse{"test token", true}
85 gotToken := <-dialTokens
86 require.Equal(t, "test token", gotToken)
87
88 clients := testutil.TryReceive(ctx, t, clientCh)

Callers

nothing calls this directly

Calls 15

ServeConnV2Method · 0.95
CloseMethod · 0.95
DialMethod · 0.95
ContextFunction · 0.92
NewFakeCoordinatorFunction · 0.92
NewClientServiceFunction · 0.92
WebsocketNetConnFunction · 0.92
NewWebsocketDialerFunction · 0.92
TryReceiveFunction · 0.92
newFakeTokenControllerFunction · 0.85
GetMethod · 0.65
ParseMethod · 0.65

Tested by

no test coverage detected