Skip to content

Commit b72b242

Browse files
committed
Add tests for get and delete
1 parent 0cec9b4 commit b72b242

File tree

3 files changed

+111
-7
lines changed

3 files changed

+111
-7
lines changed

coderd/workspaceagentportshare_test.go

Lines changed: 80 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/coder/coder/v2/testutil"
1616
)
1717

18-
func TestWorkspaceAgentPortShare(t *testing.T) {
18+
func TestPostWorkspaceAgentPortShare(t *testing.T) {
1919
t.Parallel()
2020
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
2121
defer cancel()
@@ -36,23 +36,23 @@ func TestWorkspaceAgentPortShare(t *testing.T) {
3636
require.NoError(t, err)
3737

3838
// owner level should fail
39-
err = client.UpdateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
39+
err = client.CreateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
4040
AgentName: agents[0].Name,
4141
Port: 8080,
4242
ShareLevel: codersdk.WorkspaceAgentPortShareLevel("owner"),
4343
})
4444
require.Error(t, err)
4545

4646
// invalid level should fail
47-
err = client.UpdateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
47+
err = client.CreateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
4848
AgentName: agents[0].Name,
4949
Port: 8080,
5050
ShareLevel: codersdk.WorkspaceAgentPortShareLevel("invalid"),
5151
})
5252
require.Error(t, err)
5353

5454
// OK, ignoring template max port share level because we are AGPL
55-
err = client.UpdateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
55+
err = client.CreateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
5656
AgentName: agents[0].Name,
5757
Port: 8080,
5858
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
@@ -67,3 +67,79 @@ func TestWorkspaceAgentPortShare(t *testing.T) {
6767
require.NoError(t, err)
6868
require.EqualValues(t, codersdk.WorkspaceAgentPortShareLevelPublic, ps.ShareLevel)
6969
}
70+
71+
func TestGetWorkspaceAgentPortShares(t *testing.T) {
72+
t.Parallel()
73+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
74+
defer cancel()
75+
76+
ownerClient, db := coderdtest.NewWithDatabase(t, nil)
77+
owner := coderdtest.CreateFirstUser(t, ownerClient)
78+
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
79+
80+
tmpDir := t.TempDir()
81+
r := dbfake.WorkspaceBuild(t, db, database.Workspace{
82+
OrganizationID: owner.OrganizationID,
83+
OwnerID: user.ID,
84+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
85+
agents[0].Directory = tmpDir
86+
return agents
87+
}).Do()
88+
agents, err := db.GetWorkspaceAgentsInLatestBuildByWorkspaceID(dbauthz.As(ctx, coderdtest.AuthzUserSubject(user, owner.OrganizationID)), r.Workspace.ID)
89+
require.NoError(t, err)
90+
91+
err = client.CreateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
92+
AgentName: agents[0].Name,
93+
Port: 8080,
94+
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
95+
})
96+
require.NoError(t, err)
97+
98+
ps, err := client.GetWorkspaceAgentPortShares(ctx, r.Workspace.ID)
99+
require.NoError(t, err)
100+
require.Len(t, ps.Shares, 1)
101+
require.EqualValues(t, agents[0].Name, ps.Shares[0].AgentName)
102+
require.EqualValues(t, 8080, ps.Shares[0].Port)
103+
require.EqualValues(t, codersdk.WorkspaceAgentPortShareLevelPublic, ps.Shares[0].ShareLevel)
104+
}
105+
106+
func TestDeleteWorkspaceAgentPortShare(t *testing.T) {
107+
t.Parallel()
108+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
109+
defer cancel()
110+
111+
ownerClient, db := coderdtest.NewWithDatabase(t, nil)
112+
owner := coderdtest.CreateFirstUser(t, ownerClient)
113+
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
114+
115+
tmpDir := t.TempDir()
116+
r := dbfake.WorkspaceBuild(t, db, database.Workspace{
117+
OrganizationID: owner.OrganizationID,
118+
OwnerID: user.ID,
119+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
120+
agents[0].Directory = tmpDir
121+
return agents
122+
}).Do()
123+
agents, err := db.GetWorkspaceAgentsInLatestBuildByWorkspaceID(dbauthz.As(ctx, coderdtest.AuthzUserSubject(user, owner.OrganizationID)), r.Workspace.ID)
124+
require.NoError(t, err)
125+
126+
err = client.CreateWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
127+
AgentName: agents[0].Name,
128+
Port: 8080,
129+
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
130+
})
131+
require.NoError(t, err)
132+
133+
err = client.DeleteWorkspaceAgentPortShare(ctx, r.Workspace.ID, codersdk.DeleteWorkspaceAgentPortShareRequest{
134+
AgentName: agents[0].Name,
135+
Port: 8080,
136+
})
137+
require.NoError(t, err)
138+
139+
_, err = db.GetWorkspaceAgentPortShare(dbauthz.As(ctx, coderdtest.AuthzUserSubject(user, owner.OrganizationID)), database.GetWorkspaceAgentPortShareParams{
140+
WorkspaceID: r.Workspace.ID,
141+
AgentName: agents[0].Name,
142+
Port: 8080,
143+
})
144+
require.Error(t, err)
145+
}

codersdk/workspaceagentportshare.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package codersdk
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"net/http"
78

@@ -46,7 +47,22 @@ func (l WorkspaceAgentPortShareLevel) ValidPortShareLevel() bool {
4647
l == WorkspaceAgentPortShareLevelPublic
4748
}
4849

49-
func (c *Client) UpdateWorkspaceAgentPortShare(ctx context.Context, workspaceID uuid.UUID, req UpdateWorkspaceAgentPortShareRequest) error {
50+
func (c *Client) GetWorkspaceAgentPortShares(ctx context.Context, workspaceID uuid.UUID) (WorkspaceAgentPortShares, error) {
51+
var shares WorkspaceAgentPortShares
52+
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/port-shares", workspaceID), nil)
53+
if err != nil {
54+
return shares, err
55+
}
56+
defer res.Body.Close()
57+
if res.StatusCode != http.StatusOK {
58+
return shares, ReadBodyAsError(res)
59+
}
60+
61+
var resp WorkspaceAgentPortShares
62+
return resp, json.NewDecoder(res.Body).Decode(&resp)
63+
}
64+
65+
func (c *Client) CreateWorkspaceAgentPortShare(ctx context.Context, workspaceID uuid.UUID, req UpdateWorkspaceAgentPortShareRequest) error {
5066
res, err := c.Request(ctx, http.MethodPost, fmt.Sprintf("/api/v2/workspaces/%s/port-share", workspaceID), req)
5167
if err != nil {
5268
return err
@@ -57,3 +73,15 @@ func (c *Client) UpdateWorkspaceAgentPortShare(ctx context.Context, workspaceID
5773
}
5874
return nil
5975
}
76+
77+
func (c *Client) DeleteWorkspaceAgentPortShare(ctx context.Context, workspaceID uuid.UUID, req DeleteWorkspaceAgentPortShareRequest) error {
78+
res, err := c.Request(ctx, http.MethodDelete, fmt.Sprintf("/api/v2/workspaces/%s/port-share", workspaceID), req)
79+
if err != nil {
80+
return err
81+
}
82+
defer res.Body.Close()
83+
if res.StatusCode != http.StatusOK {
84+
return ReadBodyAsError(res)
85+
}
86+
return nil
87+
}

enterprise/coderd/workspaceportshare_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestWorkspacePortShare(t *testing.T) {
3636
defer cancel()
3737

3838
// try to update port share with template max port share level owner
39-
err := client.UpdateWorkspaceAgentPortShare(ctx, workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
39+
err := client.CreateWorkspaceAgentPortShare(ctx, workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
4040
AgentName: agent.Name,
4141
Port: 8080,
4242
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
@@ -50,7 +50,7 @@ func TestWorkspacePortShare(t *testing.T) {
5050
})
5151

5252
// OK
53-
err = client.UpdateWorkspaceAgentPortShare(ctx, workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
53+
err = client.CreateWorkspaceAgentPortShare(ctx, workspace.ID, codersdk.UpdateWorkspaceAgentPortShareRequest{
5454
AgentName: agent.Name,
5555
Port: 8080,
5656
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,

0 commit comments

Comments
 (0)