| 368 | } |
| 369 | |
| 370 | func TestDialFailure(t *testing.T) { |
| 371 | t.Parallel() |
| 372 | |
| 373 | // Setup. |
| 374 | ctx := testutil.Context(t, testutil.WaitShort) |
| 375 | logger := testutil.Logger(t) |
| 376 | |
| 377 | // Given: a tailnet coordinator. |
| 378 | coord := tailnet.NewCoordinator(logger) |
| 379 | t.Cleanup(func() { |
| 380 | _ = coord.Close() |
| 381 | }) |
| 382 | coordPtr := atomic.Pointer[tailnet.Coordinator]{} |
| 383 | coordPtr.Store(&coord) |
| 384 | |
| 385 | // Given: a fake DB healthchecker which will always fail. |
| 386 | fch := &failingHealthcheck{} |
| 387 | |
| 388 | // When: dialing the in-memory coordinator. |
| 389 | dialer := &coderd.InmemTailnetDialer{ |
| 390 | CoordPtr: &coordPtr, |
| 391 | Logger: logger, |
| 392 | ClientID: uuid.UUID{5}, |
| 393 | DatabaseHealthCheck: fch, |
| 394 | } |
| 395 | _, err := dialer.Dial(ctx, nil) |
| 396 | |
| 397 | // Then: the error returned reflects the database has failed its healthcheck. |
| 398 | require.ErrorIs(t, err, codersdk.ErrDatabaseNotReachable) |
| 399 | } |
| 400 | |
| 401 | type failingHealthcheck struct{} |
| 402 | |