Skip to content

Commit 3b88720

Browse files
tests: refactor
1 parent f99d45d commit 3b88720

File tree

2 files changed

+254
-149
lines changed

2 files changed

+254
-149
lines changed

coderd/schedule/template_test.go

Lines changed: 111 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,56 +18,127 @@ import (
1818
func TestTemplateTTL(t *testing.T) {
1919
t.Parallel()
2020

21-
t.Run("ModifiesWorkspaceTTL", func(t *testing.T) {
22-
t.Parallel()
21+
tests := []struct {
22+
name string
23+
fromTTL time.Duration
24+
toTTL time.Duration
25+
expected sql.NullInt64
26+
}{
27+
{
28+
name: "ModifyTTLDurationDown",
29+
fromTTL: 24 * time.Hour,
30+
toTTL: 1 * time.Hour,
31+
expected: sql.NullInt64{Valid: true, Int64: int64(1 * time.Hour)},
32+
},
33+
{
34+
name: "ModifyTTLDurationUp",
35+
fromTTL: 24 * time.Hour,
36+
toTTL: 36 * time.Hour,
37+
expected: sql.NullInt64{Valid: true, Int64: int64(36 * time.Hour)},
38+
},
39+
{
40+
name: "DisableTTL",
41+
fromTTL: 24 * time.Hour,
42+
toTTL: 0,
43+
expected: sql.NullInt64{},
44+
},
45+
}
2346

24-
var (
25-
db, _ = dbtestutil.NewDB(t)
26-
ctx = testutil.Context(t, testutil.WaitLong)
27-
user = dbgen.User(t, db, database.User{})
28-
file = dbgen.File(t, db, database.File{CreatedBy: user.ID})
29-
templateJob = dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
30-
FileID: file.ID,
31-
InitiatorID: user.ID,
32-
Tags: database.StringMap{"foo": "bar"},
33-
})
34-
defaultTTL = 24 * time.Hour
35-
templateVersion = dbgen.TemplateVersion(t, db, database.TemplateVersion{
36-
CreatedBy: user.ID,
37-
JobID: templateJob.ID,
38-
OrganizationID: templateJob.OrganizationID,
47+
for _, tt := range tests {
48+
tt := tt
49+
50+
t.Run(tt.name, func(t *testing.T) {
51+
t.Parallel()
52+
53+
var (
54+
db, _ = dbtestutil.NewDB(t)
55+
ctx = testutil.Context(t, testutil.WaitLong)
56+
user = dbgen.User(t, db, database.User{})
57+
file = dbgen.File(t, db, database.File{CreatedBy: user.ID})
58+
// Create first template
59+
templateJob = dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
60+
FileID: file.ID,
61+
InitiatorID: user.ID,
62+
Tags: database.StringMap{"foo": "bar"},
63+
})
64+
templateVersion = dbgen.TemplateVersion(t, db, database.TemplateVersion{
65+
CreatedBy: user.ID,
66+
JobID: templateJob.ID,
67+
OrganizationID: templateJob.OrganizationID,
68+
})
69+
template = dbgen.Template(t, db, database.Template{
70+
ActiveVersionID: templateVersion.ID,
71+
CreatedBy: user.ID,
72+
OrganizationID: templateJob.OrganizationID,
73+
})
74+
// Create second template
75+
otherTTL = tt.fromTTL + 6*time.Hour
76+
otherTemplateJob = dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
77+
FileID: file.ID,
78+
InitiatorID: user.ID,
79+
Tags: database.StringMap{"foo": "bar"},
80+
})
81+
otherTemplateVersion = dbgen.TemplateVersion(t, db, database.TemplateVersion{
82+
CreatedBy: user.ID,
83+
JobID: otherTemplateJob.ID,
84+
OrganizationID: otherTemplateJob.OrganizationID,
85+
})
86+
otherTemplate = dbgen.Template(t, db, database.Template{
87+
ActiveVersionID: otherTemplateVersion.ID,
88+
CreatedBy: user.ID,
89+
OrganizationID: otherTemplateJob.OrganizationID,
90+
})
91+
)
92+
93+
templateScheduleStore := schedule.NewAGPLTemplateScheduleStore()
94+
95+
// Set both template's default TTL
96+
template, err := templateScheduleStore.Set(ctx, db, template, schedule.TemplateScheduleOptions{
97+
DefaultTTL: tt.fromTTL,
3998
})
40-
template = dbgen.Template(t, db, database.Template{
41-
ActiveVersionID: templateVersion.ID,
42-
CreatedBy: user.ID,
43-
OrganizationID: templateJob.OrganizationID,
44-
DefaultTTL: int64(defaultTTL),
99+
require.NoError(t, err)
100+
otherTemplate, err = templateScheduleStore.Set(ctx, db, otherTemplate, schedule.TemplateScheduleOptions{
101+
DefaultTTL: otherTTL,
45102
})
46-
workspace = dbgen.Workspace(t, db, database.WorkspaceTable{
103+
require.NoError(t, err)
104+
105+
// We create two workspaces here, one with the template we're modifying, the
106+
// other with a different template. We want to ensure we only modify one
107+
// of the workspaces.
108+
workspace := dbgen.Workspace(t, db, database.WorkspaceTable{
47109
OwnerID: user.ID,
48110
TemplateID: template.ID,
49111
OrganizationID: templateJob.OrganizationID,
50112
LastUsedAt: dbtime.Now(),
51-
Ttl: sql.NullInt64{Valid: true, Int64: int64(defaultTTL)},
113+
Ttl: sql.NullInt64{Valid: true, Int64: int64(tt.fromTTL)},
114+
})
115+
otherWorkspace := dbgen.Workspace(t, db, database.WorkspaceTable{
116+
OwnerID: user.ID,
117+
TemplateID: otherTemplate.ID,
118+
OrganizationID: otherTemplateJob.OrganizationID,
119+
LastUsedAt: dbtime.Now(),
120+
Ttl: sql.NullInt64{Valid: true, Int64: int64(otherTTL)},
52121
})
53-
)
54122

55-
templateScheduleStore := schedule.NewAGPLTemplateScheduleStore()
123+
// Ensure the workspace's start with the correct TTLs
124+
require.Equal(t, sql.NullInt64{Valid: true, Int64: int64(tt.fromTTL)}, workspace.Ttl)
125+
require.Equal(t, sql.NullInt64{Valid: true, Int64: int64(otherTTL)}, otherWorkspace.Ttl)
56126

57-
// We've created a template with a TTL of 24 hours, so we expect our
58-
// workspace to have a TTL of 24 hours.
59-
require.Equal(t, sql.NullInt64{Valid: true, Int64: int64(defaultTTL)}, workspace.Ttl)
127+
// Update _only_ the primary template's TTL
128+
_, err = templateScheduleStore.Set(ctx, db, template, schedule.TemplateScheduleOptions{
129+
DefaultTTL: tt.toTTL,
130+
})
131+
require.NoError(t, err)
60132

61-
// We expect an AGPL template schedule store to always update
62-
// the TTL of existing workspaces.
63-
_, err := templateScheduleStore.Set(ctx, db, template, schedule.TemplateScheduleOptions{
64-
DefaultTTL: 1 * time.Hour,
65-
})
66-
require.NoError(t, err)
133+
// Verify the primary workspace's TTL has been updated.
134+
ws, err := db.GetWorkspaceByID(ctx, workspace.ID)
135+
require.NoError(t, err)
136+
require.Equal(t, tt.expected, ws.Ttl)
67137

68-
// Verify that the workspace's TTL has been updated.
69-
ws, err := db.GetWorkspaceByID(ctx, workspace.ID)
70-
require.NoError(t, err)
71-
require.Equal(t, sql.NullInt64{Valid: true, Int64: int64(1 * time.Hour)}, ws.Ttl)
72-
})
138+
// Verify that the other workspace's TTL has not been touched.
139+
ws, err = db.GetWorkspaceByID(ctx, otherWorkspace.ID)
140+
require.NoError(t, err)
141+
require.Equal(t, sql.NullInt64{Valid: true, Int64: int64(otherTTL)}, ws.Ttl)
142+
})
143+
}
73144
}

0 commit comments

Comments
 (0)