Skip to content

Commit 1b89889

Browse files
committed
add tests for default values
1 parent c1e76fe commit 1b89889

File tree

2 files changed

+43
-28
lines changed

2 files changed

+43
-28
lines changed

coderd/workspaces.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
340340
return
341341
}
342342

343-
dbTTL, err := validWorkspaceTTLMillis(createWorkspace.TTLMillis, time.Duration(template.DefaultTtl))
343+
dbTTL, err := validWorkspaceTTLMillis(createWorkspace.TTLMillis, template.DefaultTtl)
344344
if err != nil {
345345
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
346346
Message: "Invalid Workspace Time to Shutdown.",
@@ -726,7 +726,7 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
726726
return xerrors.Errorf("fetch workspace template: %w", err)
727727
}
728728

729-
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, time.Duration(template.DefaultTtl))
729+
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, template.DefaultTtl)
730730
if err != nil {
731731
return codersdk.ValidationError{Field: "ttl_ms", Detail: err.Error()}
732732
}
@@ -1051,9 +1051,16 @@ func convertWorkspaceTTLMillis(i sql.NullInt64) *int64 {
10511051
return &millis
10521052
}
10531053

1054-
func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, error) {
1054+
func validWorkspaceTTLMillis(millis *int64, def int64) (sql.NullInt64, error) {
10551055
if ptr.NilOrZero(millis) {
1056-
return sql.NullInt64{}, nil
1056+
if def == 0 {
1057+
return sql.NullInt64{}, nil
1058+
}
1059+
1060+
return sql.NullInt64{
1061+
Int64: def,
1062+
Valid: true,
1063+
}, nil
10571064
}
10581065

10591066
dur := time.Duration(*millis) * time.Millisecond
@@ -1066,11 +1073,6 @@ func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, e
10661073
return sql.NullInt64{}, errTTLMax
10671074
}
10681075

1069-
// template level
1070-
if max > 0 && truncated > max {
1071-
return sql.NullInt64{}, xerrors.Errorf("time until shutdown must be below template maximum %s", max.String())
1072-
}
1073-
10741076
return sql.NullInt64{
10751077
Valid: true,
10761078
Int64: int64(truncated),

coderd/workspaces_test.go

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,38 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
295295
require.Equal(t, "time until shutdown must be at least one minute", apiErr.Validations[0].Detail)
296296
})
297297
})
298+
299+
t.Run("TemplateDefaultTTL", func(t *testing.T) {
300+
t.Parallel()
301+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
302+
user := coderdtest.CreateFirstUser(t, client)
303+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
304+
exp := 24 * time.Hour.Milliseconds()
305+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
306+
ctr.DefaultTTLMillis = &exp
307+
})
308+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
309+
310+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
311+
defer cancel()
312+
313+
// no TTL provided should use template default
314+
req := codersdk.CreateWorkspaceRequest{
315+
TemplateID: template.ID,
316+
Name: "testing",
317+
}
318+
ws, err := client.CreateWorkspace(ctx, template.OrganizationID, codersdk.Me, req)
319+
require.NoError(t, err)
320+
require.EqualValues(t, exp, *ws.TTLMillis)
321+
322+
// TTL provided should override template default
323+
req.Name = "testing2"
324+
exp = 1 * time.Hour.Milliseconds()
325+
req.TTLMillis = &exp
326+
ws, err = client.CreateWorkspace(ctx, template.OrganizationID, codersdk.Me, req)
327+
require.NoError(t, err)
328+
require.EqualValues(t, exp, *ws.TTLMillis)
329+
})
298330
}
299331

300332
func TestWorkspaceByOwnerAndName(t *testing.T) {
@@ -1131,25 +1163,6 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
11311163
ttlMillis: ptr.Ref((24*7*time.Hour + time.Minute).Milliseconds()),
11321164
expectedError: "time until shutdown must be less than 7 days",
11331165
},
1134-
{
1135-
name: "above template maximum ttl",
1136-
ttlMillis: ptr.Ref((12 * time.Hour).Milliseconds()),
1137-
expectedError: "ttl_ms: time until shutdown must be below template maximum 8h0m0s",
1138-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) {
1139-
ctr.DefaultTTLMillis = ptr.Ref((8 * time.Hour).Milliseconds())
1140-
},
1141-
},
1142-
{
1143-
name: "no template maximum ttl",
1144-
ttlMillis: ptr.Ref((7 * 24 * time.Hour).Milliseconds()),
1145-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.DefaultTTLMillis = ptr.Ref(int64(0)) },
1146-
},
1147-
{
1148-
name: "above maximum ttl even with no template max",
1149-
ttlMillis: ptr.Ref((365 * 24 * time.Hour).Milliseconds()),
1150-
expectedError: "ttl_ms: time until shutdown must be less than 7 days",
1151-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.DefaultTTLMillis = ptr.Ref(int64(0)) },
1152-
},
11531166
}
11541167

11551168
for _, testCase := range testCases {

0 commit comments

Comments
 (0)