(t *testing.T)
| 427 | } |
| 428 | |
| 429 | func TestWatcher_ClosedAfterDial(t *testing.T) { |
| 430 | t.Parallel() |
| 431 | |
| 432 | ctx := testutil.Context(t, testutil.WaitShort) |
| 433 | logger := testutil.Logger(t) |
| 434 | h := newHarness(ctx, t, logger) |
| 435 | |
| 436 | h.db.EXPECT().GetLatestWorkspaceBuildWithStatusByWorkspaceID(gomock.Any(), h.workspace.ID). |
| 437 | Times(1). |
| 438 | Return(database.GetLatestWorkspaceBuildWithStatusByWorkspaceIDRow{ |
| 439 | Transition: database.WorkspaceTransitionStop, |
| 440 | BuildNumber: 1, |
| 441 | JobStatus: database.ProvisionerJobStatusSucceeded, |
| 442 | WorkspaceTable: database.WorkspaceTable{ |
| 443 | ID: h.workspace.ID, |
| 444 | OwnerID: userID, |
| 445 | OrganizationID: orgID, |
| 446 | }, |
| 447 | }, nil) |
| 448 | |
| 449 | dec, err := h.Dial(ctx, "wss://local.test/") |
| 450 | require.NoError(t, err) |
| 451 | events := dec.Chan() |
| 452 | _ = testutil.RequireReceive(ctx, t, events) |
| 453 | |
| 454 | closed := make(chan struct{}) |
| 455 | go func() { |
| 456 | defer close(closed) |
| 457 | h.watcher.Close() |
| 458 | }() |
| 459 | |
| 460 | e := testutil.RequireReceive(ctx, t, events) |
| 461 | require.NotNil(t, e.Error) |
| 462 | require.Equal(t, workspacesdk.WatchErrorServerShutdown, e.Error.Code) |
| 463 | require.True(t, e.Error.Retryable) |
| 464 | |
| 465 | select { |
| 466 | case <-ctx.Done(): |
| 467 | t.Fatal("context timed out") |
| 468 | case _, ok := <-events: |
| 469 | require.False(t, ok, "socket not closed") |
| 470 | } |
| 471 | testutil.TryReceive(ctx, t, closed) |
| 472 | } |
nothing calls this directly
no test coverage detected