Skip to content

Commit a167364

Browse files
committed
add tests for default values
1 parent 7b54fc7 commit a167364

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
@@ -341,7 +341,7 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req
341341
return
342342
}
343343

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

732-
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, time.Duration(template.DefaultTtl))
732+
dbTTL, err = validWorkspaceTTLMillis(req.TTLMillis, template.DefaultTtl)
733733
if err != nil {
734734
return codersdk.ValidationError{Field: "ttl_ms", Detail: err.Error()}
735735
}
@@ -1087,9 +1087,16 @@ func convertWorkspaceTTLMillis(i sql.NullInt64) *int64 {
10871087
return &millis
10881088
}
10891089

1090-
func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, error) {
1090+
func validWorkspaceTTLMillis(millis *int64, def int64) (sql.NullInt64, error) {
10911091
if ptr.NilOrZero(millis) {
1092-
return sql.NullInt64{}, nil
1092+
if def == 0 {
1093+
return sql.NullInt64{}, nil
1094+
}
1095+
1096+
return sql.NullInt64{
1097+
Int64: def,
1098+
Valid: true,
1099+
}, nil
10931100
}
10941101

10951102
dur := time.Duration(*millis) * time.Millisecond
@@ -1102,11 +1109,6 @@ func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, e
11021109
return sql.NullInt64{}, errTTLMax
11031110
}
11041111

1105-
// template level
1106-
if max > 0 && truncated > max {
1107-
return sql.NullInt64{}, xerrors.Errorf("time until shutdown must be below template maximum %s", max.String())
1108-
}
1109-
11101112
return sql.NullInt64{
11111113
Valid: true,
11121114
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)