Skip to content

Commit beafecc

Browse files
committed
Merge branch 'main' into 10712-api-health-settings
2 parents a820c1b + 707d0e9 commit beafecc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2040
-775
lines changed

agent/agent_test.go

Lines changed: 102 additions & 272 deletions
Large diffs are not rendered by default.

agent/agentssh/agentssh.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func NewServer(ctx context.Context, logger slog.Logger, prometheusRegistry *prom
142142
},
143143
ReversePortForwardingCallback: func(ctx ssh.Context, bindHost string, bindPort uint32) bool {
144144
// Allow reverse port forwarding all!
145-
s.logger.Debug(ctx, "local port forward",
145+
s.logger.Debug(ctx, "reverse port forward",
146146
slog.F("bind_host", bindHost),
147147
slog.F("bind_port", bindPort))
148148
return true

cli/agent_test.go

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,25 @@ func TestWorkspaceAgent(t *testing.T) {
3131

3232
client, db := coderdtest.NewWithDatabase(t, nil)
3333
user := coderdtest.CreateFirstUser(t, client)
34-
ws, authToken := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
35-
OrganizationID: user.OrganizationID,
36-
OwnerID: user.UserID,
37-
})
34+
r := dbfake.NewWorkspaceBuilder(t, db).
35+
Seed(database.Workspace{
36+
OrganizationID: user.OrganizationID,
37+
OwnerID: user.UserID,
38+
}).
39+
WithAgent().
40+
Do()
3841
logDir := t.TempDir()
3942
inv, _ := clitest.New(t,
4043
"agent",
4144
"--auth", "token",
42-
"--agent-token", authToken,
45+
"--agent-token", r.AgentToken,
4346
"--agent-url", client.URL.String(),
4447
"--log-dir", logDir,
4548
)
4649

4750
clitest.Start(t, inv)
4851

49-
coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
52+
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
5053

5154
require.Eventually(t, func() bool {
5255
info, err := os.Stat(filepath.Join(logDir, "coder-agent.log"))
@@ -65,18 +68,12 @@ func TestWorkspaceAgent(t *testing.T) {
6568
AzureCertificates: certificates,
6669
})
6770
user := coderdtest.CreateFirstUser(t, client)
68-
ws := dbfake.Workspace(t, db, database.Workspace{
71+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
6972
OrganizationID: user.OrganizationID,
7073
OwnerID: user.UserID,
71-
})
72-
dbfake.NewWorkspaceBuildBuilder(t, db, ws).Resource(&proto.Resource{
73-
Name: "somename",
74-
Type: "someinstance",
75-
Agents: []*proto.Agent{{
76-
Auth: &proto.Agent_InstanceId{
77-
InstanceId: instanceID,
78-
},
79-
}},
74+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
75+
agents[0].Auth = &proto.Agent_InstanceId{InstanceId: instanceID}
76+
return agents
8077
}).Do()
8178

8279
inv, _ := clitest.New(t, "agent", "--auth", "azure-instance-identity", "--agent-url", client.URL.String())
@@ -87,8 +84,8 @@ func TestWorkspaceAgent(t *testing.T) {
8784

8885
ctx := inv.Context()
8986
clitest.Start(t, inv)
90-
coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
91-
workspace, err := client.Workspace(ctx, ws.ID)
87+
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
88+
workspace, err := client.Workspace(ctx, r.Workspace.ID)
9289
require.NoError(t, err)
9390
resources := workspace.LatestBuild.Resources
9491
if assert.NotEmpty(t, workspace.LatestBuild.Resources) && assert.NotEmpty(t, resources[0].Agents) {
@@ -108,18 +105,12 @@ func TestWorkspaceAgent(t *testing.T) {
108105
AWSCertificates: certificates,
109106
})
110107
user := coderdtest.CreateFirstUser(t, client)
111-
ws := dbfake.Workspace(t, db, database.Workspace{
108+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
112109
OrganizationID: user.OrganizationID,
113110
OwnerID: user.UserID,
114-
})
115-
dbfake.NewWorkspaceBuildBuilder(t, db, ws).Resource(&proto.Resource{
116-
Name: "somename",
117-
Type: "someinstance",
118-
Agents: []*proto.Agent{{
119-
Auth: &proto.Agent_InstanceId{
120-
InstanceId: instanceID,
121-
},
122-
}},
111+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
112+
agents[0].Auth = &proto.Agent_InstanceId{InstanceId: instanceID}
113+
return agents
123114
}).Do()
124115

125116
inv, _ := clitest.New(t, "agent", "--auth", "aws-instance-identity", "--agent-url", client.URL.String())
@@ -130,8 +121,8 @@ func TestWorkspaceAgent(t *testing.T) {
130121

131122
clitest.Start(t, inv)
132123
ctx := inv.Context()
133-
coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
134-
workspace, err := client.Workspace(ctx, ws.ID)
124+
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
125+
workspace, err := client.Workspace(ctx, r.Workspace.ID)
135126
require.NoError(t, err)
136127
resources := workspace.LatestBuild.Resources
137128
if assert.NotEmpty(t, resources) && assert.NotEmpty(t, resources[0].Agents) {
@@ -152,19 +143,14 @@ func TestWorkspaceAgent(t *testing.T) {
152143
})
153144
owner := coderdtest.CreateFirstUser(t, client)
154145
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
155-
ws := dbfake.Workspace(t, db, database.Workspace{
146+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
156147
OrganizationID: owner.OrganizationID,
157148
OwnerID: memberUser.ID,
158-
})
159-
dbfake.NewWorkspaceBuildBuilder(t, db, ws).Resource(&proto.Resource{
160-
Name: "somename",
161-
Type: "someinstance",
162-
Agents: []*proto.Agent{{
163-
Auth: &proto.Agent_InstanceId{
164-
InstanceId: instanceID,
165-
},
166-
}},
149+
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
150+
agents[0].Auth = &proto.Agent_InstanceId{InstanceId: instanceID}
151+
return agents
167152
}).Do()
153+
168154
inv, cfg := clitest.New(t, "agent", "--auth", "google-instance-identity", "--agent-url", client.URL.String())
169155
clitest.SetupConfig(t, member, cfg)
170156

@@ -176,8 +162,8 @@ func TestWorkspaceAgent(t *testing.T) {
176162
)
177163

178164
ctx := inv.Context()
179-
coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
180-
workspace, err := client.Workspace(ctx, ws.ID)
165+
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
166+
workspace, err := client.Workspace(ctx, r.Workspace.ID)
181167
require.NoError(t, err)
182168
resources := workspace.LatestBuild.Resources
183169
if assert.NotEmpty(t, resources) && assert.NotEmpty(t, resources[0].Agents) {
@@ -209,16 +195,19 @@ func TestWorkspaceAgent(t *testing.T) {
209195

210196
client, db := coderdtest.NewWithDatabase(t, nil)
211197
user := coderdtest.CreateFirstUser(t, client)
212-
ws, authToken := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
213-
OrganizationID: user.OrganizationID,
214-
OwnerID: user.UserID,
215-
})
198+
r := dbfake.NewWorkspaceBuilder(t, db).
199+
Seed(database.Workspace{
200+
OrganizationID: user.OrganizationID,
201+
OwnerID: user.UserID,
202+
}).
203+
WithAgent().
204+
Do()
216205

217206
logDir := t.TempDir()
218207
inv, _ := clitest.New(t,
219208
"agent",
220209
"--auth", "token",
221-
"--agent-token", authToken,
210+
"--agent-token", r.AgentToken,
222211
"--agent-url", client.URL.String(),
223212
"--log-dir", logDir,
224213
)
@@ -227,7 +216,7 @@ func TestWorkspaceAgent(t *testing.T) {
227216

228217
clitest.Start(t, inv)
229218

230-
resources := coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
219+
resources := coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
231220
require.Len(t, resources, 1)
232221
require.Len(t, resources[0].Agents, 1)
233222
require.Len(t, resources[0].Agents[0].Subsystems, 2)

cli/configssh_test.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,15 @@ func TestConfigSSH(t *testing.T) {
7777
})
7878
owner := coderdtest.CreateFirstUser(t, client)
7979
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
80-
ws, authToken := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
81-
OrganizationID: owner.OrganizationID,
82-
OwnerID: memberUser.ID,
83-
})
84-
_ = agenttest.New(t, client.URL, authToken)
85-
resources := coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
80+
r := dbfake.NewWorkspaceBuilder(t, db).
81+
Seed(database.Workspace{
82+
OrganizationID: owner.OrganizationID,
83+
OwnerID: memberUser.ID,
84+
}).
85+
WithAgent().
86+
Do()
87+
_ = agenttest.New(t, client.URL, r.AgentToken)
88+
resources := coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
8689
agentConn, err := client.DialWorkspaceAgent(context.Background(), resources[0].Agents[0].ID, nil)
8790
require.NoError(t, err)
8891
defer agentConn.Close()
@@ -153,7 +156,7 @@ func TestConfigSSH(t *testing.T) {
153156

154157
home := filepath.Dir(filepath.Dir(sshConfigFile))
155158
// #nosec
156-
sshCmd := exec.Command("ssh", "-F", sshConfigFile, hostname+ws.Name, "echo", "test")
159+
sshCmd := exec.Command("ssh", "-F", sshConfigFile, hostname+r.Workspace.Name, "echo", "test")
157160
pty = ptytest.New(t)
158161
// Set HOME because coder config is included from ~/.ssh/coder.
159162
sshCmd.Env = append(sshCmd.Env, fmt.Sprintf("HOME=%s", home))
@@ -572,10 +575,10 @@ func TestConfigSSH_FileWriteAndOptionsFlow(t *testing.T) {
572575
client, db := coderdtest.NewWithDatabase(t, nil)
573576
user := coderdtest.CreateFirstUser(t, client)
574577
if tt.hasAgent {
575-
_, _ = dbfake.WorkspaceWithAgent(t, db, database.Workspace{
578+
_ = dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
576579
OrganizationID: user.OrganizationID,
577580
OwnerID: user.UserID,
578-
})
581+
}).WithAgent().Do()
579582
}
580583

581584
// Prepare ssh config files.
@@ -692,11 +695,11 @@ func TestConfigSSH_Hostnames(t *testing.T) {
692695
owner := coderdtest.CreateFirstUser(t, client)
693696
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
694697

695-
ws := dbfake.Workspace(t, db, database.Workspace{
698+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
696699
OrganizationID: owner.OrganizationID,
697700
OwnerID: memberUser.ID,
698-
})
699-
dbfake.NewWorkspaceBuildBuilder(t, db, ws).Resource(resources...).Do()
701+
}).Do()
702+
dbfake.NewWorkspaceBuildBuilder(t, db, r.Workspace).Resource(resources...).Do()
700703
sshConfigFile := sshConfigFileName(t)
701704

702705
inv, root := clitest.New(t, "config-ssh", "--ssh-config-file", sshConfigFile)
@@ -721,7 +724,7 @@ func TestConfigSSH_Hostnames(t *testing.T) {
721724

722725
var expectedHosts []string
723726
for _, hostnamePattern := range tt.expected {
724-
hostname := strings.ReplaceAll(hostnamePattern, "@", ws.Name)
727+
hostname := strings.ReplaceAll(hostnamePattern, "@", r.Workspace.Name)
725728
expectedHosts = append(expectedHosts, hostname)
726729
}
727730

cli/gitssh_test.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,21 @@ func prepareTestGitSSH(ctx context.Context, t *testing.T) (*agentsdk.Client, str
4848
require.NoError(t, err)
4949

5050
// setup template
51-
ws, agentToken := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
52-
OrganizationID: user.OrganizationID,
53-
OwnerID: user.UserID,
54-
})
51+
r := dbfake.NewWorkspaceBuilder(t, db).
52+
Seed(database.Workspace{
53+
OrganizationID: user.OrganizationID,
54+
OwnerID: user.UserID,
55+
}).
56+
WithAgent().
57+
Do()
5558
// start workspace agent
5659
agentClient := agentsdk.New(client.URL)
57-
agentClient.SetSessionToken(agentToken)
58-
_ = agenttest.New(t, client.URL, agentToken, func(o *agent.Options) {
60+
agentClient.SetSessionToken(r.AgentToken)
61+
_ = agenttest.New(t, client.URL, r.AgentToken, func(o *agent.Options) {
5962
o.Client = agentClient
6063
})
61-
_ = coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
62-
return agentClient, agentToken, pubkey
64+
_ = coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
65+
return agentClient, r.AgentToken, pubkey
6366
}
6467

6568
func serveSSHForGitSSH(t *testing.T, handler func(ssh.Session), pubkeys ...gossh.PublicKey) *net.TCPAddr {

cli/list_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ func TestList(t *testing.T) {
2525
client, db := coderdtest.NewWithDatabase(t, nil)
2626
owner := coderdtest.CreateFirstUser(t, client)
2727
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
28-
ws, _ := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
28+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
2929
OrganizationID: owner.OrganizationID,
3030
OwnerID: memberUser.ID,
31-
})
31+
}).WithAgent().Do()
3232
inv, root := clitest.New(t, "ls")
3333
clitest.SetupConfig(t, member, root)
3434
pty := ptytest.New(t).Attach(inv)
@@ -41,7 +41,7 @@ func TestList(t *testing.T) {
4141
assert.NoError(t, errC)
4242
close(done)
4343
}()
44-
pty.ExpectMatch(ws.Name)
44+
pty.ExpectMatch(r.Workspace.Name)
4545
pty.ExpectMatch("Started")
4646
cancelFunc()
4747
<-done
@@ -52,10 +52,10 @@ func TestList(t *testing.T) {
5252
client, db := coderdtest.NewWithDatabase(t, nil)
5353
owner := coderdtest.CreateFirstUser(t, client)
5454
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
55-
dbfake.WorkspaceWithAgent(t, db, database.Workspace{
55+
dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
5656
OrganizationID: owner.OrganizationID,
5757
OwnerID: memberUser.ID,
58-
})
58+
}).WithAgent().Do()
5959

