Skip to content

Commit 0c0c015

Browse files
committed
chore: add test antagonists to enterprise/prebuild/reconcile tests
1 parent de7d681 commit 0c0c015

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

enterprise/coderd/prebuilds/reconcile_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ func TestPrebuildReconciliation(t *testing.T) {
370370
templateVersionID,
371371
)
372372

373+
setupTestDBPrebuildAntagonists(t, db, pubSub, org)
374+
373375
if !templateVersionActive {
374376
// Create a new template version and mark it as active
375377
// This marks the template version that we care about as inactive
@@ -2116,6 +2118,115 @@ func setupTestDBWorkspaceAgent(t *testing.T, db database.Store, workspaceID uuid
21162118
return agent
21172119
}
21182120

2121+
// setupTestDBAntagonists creates test antagonists that should not influence running prebuild workspace tests.
2122+
// 1. A stopped prebuilt workspace (STOP then START transitions, owned by
2123+
// prebuilds system user).
2124+
// 2. A running regular workspace (not owned by the prebuilds system user).
2125+
func setupTestDBPrebuildAntagonists(t *testing.T, db database.Store, ps pubsub.Pubsub, org database.Organization) {
2126+
t.Helper()
2127+
2128+
templateAdmin := dbgen.User(t, db, database.User{RBACRoles: []string{codersdk.RoleTemplateAdmin}})
2129+
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{
2130+
OrganizationID: org.ID,
2131+
UserID: templateAdmin.ID,
2132+
})
2133+
member := dbgen.User(t, db, database.User{})
2134+
_ = dbgen.OrganizationMember(t, db, database.OrganizationMember{
2135+
OrganizationID: org.ID,
2136+
UserID: member.ID,
2137+
})
2138+
tpl := dbgen.Template(t, db, database.Template{
2139+
OrganizationID: org.ID,
2140+
CreatedBy: templateAdmin.ID,
2141+
})
2142+
tv := dbgen.TemplateVersion(t, db, database.TemplateVersion{
2143+
TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true},
2144+
OrganizationID: org.ID,
2145+
CreatedBy: templateAdmin.ID,
2146+
})
2147+
2148+
// 1) Stopped prebuilt workspace (owned by prebuilds system user)
2149+
stoppedPrebuild := dbgen.Workspace(t, db, database.WorkspaceTable{
2150+
OwnerID: database.PrebuildsSystemUserID,
2151+
TemplateID: tpl.ID,
2152+
Name: "prebuild-antagonist-stopped",
2153+
Deleted: false,
2154+
})
2155+
2156+
// STOP build (build number 2, most recent)
2157+
stoppedJob2 := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{
2158+
OrganizationID: org.ID,
2159+
InitiatorID: database.PrebuildsSystemUserID,
2160+
Provisioner: database.ProvisionerTypeEcho,
2161+
Type: database.ProvisionerJobTypeWorkspaceBuild,
2162+
StartedAt: sql.NullTime{Time: dbtime.Now().Add(-30 * time.Second), Valid: true},
2163+
CompletedAt: sql.NullTime{Time: dbtime.Now().Add(-20 * time.Second), Valid: true},
2164+
Error: sql.NullString{},
2165+
ErrorCode: sql.NullString{},
2166+
})
2167+
dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
2168+
WorkspaceID: stoppedPrebuild.ID,
2169+
TemplateVersionID: tv.ID,
2170+
JobID: stoppedJob2.ID,
2171+
BuildNumber: 2,
2172+
Transition: database.WorkspaceTransitionStop,
2173+
InitiatorID: database.PrebuildsSystemUserID,
2174+
Reason: database.BuildReasonInitiator,
2175+
// Explicitly not using a preset here. This shouldn't normally be possible,
2176+
// but without this the reconciler will try to create a new prebuild for
2177+
// this preset, which will affect the tests.
2178+
TemplateVersionPresetID: uuid.NullUUID{},
2179+
})
2180+
2181+
// START build (build number 1, older)
2182+
stoppedJob1 := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{
2183+
OrganizationID: org.ID,
2184+
InitiatorID: database.PrebuildsSystemUserID,
2185+
Provisioner: database.ProvisionerTypeEcho,
2186+
Type: database.ProvisionerJobTypeWorkspaceBuild,
2187+
StartedAt: sql.NullTime{Time: dbtime.Now().Add(-60 * time.Second), Valid: true},
2188+
CompletedAt: sql.NullTime{Time: dbtime.Now().Add(-50 * time.Second), Valid: true},
2189+
Error: sql.NullString{},
2190+
ErrorCode: sql.NullString{},
2191+
})
2192+
dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
2193+
WorkspaceID: stoppedPrebuild.ID,
2194+
TemplateVersionID: tv.ID,
2195+
JobID: stoppedJob1.ID,
2196+
BuildNumber: 1,
2197+
Transition: database.WorkspaceTransitionStart,
2198+
InitiatorID: database.PrebuildsSystemUserID,
2199+
Reason: database.BuildReasonInitiator,
2200+
})
2201+
2202+
// 2) Running regular workspace (not owned by prebuilds system user)
2203+
regularWorkspace := dbgen.Workspace(t, db, database.WorkspaceTable{
2204+
OwnerID: member.ID,
2205+
TemplateID: tpl.ID,
2206+
Name: "antagonist-regular-workspace",
2207+
Deleted: false,
2208+
})
2209+
regularJob := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
2210+
OrganizationID: org.ID,
2211+
InitiatorID: member.ID,
2212+
Provisioner: database.ProvisionerTypeEcho,
2213+
Type: database.ProvisionerJobTypeWorkspaceBuild,
2214+
StartedAt: sql.NullTime{Time: dbtime.Now().Add(-40 * time.Second), Valid: true},
2215+
CompletedAt: sql.NullTime{Time: dbtime.Now().Add(-30 * time.Second), Valid: true},
2216+
Error: sql.NullString{},
2217+
ErrorCode: sql.NullString{},
2218+
})
2219+
dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
2220+
WorkspaceID: regularWorkspace.ID,
2221+
TemplateVersionID: tv.ID,
2222+
JobID: regularJob.ID,
2223+
BuildNumber: 1,
2224+
Transition: database.WorkspaceTransitionStart,
2225+
InitiatorID: member.ID,
2226+
Reason: database.BuildReasonInitiator,
2227+
})
2228+
}
2229+
21192230
var allTransitions = []database.WorkspaceTransition{
21202231
database.WorkspaceTransitionStart,
21212232
database.WorkspaceTransitionStop,

0 commit comments

Comments
 (0)