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