Skip to content

Commit ae93fce

Browse files
committed
add tests for default values
1 parent ce97571 commit ae93fce

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.",
@@ -728,7 +728,7 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
728728
return xerrors.Errorf("fetch workspace template: %w", err)
729729
}
730730

731-
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, time.Duration(template.DefaultTtl))
731+
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, template.DefaultTtl)
732732
if err != nil {
733733
return codersdk.ValidationError{Field: "ttl_ms", Detail: err.Error()}
734734
}
@@ -1070,9 +1070,16 @@ func convertWorkspaceTTLMillis(i sql.NullInt64) *int64 {
10701070
return &millis
10711071
}
10721072

1073-
func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, error) {
1073+
func validWorkspaceTTLMillis(millis *int64, def int64) (sql.NullInt64, error) {
10741074
if ptr.NilOrZero(millis) {
1075-
return sql.NullInt64{}, nil
1075+
if def == 0 {
1076+
return sql.NullInt64{}, nil
1077+
}
1078+
1079+
return sql.NullInt64{
1080+
Int64: def,
1081+
Valid: true,
1082+
}, nil
10761083
}
10771084

10781085
dur := time.Duration(*millis) * time.Millisecond
@@ -1085,11 +1092,6 @@ func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, e
10851092
return sql.NullInt64{}, errTTLMax
10861093
}
10871094

1088-
// template level
1089-
if max > 0 && truncated > max {
1090-
return sql.NullInt64{}, xerrors.Errorf("time until shutdown must be below template maximum %s", max.String())
1091-
}
1092-
10931095
return sql.NullInt64{
10941096
Valid: true,
10951097
Int64: int64(truncated),

coderd/workspaces_test.go

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

304336
func TestWorkspaceByOwnerAndName(t *testing.T) {
@@ -1135,25 +1167,6 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
11351167
ttlMillis: ptr.Ref((24*7*time.Hour + time.Minute).Milliseconds()),
11361168
expectedError: "time until shutdown must be less than 7 days",
11371169
},
1138-
{
1139-
name: "above template maximum ttl",
1140-
ttlMillis: ptr.Ref((12 * time.Hour).Milliseconds()),
1141-
expectedError: "ttl_ms: time until shutdown must be below template maximum 8h0m0s",
1142-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) {
1143-
ctr.DefaultTTLMillis = ptr.Ref((8 * time.Hour).Milliseconds())
1144-
},
1145-
},
1146-
{
1147-
name: "no template maximum ttl",
1148-
ttlMillis: ptr.Ref((7 * 24 * time.Hour).Milliseconds()),
1149-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.DefaultTTLMillis = ptr.Ref(int64(0)) },
1150-
},
1151-
{
1152-
name: "above maximum ttl even with no template max",
1153-
ttlMillis: ptr.Ref((365 * 24 * time.Hour).Milliseconds()),
1154-
expectedError: "ttl_ms: time until shutdown must be less than 7 days",
1155-
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.DefaultTTLMillis = ptr.Ref(int64(0)) },
1156-
},
11571170
}
11581171

11591172
for _, testCase := range testCases {

0 commit comments

Comments
 (0)