MCPcopy Index your code
hub / github.com/coder/coder / TestWorkspaceAutobuild

Function TestWorkspaceAutobuild

enterprise/coderd/workspaces_test.go:599–1867  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

597}
598
599func 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

Callers

nothing calls this directly

Calls 15

NewWithDatabaseFunction · 0.92
NewNoopEnqueuerFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateWorkspaceFunction · 0.92
GetProvisionerForTagsFunction · 0.92
ContextFunction · 0.92
NewFunction · 0.92

Tested by

no test coverage detected