(t *testing.T)
| 654 | } |
| 655 | |
| 656 | func TestRunner_Cleanup(t *testing.T) { |
| 657 | t.Parallel() |
| 658 | |
| 659 | ctx := testutil.Context(t, testutil.WaitMedium) |
| 660 | |
| 661 | fakeClient := &fakeClientWithCleanupTracking{ |
| 662 | fakeClient: newFakeClient(t), |
| 663 | deleteWorkspaceCalls: make([]uuid.UUID, 0), |
| 664 | } |
| 665 | fakeClient.initialize(slog.Make(sloghuman.Sink(testutil.NewTestLogWriter(t))).Leveled(slog.LevelDebug)) |
| 666 | |
| 667 | cfg := Config{ |
| 668 | AppSlug: "test-app", |
| 669 | TemplateID: uuid.UUID{5, 6, 7, 8}, |
| 670 | WorkspaceName: "test-workspace", |
| 671 | MetricLabelValues: []string{"test"}, |
| 672 | Metrics: NewMetrics(prometheus.NewRegistry(), "test"), |
| 673 | ReportStatusPeriod: 100 * time.Millisecond, |
| 674 | ReportStatusDuration: 200 * time.Millisecond, |
| 675 | StartReporting: make(chan struct{}), |
| 676 | ConnectedWaitGroup: &sync.WaitGroup{}, |
| 677 | } |
| 678 | |
| 679 | runner := &Runner{ |
| 680 | client: fakeClient, |
| 681 | updater: newFakeAppStatusUpdater(t), |
| 682 | cfg: cfg, |
| 683 | clock: quartz.NewMock(t), |
| 684 | randFloat64: func() float64 { return 0.5 }, // not random in tests |
| 685 | } |
| 686 | |
| 687 | logWriter := testutil.NewTestLogWriter(t) |
| 688 | |
| 689 | // Case 1: No workspace created - Cleanup should do nothing |
| 690 | err := runner.Cleanup(ctx, "test-runner", logWriter) |
| 691 | require.NoError(t, err) |
| 692 | require.Len(t, fakeClient.deleteWorkspaceCalls, 0, "deleteWorkspace should not be called when no workspace was created") |
| 693 | |
| 694 | // Case 2: Workspace created - Cleanup should delete it |
| 695 | runner.workspaceID = uuid.UUID{1, 2, 3, 4} |
| 696 | err = runner.Cleanup(ctx, "test-runner", logWriter) |
| 697 | require.NoError(t, err) |
| 698 | require.Len(t, fakeClient.deleteWorkspaceCalls, 1, "deleteWorkspace should be called once") |
| 699 | require.Equal(t, runner.workspaceID, fakeClient.deleteWorkspaceCalls[0], "deleteWorkspace should be called with correct workspace ID") |
| 700 | |
| 701 | // Case 3: Cleanup with error |
| 702 | fakeClient.deleteError = xerrors.New("delete failed") |
| 703 | runner.workspaceID = uuid.UUID{5, 6, 7, 8} |
| 704 | err = runner.Cleanup(ctx, "test-runner", logWriter) |
| 705 | require.Error(t, err) |
| 706 | require.Contains(t, err.Error(), "delete external workspace") |
| 707 | } |
| 708 | |
| 709 | // fakeClientWithCleanupTracking extends fakeClient to track deleteWorkspace calls |
| 710 | type fakeClientWithCleanupTracking struct { |
nothing calls this directly
no test coverage detected