Skip to content

Commit c7307dc

Browse files
committed
refactor: prebuilds tests
1 parent 83aafd8 commit c7307dc

File tree

5 files changed

+93
-154
lines changed

5 files changed

+93
-154
lines changed

cli/delete_test.go

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"testing"
1010
"time"
1111

12+
"github.com/coder/coder/v2/coderd/database/dbfake"
13+
1214
"github.com/google/uuid"
1315

1416
"github.com/coder/coder/v2/coderd/database"
@@ -246,7 +248,7 @@ func TestDelete(t *testing.T) {
246248
// Given a template version with a preset and a template
247249
version := coderdtest.CreateTemplateVersion(t, client, orgID, nil)
248250
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
249-
preset := setupTestDBPreset(t, db, version.ID)
251+
preset := dbfake.NewPreset(t, db, version.ID).WithDesiredInstances(1).Do()
250252
template := coderdtest.CreateTemplate(t, client, orgID, version.ID)
251253

252254
cases := []struct {
@@ -378,30 +380,6 @@ func TestDelete(t *testing.T) {
378380
})
379381
}
380382

381-
func setupTestDBPreset(
382-
t *testing.T,
383-
db database.Store,
384-
templateVersionID uuid.UUID,
385-
) database.TemplateVersionPreset {
386-
t.Helper()
387-
388-
preset := dbgen.Preset(t, db, database.InsertPresetParams{
389-
TemplateVersionID: templateVersionID,
390-
Name: "preset-test",
391-
DesiredInstances: sql.NullInt32{
392-
Valid: true,
393-
Int32: 1,
394-
},
395-
})
396-
dbgen.PresetParameter(t, db, database.InsertPresetParametersParams{
397-
TemplateVersionPresetID: preset.ID,
398-
Names: []string{"test"},
399-
Values: []string{"test"},
400-
})
401-
402-
return preset
403-
}
404-
405383
func setupTestDBWorkspace(
406384
t *testing.T,
407385
clock quartz.Clock,

coderd/autobuild/lifecycle_executor_test.go

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"testing"
88
"time"
99

10+
"github.com/coder/coder/v2/coderd/database/dbfake"
11+
1012
"github.com/coder/coder/v2/coderd/database/dbgen"
1113
"github.com/coder/coder/v2/coderd/database/pubsub"
1214
"github.com/coder/coder/v2/coderd/rbac"
@@ -1231,7 +1233,7 @@ func TestExecutorPrebuilds(t *testing.T) {
12311233
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
12321234

12331235
// Database setup of a preset with a prebuild instance
1234-
preset := setupTestDBPreset(t, db, version.ID, int32(1))
1236+
preset := dbfake.NewPreset(t, db, version.ID).WithDesiredInstances(1).Do()
12351237

12361238
// Given: a running prebuilt workspace with a deadline and ready to be claimed
12371239
dbPrebuild := setupTestDBPrebuiltWorkspace(
@@ -1307,7 +1309,7 @@ func TestExecutorPrebuilds(t *testing.T) {
13071309
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
13081310

13091311
// Database setup of a preset with a prebuild instance
1310-
preset := setupTestDBPreset(t, db, version.ID, int32(1))
1312+
preset := dbfake.NewPreset(t, db, version.ID).WithDesiredInstances(1).Do()
13111313

13121314
// Given: prebuilt workspace is stopped and set to autostart daily at midnight
13131315
sched := mustSchedule(t, "CRON_TZ=UTC 0 0 * * *")
@@ -1384,31 +1386,6 @@ func TestExecutorPrebuilds(t *testing.T) {
13841386
})
13851387
}
13861388

1387-
func setupTestDBPreset(
1388-
t *testing.T,
1389-
db database.Store,
1390-
templateVersionID uuid.UUID,
1391-
desiredInstances int32,
1392-
) database.TemplateVersionPreset {
1393-
t.Helper()
1394-
1395-
preset := dbgen.Preset(t, db, database.InsertPresetParams{
1396-
TemplateVersionID: templateVersionID,
1397-
Name: "preset-test",
1398-
DesiredInstances: sql.NullInt32{
1399-
Valid: true,
1400-
Int32: desiredInstances,
1401-
},
1402-
})
1403-
dbgen.PresetParameter(t, db, database.InsertPresetParametersParams{
1404-
TemplateVersionPresetID: preset.ID,
1405-
Names: []string{"test-name"},
1406-
Values: []string{"test-value"},
1407-
})
1408-
1409-
return preset
1410-
}
1411-
14121389
type SetupPrebuiltOptions struct {
14131390
AutostartSchedule sql.NullString
14141391
IsStopped bool

coderd/database/dbfake/dbfake.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,72 @@ func (b JobCompleteBuilder) Do() JobCompleteResponse {
563563
return r
564564
}
565565

566+
type PresetBuilder struct {
567+
t *testing.T
568+
db database.Store
569+
presetName string
570+
templateVersionID uuid.UUID
571+
desiredInstances int32
572+
// Optional parameters
573+
ttl *int32
574+
}
575+
576+
func NewPreset(t *testing.T, db database.Store, templateVersionID uuid.UUID) PresetBuilder {
577+
return PresetBuilder{
578+
t: t,
579+
db: db,
580+
presetName: uuid.New().String(),
581+
templateVersionID: templateVersionID,
582+
desiredInstances: 0, // Default to 0 prebuild instances
583+
}
584+
}
585+
586+
func (b PresetBuilder) WithPresetName(name string) PresetBuilder {
587+
b.presetName = name
588+
return b
589+
}
590+
591+
func (b PresetBuilder) WithDesiredInstances(instances int32) PresetBuilder {
592+
b.desiredInstances = instances
593+
return b
594+
}
595+
596+
func (b PresetBuilder) WithTTL(ttl int32) PresetBuilder {
597+
b.ttl = &ttl
598+
return b
599+
}
600+
601+
func (b PresetBuilder) Do() database.TemplateVersionPreset {
602+
// Using only required fields for testing; other fields will use DB defaults.
603+
//nolint:exhaustruct
604+
insertPresetParams := database.InsertPresetParams{
605+
TemplateVersionID: b.templateVersionID,
606+
Name: b.presetName,
607+
DesiredInstances: sql.NullInt32{
608+
Valid: true,
609+
Int32: b.desiredInstances,
610+
},
611+
}
612+
613+
// Handle optional TTL
614+
if b.ttl != nil {
615+
insertPresetParams.InvalidateAfterSecs = sql.NullInt32{
616+
Valid: true,
617+
Int32: *b.ttl,
618+
}
619+
}
620+
621+
preset := dbgen.Preset(b.t, b.db, insertPresetParams)
622+
623+
dbgen.PresetParameter(b.t, b.db, database.InsertPresetParametersParams{
624+
TemplateVersionPresetID: preset.ID,
625+
Names: []string{"test-name"},
626+
Values: []string{"test-value"},
627+
})
628+
629+
return preset
630+
}
631+
566632
func must[V any](v V, err error) V {
567633
if err != nil {
568634
panic(err)

enterprise/coderd/prebuilds/metricscollector_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"slices"
66
"testing"
77

8+
"github.com/coder/coder/v2/coderd/database/dbfake"
9+
810
"github.com/google/uuid"
911
"github.com/stretchr/testify/require"
1012
"tailscale.com/types/ptr"
@@ -222,7 +224,7 @@ func TestMetricsCollector(t *testing.T) {
222224
for i := 0; i < numTemplates; i++ {
223225
org, template := setupTestDBTemplate(t, db, ownerID, templateDeleted)
224226
templateVersionID := setupTestDBTemplateVersion(ctx, t, clock, db, pubsub, org.ID, ownerID, template.ID)
225-
preset := setupTestDBPreset(t, db, templateVersionID, 1, uuid.New().String())
227+
preset := dbfake.NewPreset(t, db, templateVersionID).WithDesiredInstances(1).Do()
226228
workspace, _ := setupTestDBWorkspace(
227229
t, clock, db, pubsub,
228230
transition, jobStatus, org.ID, preset, template.ID, templateVersionID, initiatorID, ownerID,
@@ -350,7 +352,7 @@ func TestMetricsCollector_DuplicateTemplateNames(t *testing.T) {
350352
setupTemplateWithDeps := func() database.Template {
351353
template := setupTestDBTemplateWithinOrg(t, db, test.ownerID, false, "default-template", defaultOrg)
352354
templateVersionID := setupTestDBTemplateVersion(ctx, t, clock, db, pubsub, defaultOrg.ID, test.ownerID, template.ID)
353-
preset := setupTestDBPreset(t, db, templateVersionID, 1, "default-preset")
355+
preset := dbfake.NewPreset(t, db, templateVersionID).WithPresetName(presetName).WithDesiredInstances(1).Do()
354356
workspace, _ := setupTestDBWorkspace(
355357
t, clock, db, pubsub,
356358
test.transition, test.jobStatus, defaultOrg.ID, preset, template.ID, templateVersionID, test.initiatorID, test.ownerID,

0 commit comments

Comments
 (0)