Skip to content

Commit eda6285

Browse files
committed
add test for agpl template
1 parent 198e3b0 commit eda6285

12 files changed

+70
-45
lines changed

coderd/apidoc/docs.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbgen/dbgen.go

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func Template(t testing.TB, db database.Store, seed database.Template) database.
9090
GroupACL: seed.GroupACL,
9191
DisplayName: takeFirst(seed.DisplayName, namesgenerator.GetRandomName(1)),
9292
AllowUserCancelWorkspaceJobs: seed.AllowUserCancelWorkspaceJobs,
93+
MaxPortSharingLevel: takeFirst(seed.MaxPortSharingLevel, 0),
9394
})
9495
require.NoError(t, err, "insert template")
9596

coderd/templates.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
344344
DisplayName: createTemplate.DisplayName,
345345
Icon: createTemplate.Icon,
346346
AllowUserCancelWorkspaceJobs: allowUserCancelWorkspaceJobs,
347+
MaxPortSharingLevel: 0,
347348
})
348349
if err != nil {
349350
return xerrors.Errorf("insert template: %s", err)
@@ -631,15 +632,15 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
631632
validErrs = append(validErrs, codersdk.ValidationError{Field: "time_til_dormant_autodelete_ms", Detail: "Value must be at least one minute."})
632633
}
633634
maxPortShareLevel := template.MaxPortSharingLevel
634-
if req.MaxPortSharingLevel != nil {
635-
if *req.MaxPortSharingLevel < 0 || *req.MaxPortSharingLevel > 2 {
635+
if req.MaxPortShareLevel != nil {
636+
if *req.MaxPortShareLevel < 0 || *req.MaxPortShareLevel > 2 {
636637
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_port_sharing_level", Detail: "Value must be between 0 and 2."})
637638
}
638639
if !portSharer.CanRestrictSharing() {
639640
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_port_sharing_level", Detail: "Restricting port sharing level is an enterprise feature that is not enabled."})
640641
}
641642

642-
maxPortShareLevel = *req.MaxPortSharingLevel
643+
maxPortShareLevel = *req.MaxPortShareLevel
643644
}
644645

645646
if len(validErrs) > 0 {

coderd/templates_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,31 @@ func TestPatchTemplateMeta(t *testing.T) {
615615
assert.Empty(t, updated.DeprecationMessage)
616616
})
617617

618+
t.Run("AGPL_MaxPortShareLevel", func(t *testing.T) {
619+
t.Parallel()
620+
621+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: false})
622+
user := coderdtest.CreateFirstUser(t, client)
623+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
624+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
625+
require.Equal(t, int32(0), template.MaxPortShareLevel)
626+
// It is unfortunate we need to sleep, but the test can fail if the
627+
// updatedAt is too close together.
628+
time.Sleep(time.Millisecond * 5)
629+
630+
var level int32 = 2
631+
req := codersdk.UpdateTemplateMeta{
632+
MaxPortShareLevel: &level,
633+
}
634+
635+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
636+
defer cancel()
637+
638+
_, err := client.UpdateTemplateMeta(ctx, template.ID, req)
639+
// AGPL cannot change max port sharing level
640+
require.ErrorContains(t, err, "port sharing level is an enterprise feature")
641+
})
642+
618643
t.Run("NoDefaultTTL", func(t *testing.T) {
619644
t.Parallel()
620645

coderd/workspaceportsharing.go renamed to coderd/workspaceportshare.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ import (
1212
)
1313

1414
// @Summary Update port sharing level
15-
// @ID post-workspace-port-sharing-level
15+
// @ID update-workspace-port-sharing-level
1616
// @Security CoderSessionToken
1717
// @Accept json
1818
// @Produce json
1919
// @Tags PortSharing
20-
// @Param request body codersdk.UpdateWorkspaceAgentPortSharingLevelRequest true "Update port sharing level request"
20+
// @Param request body codersdk.UpdateWorkspaceAgentPortShareLevelRequest true "Update port sharing level request"
2121
// @Success 200
2222
// @Router /workspaces/{workspace}/port-sharing [post]
2323
func (api *API) postWorkspacePortShareLevel(rw http.ResponseWriter, r *http.Request) {
2424
ctx := r.Context()
2525
workspace := httpmw.WorkspaceParam(r)
2626
portSharer := *api.PortSharer.Load()
27-
var req codersdk.UpdateWorkspaceAgentPortSharingLevelRequest
27+
var req codersdk.UpdateWorkspaceAgentPortShareLevelRequest
2828
if !httpapi.Read(ctx, rw, r, &req) {
2929
return
3030
}
@@ -75,7 +75,7 @@ func (api *API) postWorkspacePortShareLevel(rw http.ResponseWriter, r *http.Requ
7575
return
7676
}
7777

78-
if req.ShareLevel == int32(codersdk.WorkspaceAgentPortSharingLevelOwner) {
78+
if req.ShareLevel == int32(codersdk.WorkspaceAgentPortShareLevelOwner) {
7979
// If the port is not shared, and the user is trying to set it to owner,
8080
// we don't need to do anything.
8181
rw.WriteHeader(http.StatusOK)
@@ -97,7 +97,7 @@ func (api *API) postWorkspacePortShareLevel(rw http.ResponseWriter, r *http.Requ
9797
return
9898
}
9999

100-
if codersdk.WorkspacePortSharingLevel(psl.ShareLevel) == codersdk.WorkspaceAgentPortSharingLevelOwner {
100+
if codersdk.WorkspacePortShareLevel(psl.ShareLevel) == codersdk.WorkspaceAgentPortShareLevelOwner {
101101
// If the port is shared, and the user is trying to set it to owner,
102102
// we need to remove the existing share record.
103103
err = api.Database.DeleteWorkspaceAgentPortShare(ctx, database.DeleteWorkspaceAgentPortShareParams{

codersdk/templates.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ type Template struct {
6060

6161
// RequireActiveVersion mandates that workspaces are built with the active
6262
// template version.
63-
RequireActiveVersion bool `json:"require_active_version"`
64-
MaxPortShareLevel int `json:"max_port_share_level"`
63+
RequireActiveVersion bool `json:"require_active_version"`
64+
MaxPortShareLevel int32 `json:"max_port_share_level"`
6565
}
6666

6767
// WeekdaysToBitmap converts a list of weekdays to a bitmap in accordance with
@@ -248,7 +248,7 @@ type UpdateTemplateMeta struct {
248248
// and must be explicitly granted to users or groups in the permissions settings
249249
// of the template.
250250
DisableEveryoneGroupAccess bool `json:"disable_everyone_group_access"`
251-
MaxPortSharingLevel *int32 `json:"max_port_sharing_level"`
251+
MaxPortShareLevel *int32 `json:"max_port_share_level"`
252252
}
253253

254254
type TemplateExample struct {

codersdk/workspaceportshare.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package codersdk
2+
3+
const (
4+
WorkspaceAgentPortShareLevelOwner WorkspacePortShareLevel = 0
5+
WorkspaceAgentPortShareLevelAuthenticated WorkspacePortShareLevel = 1
6+
WorkspaceAgentPortShareLevelPublic WorkspacePortShareLevel = 2
7+
)
8+
9+
type (
10+
WorkspacePortShareLevel int
11+
UpdateWorkspaceAgentPortShareLevelRequest struct {
12+
AgentName string `json:"agent_name"`
13+
Port int32 `json:"port"`
14+
ShareLevel int32 `json:"share_level"`
15+
}
16+
)

codersdk/workspaceportsharing.go

-16
This file was deleted.

docs/api/portsharing.md

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/api/schemas.md

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/src/api/typesGenerated.ts

+6-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)