6060
inv, root := clitest.New(t, "list", "--output=json")
6161
clitest.SetupConfig(t, member, root)

cli/portforward_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,17 +305,17 @@ func runAgent(t *testing.T, client *codersdk.Client, owner uuid.UUID, db databas
305305
require.NoError(t, err, "specified user does not exist")
306306
require.Greater(t, len(user.OrganizationIDs), 0, "user has no organizations")
307307
orgID := user.OrganizationIDs[0]
308-
ws, agentToken := dbfake.WorkspaceWithAgent(t, db, database.Workspace{
308+
r := dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
309309
OrganizationID: orgID,
310310
OwnerID: owner,
311-
})
312-
_ = agenttest.New(t, client.URL, agentToken,
311+
}).WithAgent().Do()
312+
_ = agenttest.New(t, client.URL, r.AgentToken,
313313
func(o *agent.Options) {
314314
o.SSHMaxTimeout = 60 * time.Second
315315
},
316316
)
317-
coderdtest.AwaitWorkspaceAgents(t, client, ws.ID)
318-
return ws
317+
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
318+
return r.Workspace
319319
}
320320

321321
// setupTestListener starts accepting connections and echoing a single packet.

cli/schedule_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,30 @@ func setupTestSchedule(t *testing.T, sched *cron.Schedule) (ownerClient, memberC
3838
memberClient, memberUser := coderdtest.CreateAnotherUserMutators(t, ownerClient, owner.OrganizationID, nil, func(r *codersdk.CreateUserRequest) {
3939
r.Username = "testuser2" // ensure deterministic ordering
4040
})
41-
_, _ = dbfake.WorkspaceWithAgent(t, db, database.Workspace{
41+
_ = dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
4242
Name: "a-owner",
4343
OwnerID: owner.UserID,
4444
OrganizationID: owner.OrganizationID,
4545
AutostartSchedule: sql.NullString{String: sched.String(), Valid: true},
4646
Ttl: sql.NullInt64{Int64: 8 * time.Hour.Nanoseconds(), Valid: true},
47-
})
48-
_, _ = dbfake.WorkspaceWithAgent(t, db, database.Workspace{
47+
}).WithAgent().Do()
48+
_ = dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
4949
Name: "b-owner",
5050
OwnerID: owner.UserID,
5151
OrganizationID: owner.OrganizationID,
5252
AutostartSchedule: sql.NullString{String: sched.String(), Valid: true},
53-
})
54-
_, _ = dbfake.WorkspaceWithAgent(t, db, database.Workspace{
53+
}).WithAgent().Do()
54+
_ = dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
5555
Name: "c-member",
5656
OwnerID: memberUser.ID,
5757
OrganizationID: owner.OrganizationID,
5858
Ttl: sql.NullInt64{Int64: 8 * time.Hour.Nanoseconds(), Valid: true},
59-
})
60-
_, _ = dbfake.WorkspaceWithAgent(t, db, database.Workspace{
59+
}).WithAgent().Do()
60+
_ = dbfake.NewWorkspaceBuilder(t, db).Seed(database.Workspace{
6161
Name: "d-member",
6262
OwnerID: memberUser.ID,
6363
OrganizationID: owner.OrganizationID,
64-
})
64+
}).WithAgent().Do()
6565

6666
// Need this for LatestBuild.Deadline
6767
resp, err := ownerClient.Workspaces(context.Background(), codersdk.WorkspaceFilter{})

0 commit comments

Comments
 (0)