(t *testing.T)
| 189 | } |
| 190 | |
| 191 | func TestTunnel_PeerUpdate(t *testing.T) { |
| 192 | t.Parallel() |
| 193 | |
| 194 | ctx := testutil.Context(t, testutil.WaitShort) |
| 195 | |
| 196 | wsID1 := uuid.UUID{1} |
| 197 | wsID2 := uuid.UUID{2} |
| 198 | |
| 199 | client := newFakeClient(ctx, t) |
| 200 | conn := newFakeConn(tailnet.WorkspaceUpdate{ |
| 201 | UpsertedWorkspaces: []*tailnet.Workspace{ |
| 202 | { |
| 203 | ID: wsID1, |
| 204 | }, |
| 205 | { |
| 206 | ID: wsID2, |
| 207 | }, |
| 208 | }, |
| 209 | }, time.Time{}) |
| 210 | |
| 211 | tun, mgr := setupTunnel(t, ctx, client, quartz.NewMock(t)) |
| 212 | |
| 213 | errCh := make(chan error, 1) |
| 214 | var resp *TunnelMessage |
| 215 | go func() { |
| 216 | r, err := mgr.unaryRPC(ctx, &ManagerMessage{ |
| 217 | Msg: &ManagerMessage_Start{ |
| 218 | Start: &StartRequest{ |
| 219 | TunnelFileDescriptor: 2, |
| 220 | CoderUrl: "https://coder.example.com", |
| 221 | ApiToken: "fakeToken", |
| 222 | }, |
| 223 | }, |
| 224 | }) |
| 225 | resp = r |
| 226 | errCh <- err |
| 227 | }() |
| 228 | testutil.RequireSend(ctx, t, client.ch, conn) |
| 229 | err := testutil.TryReceive(ctx, t, errCh) |
| 230 | require.NoError(t, err) |
| 231 | _, ok := resp.Msg.(*TunnelMessage_Start) |
| 232 | require.True(t, ok) |
| 233 | |
| 234 | // When: we inform the tunnel of a WorkspaceUpdate |
| 235 | err = tun.Update(tailnet.WorkspaceUpdate{ |
| 236 | UpsertedWorkspaces: []*tailnet.Workspace{ |
| 237 | { |
| 238 | ID: wsID2, |
| 239 | }, |
| 240 | }, |
| 241 | }) |
| 242 | require.NoError(t, err) |
| 243 | // Then: the tunnel sends a PeerUpdate message |
| 244 | req := testutil.TryReceive(ctx, t, mgr.requests) |
| 245 | require.Nil(t, req.msg.Rpc) |
| 246 | require.NotNil(t, req.msg.GetPeerUpdate()) |
| 247 | require.Len(t, req.msg.GetPeerUpdate().UpsertedWorkspaces, 1) |
| 248 | require.Equal(t, wsID2[:], req.msg.GetPeerUpdate().UpsertedWorkspaces[0].Id) |
nothing calls this directly
no test coverage detected