From a4ffafd46db389eb5811c0f5ed156c2da7901962 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 4 Feb 2026 08:29:44 -0600 Subject: [PATCH] test: remove provisioner heartbeat from 'AllProvisionersStale' (#21903) Provisioner async heartbeat will mark the 'stale' provisioner as ready closes https://github.com/coder/internal/issues/1288 --- coderd/coderd.go | 8 ++++++++ coderd/workspaces_test.go | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/coderd/coderd.go b/coderd/coderd.go index 414459d0b7..82aa3a983f 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -1996,8 +1996,15 @@ func MemoryProvisionerWithVersionOverride(version string) MemoryProvisionerDaemo } } +func MemoryProvisionerWithHeartbeatOverride(heartbeatFN func(context.Context) error) MemoryProvisionerDaemonOption { + return func(opts *memoryProvisionerDaemonOptions) { + opts.heartbeatFn = heartbeatFN + } +} + type memoryProvisionerDaemonOptions struct { versionOverride string + heartbeatFn func(context.Context) error } // CreateInMemoryProvisionerDaemon is an in-memory connection to a provisionerd. @@ -2087,6 +2094,7 @@ func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, n OIDCConfig: api.OIDCConfig, ExternalAuthConfigs: api.ExternalAuthConfigs, Clock: api.Clock, + HeartbeatFn: options.heartbeatFn, }, api.NotificationsEnqueuer, &api.PrebuildsReconciler, diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index 8f859bb291..ceb7a7409e 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -19,6 +19,7 @@ import ( "cdr.dev/slog/v3" "github.com/coder/coder/v2/agent/agenttest" + "github.com/coder/coder/v2/coderd" "github.com/coder/coder/v2/coderd/audit" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database" @@ -1358,12 +1359,19 @@ func TestPostWorkspacesByOrganization(t *testing.T) { // Given: a coderd instance with a provisioner daemon store, ps, db := dbtestutil.NewDBWithSQLDB(t) - client, closeDaemon := coderdtest.NewWithProvisionerCloser(t, &coderdtest.Options{ + client, _, api := coderdtest.NewWithAPI(t, &coderdtest.Options{ Database: store, Pubsub: ps, - IncludeProvisionerDaemon: true, + IncludeProvisionerDaemon: false, }) - defer closeDaemon.Close() + + // Create a new provisioner with a heartbeater that does nothing. + provisioner := coderdtest.NewTaggedProvisionerDaemon(t, api, "test-provisioner", nil, coderd.MemoryProvisionerWithHeartbeatOverride(func(ctx context.Context) error { + // The default heartbeat updates the `last_seen_at` column in the database. + // By overriding it to do nothing, we can simulate a provisioner that is not sending heartbeats, and is therefore stale. + return nil + })) + defer provisioner.Close() // Given: a user, template, and workspace user := coderdtest.CreateFirstUser(t, client)