Skip to content

Commit f758324

Browse files
committed
more tests
1 parent 413463f commit f758324

File tree

6 files changed

+13
-122
lines changed

6 files changed

+13
-122
lines changed

coderd/templates.go

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ import (
2525
"github.com/coder/coder/codersdk"
2626
)
2727

28-
var (
29-
defaultTTL = 24 * 7 * time.Hour
30-
)
31-
3228
// Auto-importable templates. These can be auto-imported after the first user
3329
// has been created.
3430
type AutoImportTemplate string
@@ -210,25 +206,15 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
210206
return
211207
}
212208

213-
maxTTL := defaultTTL
209+
var ttl time.Duration
214210
if createTemplate.DefaultTTLMillis != nil {
215-
maxTTL = time.Duration(*createTemplate.DefaultTTLMillis) * time.Millisecond
211+
ttl = time.Duration(*createTemplate.DefaultTTLMillis) * time.Millisecond
216212
}
217-
if maxTTL < 0 {
213+
if ttl < 0 {
218214
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
219215
Message: "Invalid create template request.",
220216
Validations: []codersdk.ValidationError{
221-
{Field: "max_ttl_ms", Detail: "Must be a positive integer."},
222-
},
223-
})
224-
return
225-
}
226-
227-
if maxTTL > defaultTTL {
228-
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
229-
Message: "Invalid create template request.",
230-
Validations: []codersdk.ValidationError{
231-
{Field: "max_ttl_ms", Detail: "Cannot be greater than " + defaultTTL.String()},
217+
{Field: "default_ttl_ms", Detail: "Must be a positive integer."},
232218
},
233219
})
234220
return
@@ -247,7 +233,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
247233
Provisioner: importJob.Provisioner,
248234
ActiveVersionID: templateVersion.ID,
249235
Description: createTemplate.Description,
250-
DefaultTtl: int64(maxTTL),
236+
DefaultTtl: int64(ttl),
251237
CreatedBy: apiKey.UserID,
252238
UserACL: database.TemplateACL{},
253239
GroupACL: database.TemplateACL{
@@ -459,9 +445,6 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
459445
if req.DefaultTTLMillis < 0 {
460446
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be a positive integer."})
461447
}
462-
if req.DefaultTTLMillis > defaultTTL.Milliseconds() {
463-
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Cannot be greater than " + defaultTTL.String()})
464-
}
465448

466449
if len(validErrs) > 0 {
467450
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
@@ -657,7 +640,7 @@ func (api *API) autoImportTemplate(ctx context.Context, opts autoImportTemplateO
657640
Provisioner: job.Provisioner,
658641
ActiveVersionID: templateVersion.ID,
659642
Description: "This template was auto-imported by Coder.",
660-
DefaultTtl: int64(defaultTTL),
643+
DefaultTtl: 0,
661644
CreatedBy: opts.userID,
662645
UserACL: database.TemplateACL{},
663646
GroupACL: database.TemplateACL{

coderd/templates_test.go

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -138,27 +138,7 @@ func TestPostTemplateByOrganization(t *testing.T) {
138138
var apiErr *codersdk.Error
139139
require.ErrorAs(t, err, &apiErr)
140140
require.Equal(t, http.StatusBadRequest, apiErr.StatusCode())
141-
require.Contains(t, err.Error(), "max_ttl_ms: Must be a positive integer")
142-
})
143-
144-
t.Run("MaxTTLTooHigh", func(t *testing.T) {
145-
t.Parallel()
146-
client := coderdtest.New(t, nil)
147-
user := coderdtest.CreateFirstUser(t, client)
148-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
149-
150-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
151-
defer cancel()
152-
153-
_, err := client.CreateTemplate(ctx, user.OrganizationID, codersdk.CreateTemplateRequest{
154-
Name: "testing",
155-
VersionID: version.ID,
156-
DefaultTTLMillis: ptr.Ref(365 * 24 * time.Hour.Milliseconds()),
157-
})
158-
var apiErr *codersdk.Error
159-
require.ErrorAs(t, err, &apiErr)
160-
require.Equal(t, http.StatusBadRequest, apiErr.StatusCode())
161-
require.Contains(t, err.Error(), "max_ttl_ms: Cannot be greater than")
141+
require.Contains(t, err.Error(), "default_ttl_ms: Must be a positive integer")
162142
})
163143

164144
t.Run("NoMaxTTL", func(t *testing.T) {
@@ -388,33 +368,7 @@ func TestPatchTemplateMeta(t *testing.T) {
388368
defer cancel()
389369

390370
_, err := client.UpdateTemplateMeta(ctx, template.ID, req)
391-
require.ErrorContains(t, err, "max_ttl_ms: Must be a positive integer")
392-
393-
// Ensure no update occurred
394-
updated, err := client.Template(ctx, template.ID)
395-
require.NoError(t, err)
396-
assert.Equal(t, updated.UpdatedAt, template.UpdatedAt)
397-
assert.Equal(t, updated.DefaultTTLMillis, template.DefaultTTLMillis)
398-
})
399-
400-
t.Run("MaxTTLTooHigh", func(t *testing.T) {
401-
t.Parallel()
402-
403-
client := coderdtest.New(t, nil)
404-
user := coderdtest.CreateFirstUser(t, client)
405-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
406-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
407-
ctr.DefaultTTLMillis = ptr.Ref(24 * time.Hour.Milliseconds())
408-
})
409-
req := codersdk.UpdateTemplateMeta{
410-
DefaultTTLMillis: 365 * 24 * time.Hour.Milliseconds(),
411-
}
412-
413-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
414-
defer cancel()
415-
416-
_, err := client.UpdateTemplateMeta(ctx, template.ID, req)
417-
require.ErrorContains(t, err, "max_ttl_ms: Cannot be greater than")
371+
require.ErrorContains(t, err, "default_ttl_ms: Must be a positive integer")
418372

419373
// Ensure no update occurred
420374
updated, err := client.Template(ctx, template.ID)
@@ -478,7 +432,7 @@ func TestPatchTemplateMeta(t *testing.T) {
478432
require.ErrorAs(t, err, &apiErr)
479433
require.Contains(t, apiErr.Message, "Invalid request")
480434
require.Len(t, apiErr.Validations, 1)
481-
assert.Equal(t, apiErr.Validations[0].Field, "max_ttl_ms")
435+
assert.Equal(t, apiErr.Validations[0].Field, "default_ttl_ms")
482436

483437
updated, err := client.Template(ctx, template.ID)
484438
require.NoError(t, err)

coderd/workspaces.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -781,13 +781,6 @@ func (api *API) putExtendWorkspace(rw http.ResponseWriter, r *http.Request) {
781781
resp := codersdk.Response{}
782782

783783
err := api.Database.InTx(func(s database.Store) error {
784-
template, err := s.GetTemplateByID(ctx, workspace.TemplateID)
785-
if err != nil {
786-
code = http.StatusInternalServerError
787-
resp.Message = "Error fetching workspace template!"
788-
return xerrors.Errorf("get workspace template: %w", err)
789-
}
790-
791784
build, err := s.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspace.ID)
792785
if err != nil {
793786
code = http.StatusInternalServerError
@@ -821,7 +814,7 @@ func (api *API) putExtendWorkspace(rw http.ResponseWriter, r *http.Request) {
821814
}
822815

823816
newDeadline := req.Deadline.UTC()
824-
if err := validWorkspaceDeadline(job.CompletedAt.Time, newDeadline, time.Duration(template.DefaultTtl)); err != nil {
817+
if err := validWorkspaceDeadline(job.CompletedAt.Time, newDeadline); err != nil {
825818
// NOTE(Cian): Putting the error in the Message field on request from the FE folks.
826819
// Normally, we would put the validation error in Validations, but this endpoint is
827820
// not tied to a form or specific named user input on the FE.
@@ -1085,7 +1078,7 @@ func validWorkspaceTTLMillis(millis *int64, max time.Duration) (sql.NullInt64, e
10851078
}, nil
10861079
}
10871080

1088-
func validWorkspaceDeadline(startedAt, newDeadline time.Time, max time.Duration) error {
1081+
func validWorkspaceDeadline(startedAt, newDeadline time.Time) error {
10891082
soon := time.Now().Add(29 * time.Minute)
10901083
if newDeadline.Before(soon) {
10911084
return errDeadlineTooSoon
@@ -1096,11 +1089,6 @@ func validWorkspaceDeadline(startedAt, newDeadline time.Time, max time.Duration)
10961089
return errDeadlineBeforeStart
10971090
}
10981091

1099-
delta := newDeadline.Sub(startedAt)
1100-
if delta > max {
1101-
return errDeadlineOverTemplateMax
1102-
}
1103-
11041092
return nil
11051093
}
11061094

coderd/workspaces_test.go

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -294,32 +294,6 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
294294
require.Equal(t, apiErr.Validations[0].Field, "ttl_ms")
295295
require.Equal(t, "time until shutdown must be at least one minute", apiErr.Validations[0].Detail)
296296
})
297-
298-
t.Run("AboveMax", func(t *testing.T) {
299-
t.Parallel()
300-
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
301-
user := coderdtest.CreateFirstUser(t, client)
302-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
303-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
304-
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
305-
306-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
307-
defer cancel()
308-
309-
req := codersdk.CreateWorkspaceRequest{
310-
TemplateID: template.ID,
311-
Name: "testing",
312-
TTLMillis: ptr.Ref(template.DefaultTTLMillis + time.Minute.Milliseconds()),
313-
}
314-
_, err := client.CreateWorkspace(ctx, template.OrganizationID, codersdk.Me, req)
315-
require.Error(t, err)
316-
var apiErr *codersdk.Error
317-
require.ErrorAs(t, err, &apiErr)
318-
require.Equal(t, http.StatusBadRequest, apiErr.StatusCode())
319-
require.Len(t, apiErr.Validations, 1)
320-
require.Equal(t, apiErr.Validations[0].Field, "ttl_ms")
321-
require.Equal(t, "time until shutdown must be less than 7 days", apiErr.Validations[0].Detail)
322-
})
323297
})
324298
}
325299

@@ -1294,14 +1268,6 @@ func TestWorkspaceExtend(t *testing.T) {
12941268
})
12951269
require.ErrorContains(t, err, "unexpected status code 400: Cannot extend workspace: new deadline must be at least 30 minutes in the future", "setting a deadline less than 30 minutes in the future should fail")
12961270

1297-
// And with a deadline greater than the template max_ttl should also fail
1298-
deadlineExceedsMaxTTL := time.Now().Add(time.Duration(template.DefaultTTLMillis) * time.Millisecond).Add(time.Minute)
1299-
err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
1300-
Deadline: deadlineExceedsMaxTTL,
1301-
})
1302-
1303-
require.ErrorContains(t, err, "unexpected status code 400: Cannot extend workspace: new deadline is greater than template allows", "setting a deadline greater than that allowed by the template should fail")
1304-
13051271
// Updating with a deadline 30 minutes in the future should succeed
13061272
deadlineJustSoonEnough := time.Now().Add(30 * time.Minute)
13071273
err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{

enterprise/audit/diff_internal_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ func Test_diff(t *testing.T) {
258258
"name": audit.OldNew{Old: "", New: "rust"},
259259
"provisioner": audit.OldNew{Old: database.ProvisionerType(""), New: database.ProvisionerTypeTerraform},
260260
"active_version_id": audit.OldNew{Old: "", New: uuid.UUID{3}.String()},
261-
"max_ttl": audit.OldNew{Old: int64(0), New: int64(time.Hour)},
261+
"default_ttl": audit.OldNew{Old: int64(0), New: int64(time.Hour)},
262262
"created_by": audit.OldNew{Old: "", New: uuid.UUID{4}.String()},
263263
},
264264
},

enterprise/audit/table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ var AuditableResources = auditMap(map[any]map[string]Action{
5858
"active_version_id": ActionTrack,
5959
"description": ActionTrack,
6060
"icon": ActionTrack,
61-
"max_ttl": ActionTrack,
61+
"default_ttl": ActionTrack,
6262
"min_autostart_interval": ActionTrack,
6363
"created_by": ActionTrack,
6464
"is_private": ActionTrack,

0 commit comments

Comments
 (0)