(t *testing.T)
| 6462 | } |
| 6463 | |
| 6464 | func 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]) |
nothing calls this directly
no test coverage detected