Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite2a0039

Browse files
committed
WIP
1 parentb0c430b commite2a0039

File tree

2 files changed

+97
-87
lines changed

2 files changed

+97
-87
lines changed

‎coderd/templates.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,12 +1162,12 @@ func (api *API) postInvalidateTemplatePrebuilds(rw http.ResponseWriter, r *http.
11621162
apiKey:=httpmw.APIKey(r)
11631163

11641164
// Authorization: user must be able to update the template
1165-
if!api.Authorize(r,policy.ActionUpdate,template.RBACObject()) {
1166-
httpapi.Forbidden(rw)
1165+
if!api.Authorize(r,policy.ActionUpdate,template) {
1166+
httpapi.ResourceNotFound(rw)
11671167
return
11681168
}
11691169

1170-
// Get all workspaces for this template (returns WorkspaceTable without version info)
1170+
// Get all workspaces for this template
11711171
workspaceTables,err:=api.Database.GetWorkspacesByTemplateID(ctx,template.ID)
11721172
iferr!=nil {
11731173
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{

‎coderd/templates_test.go‎

Lines changed: 94 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,116 +2074,126 @@ func TestInvalidateTemplatePrebuilds(t *testing.T) {
20742074
t.Run("OK",func(t*testing.T) {
20752075
t.Parallel()
20762076

2077-
ctx:=testutil.Context(t,testutil.WaitLong)
2078-
owner,db:=coderdtest.NewWithDatabase(t,nil)
2079-
2080-
// Create organization and template with old version
2081-
org:=dbgen.Organization(t,db, database.Organization{})
2082-
oldVersion:=dbgen.TemplateVersion(t,db, database.TemplateVersion{
2083-
OrganizationID:org.ID,
2077+
db,ps:=dbtestutil.NewDB(t)
2078+
ownerClient:=coderdtest.New(t,&coderdtest.Options{
2079+
Database:db,
2080+
Pubsub:ps,
20842081
})
2082+
owner:=coderdtest.CreateFirstUser(t,ownerClient)
2083+
templateAdminClient,templateAdmin:=coderdtest.CreateAnotherUser(t,ownerClient,owner.OrganizationID,rbac.RoleTemplateAdmin())
2084+
2085+
// Given
2086+
orgID:=owner.OrganizationID
20852087
template:=dbgen.Template(t,db, database.Template{
2086-
OrganizationID:org.ID,
2087-
ActiveVersionID:oldVersion.ID,
2088+
OrganizationID:orgID,
2089+
CreatedBy:templateAdmin.ID,
2090+
})
2091+
oldVersionJob:=dbgen.ProvisionerJob(t,db,ps, database.ProvisionerJob{
2092+
CreatedAt:dbtime.Now().Add(-60*time.Second),
2093+
CompletedAt: sql.NullTime{Time:dbtime.Now().Add(-50*time.Second),Valid:true},
2094+
OrganizationID:orgID,
2095+
InitiatorID:templateAdmin.ID,
2096+
Type:database.ProvisionerJobTypeTemplateVersionImport,
2097+
})
2098+
oldVersion:=dbgen.TemplateVersion(t,db, database.TemplateVersion{
2099+
TemplateID: uuid.NullUUID{UUID:template.ID,Valid:true},
2100+
OrganizationID:orgID,
2101+
CreatedBy:templateAdmin.ID,
2102+
JobID:oldVersionJob.ID,
20882103
})
20892104

2090-
//Create prebuild witholdversion (should NOT be invalidated)
2105+
//Prebuild usingoldtemplate version
20912106
oldPrebuild:=dbgen.Workspace(t,db, database.WorkspaceTable{
2092-
OrganizationID:org.ID,
2093-
OwnerID:database.PrebuildsSystemUserID,
2094-
TemplateID:template.ID,
2095-
})
2096-
_=dbgen.WorkspaceBuild(t,db, database.WorkspaceBuild{
2107+
OwnerID:database.PrebuildsSystemUserID,
2108+
TemplateID:template.ID,
2109+
Deleted:false,
2110+
})
2111+
oldPrebuildJob:=dbgen.ProvisionerJob(t,db,ps, database.ProvisionerJob{
2112+
OrganizationID:orgID,
2113+
InitiatorID:database.PrebuildsSystemUserID,
2114+
Provisioner:database.ProvisionerTypeEcho,
2115+
Type:database.ProvisionerJobTypeWorkspaceBuild,
2116+
StartedAt: sql.NullTime{Time:dbtime.Now().Add(-60*time.Second),Valid:true},
2117+
CompletedAt: sql.NullTime{Time:dbtime.Now().Add(-50*time.Second),Valid:true},
2118+
Error: sql.NullString{},
2119+
ErrorCode: sql.NullString{},
2120+
})
2121+
dbgen.WorkspaceBuild(t,db, database.WorkspaceBuild{
20972122
WorkspaceID:oldPrebuild.ID,
20982123
TemplateVersionID:oldVersion.ID,
2124+
JobID:oldPrebuildJob.ID,
2125+
BuildNumber:1,
2126+
Transition:database.WorkspaceTransitionStart,
2127+
InitiatorID:database.PrebuildsSystemUserID,
2128+
Reason:database.BuildReasonInitiator,
20992129
})
21002130

2101-
// Update template to new active version
2131+
// Update active template version
2132+
newVersionJob:=dbgen.ProvisionerJob(t,db,ps, database.ProvisionerJob{
2133+
CreatedAt:dbtime.Now().Add(-60*time.Second),
2134+
CompletedAt: sql.NullTime{Time:dbtime.Now().Add(-50*time.Second),Valid:true},
2135+
OrganizationID:orgID,
2136+
InitiatorID:templateAdmin.ID,
2137+
Type:database.ProvisionerJobTypeTemplateVersionImport,
2138+
})
21022139
newVersion:=dbgen.TemplateVersion(t,db, database.TemplateVersion{
2103-
OrganizationID:org.ID,
21042140
TemplateID: uuid.NullUUID{UUID:template.ID,Valid:true},
2141+
OrganizationID:orgID,
2142+
CreatedBy:templateAdmin.ID,
2143+
JobID:newVersionJob.ID,
21052144
})
2145+
2146+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)
2147+
defercancel()
21062148
err:=db.UpdateTemplateActiveVersionByID(ctx, database.UpdateTemplateActiveVersionByIDParams{
21072149
ID:template.ID,
21082150
ActiveVersionID:newVersion.ID,
21092151
})
21102152
require.NoError(t,err)
2111-
template.ActiveVersionID=newVersion.ID
2112-
2113-
// Create 2 prebuilds with active version (SHOULD be invalidated)
2114-
varactivePrebuilds []database.WorkspaceTable
2115-
fori:=0;i<2;i++ {
2116-
ws:=dbgen.Workspace(t,db, database.WorkspaceTable{
2117-
OrganizationID:org.ID,
2118-
OwnerID:database.PrebuildsSystemUserID,
2119-
TemplateID:template.ID,
2120-
})
2121-
_=dbgen.WorkspaceBuild(t,db, database.WorkspaceBuild{
2122-
WorkspaceID:ws.ID,
2123-
TemplateVersionID:newVersion.ID,
2124-
})
2125-
activePrebuilds=append(activePrebuilds,ws)
2126-
}
21272153

2128-
// Create user workspace with active version (should NOT be touched)
2129-
user:=coderdtest.CreateFirstUser(t,owner)
2130-
userWorkspace:=dbgen.Workspace(t,db, database.WorkspaceTable{
2131-
OrganizationID:org.ID,
2132-
OwnerID:user.UserID,
2133-
TemplateID:template.ID,
2154+
// Prebuild using new template version
2155+
newPrebuild:=dbgen.Workspace(t,db, database.WorkspaceTable{
2156+
OwnerID:database.PrebuildsSystemUserID,
2157+
TemplateID:template.ID,
2158+
Deleted:false,
2159+
})
2160+
2161+
newPrebuildJob:=dbgen.ProvisionerJob(t,db,ps, database.ProvisionerJob{
2162+
OrganizationID:orgID,
2163+
InitiatorID:database.PrebuildsSystemUserID,
2164+
Provisioner:database.ProvisionerTypeEcho,
2165+
Type:database.ProvisionerJobTypeWorkspaceBuild,
2166+
StartedAt: sql.NullTime{Time:dbtime.Now().Add(-60*time.Second),Valid:true},
2167+
CompletedAt: sql.NullTime{Time:dbtime.Now().Add(-50*time.Second),Valid:true},
2168+
Error: sql.NullString{},
2169+
ErrorCode: sql.NullString{},
21342170
})
2135-
_=dbgen.WorkspaceBuild(t,db, database.WorkspaceBuild{
2136-
WorkspaceID:userWorkspace.ID,
2171+
2172+
dbgen.WorkspaceBuild(t,db, database.WorkspaceBuild{
2173+
WorkspaceID:newPrebuild.ID,
21372174
TemplateVersionID:newVersion.ID,
2175+
JobID:newPrebuildJob.ID,
2176+
BuildNumber:1,
2177+
Transition:database.WorkspaceTransitionStart,
2178+
InitiatorID:database.PrebuildsSystemUserID,
2179+
Reason:database.BuildReasonInitiator,
21382180
})
21392181

2182+
// When:
21402183
// Invalidate prebuilds as template admin
2141-
_,client:=coderdtest.CreateAnotherUser(t,owner,org.ID,rbac.RoleTemplateAdmin())
2142-
err=client.InvalidateTemplatePrebuilds(ctx,template.ID)
2184+
err=templateAdminClient.InvalidateTemplatePrebuilds(ctx,template.ID)
21432185
require.NoError(t,err)
21442186

2187+
// Then:
21452188
// Verify old prebuild still exists (different version)
2146-
_,err=db.GetWorkspaceByID(ctx,oldPrebuild.ID)
2147-
require.NoError(t,err,"old version prebuild should not be deleted")
2148-
2149-
// Verify user workspace still exists
2150-
_,err=db.GetWorkspaceByID(ctx,userWorkspace.ID)
2151-
require.NoError(t,err,"user workspace should not be deleted")
2152-
2153-
// Verify active prebuilds have delete builds created
2154-
for_,ws:=rangeactivePrebuilds {
2155-
builds,err:=db.GetWorkspaceBuildsByWorkspaceID(ctx, database.GetWorkspaceBuildsByWorkspaceIDParams{
2156-
WorkspaceID:ws.ID,
2157-
})
2158-
require.NoError(t,err)
2159-
require.NotEmpty(t,builds,"active prebuild should have builds")
2160-
// Note: we can't easily verify the delete build was created without more setup
2161-
}
2189+
p1,err:=ownerClient.Workspace(ctx,oldPrebuild.ID)
2190+
require.NoError(t,err)
2191+
require.Equal(t,codersdk.WorkspaceStatusRunning,p1.LatestBuild.Status)
2192+
// Verify new prebuild is pending deletion (hint: no provisioner job running)
2193+
p2,err:=ownerClient.Workspace(ctx,newPrebuild.ID)
2194+
require.Equal(t,codersdk.WorkspaceStatusPending,p2.LatestBuild.Status)
2195+
require.Equal(t,codersdk.WorkspaceTransitionDelete,p2.LatestBuild.Transition)
21622196
})
21632197

2164-
t.Run("Unauthorized",func(t*testing.T) {
2165-
t.Parallel()
2166-
2167-
ctx:=testutil.Context(t,testutil.WaitLong)
2168-
owner,db:=coderdtest.NewWithDatabase(t,nil)
2169-
2170-
org:=dbgen.Organization(t,db, database.Organization{})
2171-
version:=dbgen.TemplateVersion(t,db, database.TemplateVersion{
2172-
OrganizationID:org.ID,
2173-
})
2174-
template:=dbgen.Template(t,db, database.Template{
2175-
OrganizationID:org.ID,
2176-
ActiveVersionID:version.ID,
2177-
})
2178-
2179-
// Regular user (not admin)
2180-
_,regularUser:=coderdtest.CreateAnotherUser(t,owner,org.ID)
2181-
2182-
err:=regularUser.InvalidateTemplatePrebuilds(ctx,template.ID)
2183-
require.Error(t,err)
2184-
2185-
varapiErr*codersdk.Error
2186-
require.ErrorAs(t,err,&apiErr)
2187-
require.Equal(t,403,apiErr.StatusCode())
2188-
})
2198+
// TODO: Test unauthorized
21892199
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp