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

Function TestOwnedWorkspacesCoordinate

coderd/workspaceagents_test.go:2949–3030  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2947}
2948
2949func TestOwnedWorkspacesCoordinate(t *testing.T) {
2950 t.Parallel()
2951
2952 ctx := testutil.Context(t, testutil.WaitLong)
2953 logger := testutil.Logger(t)
2954 firstClient, _, api := coderdtest.NewWithAPI(t, &coderdtest.Options{
2955 Coordinator: tailnet.NewCoordinator(logger),
2956 })
2957 firstUser := coderdtest.CreateFirstUser(t, firstClient)
2958 member, memberUser := coderdtest.CreateAnotherUser(t, firstClient, firstUser.OrganizationID, rbac.RoleTemplateAdmin())
2959
2960 // Create a workspace with an agent
2961 firstWorkspace := buildWorkspaceWithAgent(t, member, firstUser.OrganizationID, memberUser.ID, api.Database, api.Pubsub)
2962
2963 u, err := member.URL.Parse("/api/v2/tailnet")
2964 require.NoError(t, err)
2965 q := u.Query()
2966 q.Set("version", "2.0")
2967 u.RawQuery = q.Encode()
2968
2969 //nolint:bodyclose // websocket package closes this for you
2970 wsConn, resp, err := websocket.Dial(ctx, u.String(), &websocket.DialOptions{
2971 HTTPHeader: http.Header{
2972 "Coder-Session-Token": []string{member.SessionToken()},
2973 },
2974 })
2975 if err != nil {
2976 if resp != nil && resp.StatusCode != http.StatusSwitchingProtocols {
2977 err = codersdk.ReadBodyAsError(resp)
2978 }
2979 require.NoError(t, err)
2980 }
2981 defer wsConn.Close(websocket.StatusNormalClosure, "done")
2982
2983 rpcClient, err := tailnet.NewDRPCClient(
2984 websocket.NetConn(ctx, wsConn, websocket.MessageBinary),
2985 logger,
2986 )
2987 require.NoError(t, err)
2988
2989 stream, err := rpcClient.WorkspaceUpdates(ctx, &tailnetproto.WorkspaceUpdatesRequest{
2990 WorkspaceOwnerId: tailnet.UUIDToByteSlice(memberUser.ID),
2991 })
2992 require.NoError(t, err)
2993
2994 // First update will contain the existing workspace and agent
2995 update, err := stream.Recv()
2996 require.NoError(t, err)
2997 require.Len(t, update.UpsertedWorkspaces, 1)
2998 require.EqualValues(t, update.UpsertedWorkspaces[0].Id, firstWorkspace.ID)
2999 require.Len(t, update.UpsertedAgents, 1)
3000 require.EqualValues(t, update.UpsertedAgents[0].WorkspaceId, firstWorkspace.ID)
3001 require.Len(t, update.DeletedWorkspaces, 0)
3002 require.Len(t, update.DeletedAgents, 0)
3003
3004 // Build a second workspace
3005 secondWorkspace := buildWorkspaceWithAgent(t, member, firstUser.OrganizationID, memberUser.ID, api.Database, api.Pubsub)
3006

Callers

nothing calls this directly

Calls 15

ContextFunction · 0.92
LoggerFunction · 0.92
NewWithAPIFunction · 0.92
NewCoordinatorFunction · 0.92
CreateFirstUserFunction · 0.92
CreateAnotherUserFunction · 0.92
RoleTemplateAdminFunction · 0.92
ReadBodyAsErrorFunction · 0.92
NewDRPCClientFunction · 0.92
UUIDToByteSliceFunction · 0.92
WorkspaceBuildFunction · 0.92
buildWorkspaceWithAgentFunction · 0.85

Tested by

no test coverage detected