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

Function TestWorkspaceBuildsEnqueuedMetric

coderd/workspaces_test.go:6464–6536  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

6462}
6463
6464func TestWorkspaceBuildsEnqueuedMetric(t *testing.T) {
6465 t.Parallel()
6466
6467 var (
6468 logger = testutil.Logger(t)
6469 reg = prometheus.NewRegistry()
6470 metrics = provisionerdserver.NewMetrics(logger)
6471
6472 sched = mustSchedule(t, "CRON_TZ=UTC 0 * * * *")
6473 tickCh = make(chan time.Time)
6474 statsCh = make(chan autobuild.Stats)
6475 )
6476
6477 err := metrics.Register(reg)
6478 require.NoError(t, err)
6479
6480 wsBuilderMetrics, err := wsbuilder.NewMetrics(reg)
6481 require.NoError(t, err)
6482
6483 client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
6484 IncludeProvisionerDaemon: true,
6485 ProvisionerdServerMetrics: metrics,
6486 WorkspaceBuilderMetrics: wsBuilderMetrics,
6487 AutobuildTicker: tickCh,
6488 AutobuildStats: statsCh,
6489 })
6490 user := coderdtest.CreateFirstUser(t, client)
6491
6492 // Create a template and workspace with autostart schedule.
6493 version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
6494 coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
6495 template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
6496 workspace := coderdtest.CreateWorkspace(t, client, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
6497 cwr.AutostartSchedule = ptr.Ref(sched.String())
6498 })
6499 coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
6500
6501 // Stop the workspace to prepare for autostart.
6502 workspace = coderdtest.MustTransitionWorkspace(t, client, workspace.ID, codersdk.WorkspaceTransitionStart, codersdk.WorkspaceTransitionStop)
6503
6504 // Trigger an autostart build via the autobuild ticker. This verifies that
6505 // autostart builds are recorded with build_reason="autostart".
6506 p, err := coderdtest.GetProvisionerForTags(db, time.Now(), workspace.OrganizationID, map[string]string{})
6507 require.NoError(t, err)
6508
6509 go func() {
6510 tickTime := sched.Next(workspace.LatestBuild.CreatedAt)
6511 coderdtest.UpdateProvisionerLastSeenAt(t, db, p.ID, tickTime)
6512 tickCh <- tickTime
6513 close(tickCh)
6514 }()
6515
6516 // Wait for the autostart to complete.
6517 stats := <-statsCh
6518 require.Len(t, stats.Errors, 0)
6519 require.Len(t, stats.Transitions, 1)
6520 require.Contains(t, stats.Transitions, workspace.ID)
6521 require.Equal(t, database.WorkspaceTransitionStart, stats.Transitions[workspace.ID])

Callers

nothing calls this directly

Calls 15

LoggerFunction · 0.92
NewMetricsFunction · 0.92
NewMetricsFunction · 0.92
NewWithDatabaseFunction · 0.92
CreateFirstUserFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateWorkspaceFunction · 0.92
RefFunction · 0.92
MustTransitionWorkspaceFunction · 0.92

Tested by

no test coverage detected