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)
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