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

Function TestWebsocketDialer_WorkspaceUpdates

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

Source from the content-addressed store, hash-verified

354}
355
356func TestWebsocketDialer_WorkspaceUpdates(t *testing.T) {
357 t.Parallel()
358 ctx := testutil.Context(t, testutil.WaitShort)
359 logger := slogtest.Make(t, &slogtest.Options{
360 IgnoreErrors: true,
361 }).Leveled(slog.LevelDebug)
362
363 fCoord := tailnettest.NewFakeCoordinator()
364 var coord tailnet.Coordinator = fCoord
365 coordPtr := atomic.Pointer[tailnet.Coordinator]{}
366 coordPtr.Store(&coord)
367 ctrl := gomock.NewController(t)
368 mProvider := tailnettest.NewMockWorkspaceUpdatesProvider(ctrl)
369
370 svc, err := tailnet.NewClientService(tailnet.ClientServiceOptions{
371 Logger: logger,
372 CoordPtr: &coordPtr,
373 DERPMapUpdateFrequency: time.Hour,
374 DERPMapFn: func() *tailcfg.DERPMap { return &tailcfg.DERPMap{} },
375 WorkspaceUpdatesProvider: mProvider,
376 })
377 require.NoError(t, err)
378
379 wsErr := make(chan error, 1)
380 svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
381 // need 2.3 for WorkspaceUpdates RPC
382 cVer := r.URL.Query().Get("version")
383 assert.Equal(t, "2.3", cVer)
384
385 sws, err := websocket.Accept(w, r, nil)
386 if !assert.NoError(t, err) {
387 return
388 }
389 wsCtx, nc := codersdk.WebsocketNetConn(ctx, sws, websocket.MessageBinary)
390 // streamID can be empty because we don't call RPCs in this test.
391 wsErr <- svc.ServeConnV2(wsCtx, nc, tailnet.StreamID{})
392 }))
393 defer svr.Close()
394 svrURL, err := url.Parse(svr.URL)
395 require.NoError(t, err)
396
397 userID := uuid.UUID{88}
398
399 mSub := tailnettest.NewMockSubscription(ctrl)
400 updateCh := make(chan *tailnetproto.WorkspaceUpdate, 1)
401 mProvider.EXPECT().Subscribe(gomock.Any(), userID).Times(1).Return(mSub, nil)
402 mSub.EXPECT().Updates().MinTimes(1).Return(updateCh)
403 mSub.EXPECT().Close().Times(1).Return(nil)
404
405 uut := workspacesdk.NewWebsocketDialer(
406 logger, svrURL, &websocket.DialOptions{},
407 workspacesdk.WithWorkspaceUpdates(&tailnetproto.WorkspaceUpdatesRequest{
408 WorkspaceOwnerId: userID[:],
409 }),
410 )
411
412 clients, err := uut.Dial(ctx, nil)
413 require.NoError(t, err)

Callers

nothing calls this directly

Calls 15

ServeConnV2Method · 0.95
CloseMethod · 0.95
EXPECTMethod · 0.95
EXPECTMethod · 0.95
DialMethod · 0.95
ContextFunction · 0.92
NewFakeCoordinatorFunction · 0.92
NewClientServiceFunction · 0.92
WebsocketNetConnFunction · 0.92
NewMockSubscriptionFunction · 0.92
NewWebsocketDialerFunction · 0.92

Tested by

no test coverage detected