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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy