Skip to content

Commit a5c7938

Browse files
committed
add unit test
1 parent 19b213a commit a5c7938

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

coderd/httpmw/workspaceagent.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ func ExtractWorkspaceAgentAndLatestBuild(opts ExtractWorkspaceAgentAndLatestBuil
115115
TemplateID: row.WorkspaceTable.TemplateID,
116116
VersionID: row.WorkspaceBuild.TemplateVersionID,
117117
}))
118+
if err != nil {
119+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
120+
Message: "Internal error with workspace agent authorization context.",
121+
Detail: err.Error(),
122+
})
123+
return
124+
}
118125

119126
ctx = context.WithValue(ctx, workspaceAgentContextKey{}, row.WorkspaceAgent)
120127
ctx = context.WithValue(ctx, latestBuildContextKey{}, row.WorkspaceBuild)

enterprise/coderd/gitsshkey_test.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package coderd_test
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/google/uuid"
8+
"github.com/stretchr/testify/require"
9+
10+
"github.com/coder/coder/v2/coderd/coderdtest"
11+
"github.com/coder/coder/v2/coderd/rbac"
12+
"github.com/coder/coder/v2/codersdk"
13+
"github.com/coder/coder/v2/codersdk/agentsdk"
14+
"github.com/coder/coder/v2/enterprise/coderd/coderdenttest"
15+
"github.com/coder/coder/v2/enterprise/coderd/license"
16+
"github.com/coder/coder/v2/provisioner/echo"
17+
"github.com/coder/coder/v2/testutil"
18+
)
19+
20+
// TestAgentGitSSHKeyCustomRoles tests that the agent can fetch its git ssh key when
21+
// the user has a custom role in a second workspace.
22+
func TestAgentGitSSHKeyCustomRoles(t *testing.T) {
23+
t.Parallel()
24+
25+
owner, _ := coderdenttest.New(t, &coderdenttest.Options{
26+
Options: &coderdtest.Options{
27+
IncludeProvisionerDaemon: true,
28+
},
29+
LicenseOptions: &coderdenttest.LicenseOptions{
30+
Features: license.Features{
31+
codersdk.FeatureCustomRoles: 1,
32+
codersdk.FeatureMultipleOrganizations: 1,
33+
codersdk.FeatureExternalProvisionerDaemons: 1,
34+
},
35+
},
36+
})
37+
38+
// When custom roles exist in a second organization
39+
org := coderdenttest.CreateOrganization(t, owner, coderdenttest.CreateOrganizationOptions{
40+
IncludeProvisionerDaemon: true,
41+
})
42+
43+
ctx := testutil.Context(t, testutil.WaitShort)
44+
newRole, err := owner.CreateOrganizationRole(ctx, codersdk.Role{
45+
Name: "custom",
46+
OrganizationID: org.ID.String(),
47+
DisplayName: "",
48+
SitePermissions: nil,
49+
OrganizationPermissions: codersdk.CreatePermissions(map[codersdk.RBACResource][]codersdk.RBACAction{
50+
codersdk.ResourceTemplate: {codersdk.ActionRead, codersdk.ActionCreate, codersdk.ActionUpdate},
51+
}),
52+
UserPermissions: nil,
53+
})
54+
require.NoError(t, err)
55+
56+
// Create the new user
57+
client, _ := coderdtest.CreateAnotherUser(t, owner, org.ID, rbac.RoleIdentifier{Name: newRole.Name, OrganizationID: org.ID})
58+
59+
// Create the workspace + agent
60+
authToken := uuid.NewString()
61+
version := coderdtest.CreateTemplateVersion(t, client, org.ID, &echo.Responses{
62+
Parse: echo.ParseComplete,
63+
ProvisionPlan: echo.PlanComplete,
64+
ProvisionApply: echo.ProvisionApplyWithAgent(authToken),
65+
})
66+
project := coderdtest.CreateTemplate(t, client, org.ID, version.ID)
67+
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
68+
workspace := coderdtest.CreateWorkspace(t, client, project.ID)
69+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
70+
71+
agentClient := agentsdk.New(client.URL)
72+
agentClient.SetSessionToken(authToken)
73+
74+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
75+
defer cancel()
76+
77+
agentKey, err := agentClient.GitSSHKey(ctx)
78+
require.NoError(t, err)
79+
require.NotEmpty(t, agentKey.PrivateKey)
80+
}

0 commit comments

Comments
 (0)