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

Function TestDetectorHungWorkspaceBuild

coderd/jobreaper/detector_test.go:152–202  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

150}
151
152func TestDetectorHungWorkspaceBuild(t *testing.T) {
153 t.Parallel()
154
155 ctx := testutil.Context(t, testutil.WaitLong)
156 env := newDetectorTestEnv(ctx, t)
157 defer env.close()
158
159 var (
160 now = time.Now()
161 twentyMinAgo = now.Add(-time.Minute * 20)
162 tenMinAgo = now.Add(-time.Minute * 10)
163 sixMinAgo = now.Add(-time.Minute * 6)
164 org = dbgen.Organization(t, env.DB, database.Organization{})
165 user = dbgen.User(t, env.DB, database.User{})
166 expectedWorkspaceBuildState = []byte(`{"dean":"cool","colin":"also cool"}`)
167 )
168
169 // Previous build (completed successfully).
170 previousBuild := dbfake.WorkspaceBuild(t, env.DB, database.WorkspaceTable{
171 OrganizationID: org.ID,
172 OwnerID: user.ID,
173 }).Pubsub(env.Pubsub).Seed(database.WorkspaceBuild{}).
174 ProvisionerState(expectedWorkspaceBuildState).
175 Succeeded(dbfake.WithJobCompletedAt(twentyMinAgo)).
176 Do()
177
178 // Current build (hung - running job with UpdatedAt > 5 min ago).
179 currentBuild := dbfake.WorkspaceBuild(t, env.DB, previousBuild.Workspace).
180 Pubsub(env.Pubsub).
181 Seed(database.WorkspaceBuild{BuildNumber: 2}).
182 Starting(dbfake.WithJobStartedAt(tenMinAgo), dbfake.WithJobUpdatedAt(sixMinAgo)).
183 Do()
184
185 t.Log("previous job ID: ", previousBuild.Build.JobID)
186 t.Log("current job ID: ", currentBuild.Build.JobID)
187
188 stats := env.tick(ctx, now)
189 require.NoError(t, stats.Error)
190 require.Len(t, stats.TerminatedJobIDs, 1)
191 require.Equal(t, currentBuild.Build.JobID, stats.TerminatedJobIDs[0])
192
193 // Check that the current provisioner job was updated.
194 requireTerminatedJob(ctx, t, env.DB, currentBuild.Build.JobID, now, jobreaper.Hung)
195
196 // Check that the provisioner state was copied.
197 build, err := env.DB.GetWorkspaceBuildByID(ctx, currentBuild.Build.ID)
198 require.NoError(t, err)
199 provisionerStateRow, err := env.DB.GetWorkspaceBuildProvisionerStateByID(ctx, build.ID)
200 require.NoError(t, err)
201 require.Equal(t, expectedWorkspaceBuildState, provisionerStateRow.ProvisionerState)
202}
203
204func TestDetectorHungWorkspaceBuildNoOverrideState(t *testing.T) {
205 t.Parallel()

Callers

nothing calls this directly

Calls 15

ContextFunction · 0.92
OrganizationFunction · 0.92
UserFunction · 0.92
WorkspaceBuildFunction · 0.92
WithJobCompletedAtFunction · 0.92
WithJobStartedAtFunction · 0.92
WithJobUpdatedAtFunction · 0.92
newDetectorTestEnvFunction · 0.85
requireTerminatedJobFunction · 0.85
SucceededMethod · 0.80
ProvisionerStateMethod · 0.80
LogMethod · 0.80

Tested by

no test coverage detected