(t *testing.T)
| 354 | } |
| 355 | |
| 356 | func 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) |
nothing calls this directly
no test coverage detected