Test that an AGPL AccessControlStore properly disables functionality.
(t *testing.T)
| 1095 | // Test that an AGPL AccessControlStore properly disables |
| 1096 | // functionality. |
| 1097 | func TestExecutorRequireActiveVersion(t *testing.T) { |
| 1098 | t.Parallel() |
| 1099 | |
| 1100 | var ( |
| 1101 | sched = mustSchedule(t, "CRON_TZ=UTC 0 * * * *") |
| 1102 | ticker = make(chan time.Time) |
| 1103 | statCh = make(chan autobuild.Stats) |
| 1104 | |
| 1105 | ownerClient, db = coderdtest.NewWithDatabase(t, &coderdtest.Options{ |
| 1106 | AutobuildTicker: ticker, |
| 1107 | IncludeProvisionerDaemon: true, |
| 1108 | AutobuildStats: statCh, |
| 1109 | TemplateScheduleStore: schedule.NewAGPLTemplateScheduleStore(), |
| 1110 | }) |
| 1111 | ) |
| 1112 | // Wait for provisioner to be available |
| 1113 | coderdtest.MustWaitForAnyProvisioner(t, db) |
| 1114 | |
| 1115 | ctx := testutil.Context(t, testutil.WaitShort) |
| 1116 | owner := coderdtest.CreateFirstUser(t, ownerClient) |
| 1117 | me, err := ownerClient.User(ctx, codersdk.Me) |
| 1118 | require.NoError(t, err) |
| 1119 | |
| 1120 | // Create an active and inactive template version. We'll |
| 1121 | // build a regular member's workspace using a non-active |
| 1122 | // template version and assert that the field is not abided |
| 1123 | // since there is no enterprise license. |
| 1124 | activeVersion := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, nil) |
| 1125 | coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, activeVersion.ID) |
| 1126 | template := coderdtest.CreateTemplate(t, ownerClient, owner.OrganizationID, activeVersion.ID) |
| 1127 | |
| 1128 | ctx = testutil.Context(t, testutil.WaitShort) // Reset context after setting up the template. |
| 1129 | |
| 1130 | //nolint We need to set this in the database directly, because the API will return an error |
| 1131 | // letting you know that this feature requires an enterprise license. |
| 1132 | err = db.UpdateTemplateAccessControlByID(dbauthz.As(ctx, coderdtest.AuthzUserSubject(me)), database.UpdateTemplateAccessControlByIDParams{ |
| 1133 | ID: template.ID, |
| 1134 | RequireActiveVersion: true, |
| 1135 | }) |
| 1136 | require.NoError(t, err) |
| 1137 | inactiveVersion := coderdtest.CreateTemplateVersion(t, ownerClient, owner.OrganizationID, nil, func(ctvr *codersdk.CreateTemplateVersionRequest) { |
| 1138 | ctvr.TemplateID = template.ID |
| 1139 | }) |
| 1140 | coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, inactiveVersion.ID) |
| 1141 | memberClient, _ := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID) |
| 1142 | ws := coderdtest.CreateWorkspace(t, memberClient, uuid.Nil, func(cwr *codersdk.CreateWorkspaceRequest) { |
| 1143 | cwr.TemplateVersionID = inactiveVersion.ID |
| 1144 | cwr.AutostartSchedule = ptr.Ref(sched.String()) |
| 1145 | }) |
| 1146 | _ = coderdtest.AwaitWorkspaceBuildJobCompleted(t, ownerClient, ws.LatestBuild.ID) |
| 1147 | ws = coderdtest.MustTransitionWorkspace(t, memberClient, ws.ID, codersdk.WorkspaceTransitionStart, codersdk.WorkspaceTransitionStop, func(req *codersdk.CreateWorkspaceBuildRequest) { |
| 1148 | req.TemplateVersionID = inactiveVersion.ID |
| 1149 | }) |
| 1150 | require.Equal(t, inactiveVersion.ID, ws.LatestBuild.TemplateVersionID) |
| 1151 | |
| 1152 | p, err := coderdtest.GetProvisionerForTags(db, time.Now(), ws.OrganizationID, nil) |
| 1153 | require.NoError(t, err) |
| 1154 |
nothing calls this directly
no test coverage detected