(t *testing.T)
| 592 | } |
| 593 | |
| 594 | func TestStart_FailedStartCleansUp(t *testing.T) { |
| 595 | t.Parallel() |
| 596 | ctx := testutil.Context(t, testutil.WaitLong) |
| 597 | |
| 598 | store, ps := dbtestutil.NewDB(t) |
| 599 | client := coderdtest.New(t, &coderdtest.Options{ |
| 600 | Database: store, |
| 601 | Pubsub: ps, |
| 602 | IncludeProvisionerDaemon: true, |
| 603 | }) |
| 604 | owner := coderdtest.CreateFirstUser(t, client) |
| 605 | memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID) |
| 606 | |
| 607 | version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil) |
| 608 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 609 | template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID) |
| 610 | workspace := coderdtest.CreateWorkspace(t, memberClient, template.ID) |
| 611 | coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 612 | |
| 613 | // Insert a failed start build directly into the database so that |
| 614 | // the workspace's latest build is a failed "start" transition. |
| 615 | dbfake.WorkspaceBuild(t, store, database.WorkspaceTable{ |
| 616 | ID: workspace.ID, |
| 617 | OwnerID: member.ID, |
| 618 | OrganizationID: owner.OrganizationID, |
| 619 | TemplateID: template.ID, |
| 620 | }). |
| 621 | Seed(database.WorkspaceBuild{ |
| 622 | TemplateVersionID: version.ID, |
| 623 | Transition: database.WorkspaceTransitionStart, |
| 624 | BuildNumber: workspace.LatestBuild.BuildNumber + 1, |
| 625 | }). |
| 626 | Failed(). |
| 627 | Do() |
| 628 | |
| 629 | inv, root := clitest.New(t, "start", workspace.Name) |
| 630 | clitest.SetupConfig(t, memberClient, root) |
| 631 | pty := ptytest.New(t).Attach(inv) |
| 632 | doneChan := make(chan struct{}) |
| 633 | go func() { |
| 634 | defer close(doneChan) |
| 635 | err := inv.Run() |
| 636 | assert.NoError(t, err) |
| 637 | }() |
| 638 | |
| 639 | // The CLI should detect the failed start and clean up first. |
| 640 | pty.ExpectMatch("Cleaning up before retrying") |
| 641 | pty.ExpectMatch("workspace has been started") |
| 642 | |
| 643 | _ = testutil.TryReceive(ctx, t, doneChan) |
| 644 | } |
nothing calls this directly
no test coverage detected