(t *testing.T)
| 597 | } |
| 598 | |
| 599 | func TestWorkspaceAutobuild(t *testing.T) { |
| 600 | t.Parallel() |
| 601 | |
| 602 | t.Run("FailureTTLOK", func(t *testing.T) { |
| 603 | t.Parallel() |
| 604 | |
| 605 | var ( |
| 606 | ticker = make(chan time.Time) |
| 607 | statCh = make(chan autobuild.Stats) |
| 608 | logger = slogtest.Make(t, &slogtest.Options{ |
| 609 | // We ignore errors here since we expect to fail |
| 610 | // builds. |
| 611 | IgnoreErrors: true, |
| 612 | }) |
| 613 | failureTTL = time.Minute |
| 614 | ) |
| 615 | |
| 616 | client, db, user := coderdenttest.NewWithDatabase(t, &coderdenttest.Options{ |
| 617 | Options: &coderdtest.Options{ |
| 618 | Logger: &logger, |
| 619 | AutobuildTicker: ticker, |
| 620 | IncludeProvisionerDaemon: true, |
| 621 | AutobuildStats: statCh, |
| 622 | TemplateScheduleStore: schedule.NewEnterpriseTemplateScheduleStore(agplUserQuietHoursScheduleStore(), notifications.NewNoopEnqueuer(), logger, nil), |
| 623 | }, |
| 624 | LicenseOptions: &coderdenttest.LicenseOptions{ |
| 625 | Features: license.Features{codersdk.FeatureAdvancedTemplateScheduling: 1}, |
| 626 | }, |
| 627 | }) |
| 628 | |
| 629 | version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ |
| 630 | Parse: echo.ParseComplete, |
| 631 | ProvisionPlan: echo.PlanComplete, |
| 632 | ProvisionApply: echo.ApplyFailed, |
| 633 | ProvisionInit: echo.InitComplete, |
| 634 | ProvisionGraph: echo.GraphComplete, |
| 635 | }) |
| 636 | template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) { |
| 637 | ctr.FailureTTLMillis = ptr.Ref[int64](failureTTL.Milliseconds()) |
| 638 | }) |
| 639 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 640 | ws := coderdtest.CreateWorkspace(t, client, template.ID) |
| 641 | build := coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID) |
| 642 | require.Equal(t, codersdk.WorkspaceStatusFailed, build.Status) |
| 643 | tickTime := build.Job.CompletedAt.Add(failureTTL * 2) |
| 644 | |
| 645 | p, err := coderdtest.GetProvisionerForTags(db, time.Now(), ws.OrganizationID, nil) |
| 646 | require.NoError(t, err) |
| 647 | coderdtest.UpdateProvisionerLastSeenAt(t, db, p.ID, tickTime) |
| 648 | ticker <- tickTime |
| 649 | stats := <-statCh |
| 650 | // Expect workspace to transition to stopped state for breaching |
| 651 | // failure TTL. |
| 652 | require.Len(t, stats.Transitions, 1) |
| 653 | require.Equal(t, stats.Transitions[ws.ID], database.WorkspaceTransitionStop) |
| 654 | }) |
| 655 | |
| 656 | // FailureTTLStopOK verifies that a workspace whose latest build is a failed |
nothing calls this directly
no test coverage detected