Skip to content

Commit 5398150

Browse files
authored
chore: move workspace apps tests to new package (#7025)
* chore: move workspace apps tests to new package * chore: move reconnecting pty to apptest package
1 parent b2892c3 commit 5398150

File tree

7 files changed

+1609
-1530
lines changed

7 files changed

+1609
-1530
lines changed

coderd/activitybump_test.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ import (
99
"github.com/stretchr/testify/require"
1010

1111
"cdr.dev/slog/sloggers/slogtest"
12+
"github.com/coder/coder/agent"
1213
"github.com/coder/coder/coderd/coderdtest"
1314
"github.com/coder/coder/coderd/database"
1415
"github.com/coder/coder/coderd/schedule"
1516
"github.com/coder/coder/codersdk"
17+
"github.com/coder/coder/codersdk/agentsdk"
18+
"github.com/coder/coder/provisioner/echo"
19+
"github.com/coder/coder/provisionersdk/proto"
1620
"github.com/coder/coder/testutil"
1721
)
1822

@@ -29,7 +33,6 @@ func TestWorkspaceActivityBump(t *testing.T) {
2933
}
3034

3135
client = coderdtest.New(t, &coderdtest.Options{
32-
AppHostname: proxyTestSubdomainRaw,
3336
IncludeProvisionerDaemon: true,
3437
// Agent stats trigger the activity bump, so we want to report
3538
// very frequently in tests.
@@ -47,9 +50,45 @@ func TestWorkspaceActivityBump(t *testing.T) {
4750
user := coderdtest.CreateFirstUser(t, client)
4851

4952
ttlMillis := int64(ttl / time.Millisecond)
50-
workspace = createWorkspaceWithApps(t, client, user.OrganizationID, "", 1234, func(cwr *codersdk.CreateWorkspaceRequest) {
53+
agentToken := uuid.NewString()
54+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
55+
Parse: echo.ParseComplete,
56+
ProvisionPlan: echo.ProvisionComplete,
57+
ProvisionApply: []*proto.Provision_Response{{
58+
Type: &proto.Provision_Response_Complete{
59+
Complete: &proto.Provision_Complete{
60+
Resources: []*proto.Resource{{
61+
Name: "example",
62+
Type: "aws_instance",
63+
Agents: []*proto.Agent{{
64+
Id: uuid.NewString(),
65+
Name: "agent",
66+
Auth: &proto.Agent_Token{
67+
Token: agentToken,
68+
},
69+
}},
70+
}},
71+
},
72+
},
73+
}},
74+
})
75+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
76+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
77+
workspace = coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
5178
cwr.TTLMillis = &ttlMillis
5279
})
80+
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
81+
82+
agentClient := agentsdk.New(client.URL)
83+
agentClient.SetSessionToken(agentToken)
84+
agentCloser := agent.New(agent.Options{
85+
Client: agentClient,
86+
Logger: slogtest.Make(t, nil).Named("agent"),
87+
})
88+
t.Cleanup(func() {
89+
_ = agentCloser.Close()
90+
})
91+
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
5392

5493
// Sanity-check that deadline is near.
5594
workspace, err := client.Workspace(ctx, workspace.ID)

coderd/client_test.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,6 @@ import (
1414
// While running tests in parallel, the web server seems to be overloaded and responds with HTTP 502.
1515
// require.Eventually expects correct HTTP responses.
1616

17-
func doWithRetries(t require.TestingT, client *codersdk.Client, req *http.Request) (*http.Response, error) {
18-
var resp *http.Response
19-
var err error
20-
require.Eventually(t, func() bool {
21-
// nolint // only requests which are not passed upstream have a body closed
22-
resp, err = client.HTTPClient.Do(req)
23-
if resp != nil && resp.StatusCode == http.StatusBadGateway {
24-
if resp.Body != nil {
25-
resp.Body.Close()
26-
}
27-
return false
28-
}
29-
return true
30-
}, testutil.WaitLong, testutil.IntervalFast)
31-
return resp, err
32-
}
33-
3417
func requestWithRetries(ctx context.Context, t require.TestingT, client *codersdk.Client, method, path string, body interface{}, opts ...codersdk.RequestOption) (*http.Response, error) {
3518
var resp *http.Response
3619
var err error

coderd/workspaceagents_test.go

Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package coderd_test
22

33
import (
4-
"bufio"
54
"context"
6-
"encoding/json"
75
"fmt"
86
"net"
97
"net/http"
@@ -446,88 +444,6 @@ func TestWorkspaceAgentTailnet(t *testing.T) {
446444
require.Equal(t, "test", strings.TrimSpace(string(output)))
447445
}
448446

449-
func TestWorkspaceAgentPTY(t *testing.T) {
450-
t.Parallel()
451-
if runtime.GOOS == "windows" {
452-
// This might be our implementation, or ConPTY itself.
453-
// It's difficult to find extensive tests for it, so
454-
// it seems like it could be either.
455-
t.Skip("ConPTY appears to be inconsistent on Windows.")
456-
}
457-
client := coderdtest.New(t, &coderdtest.Options{
458-
IncludeProvisionerDaemon: true,
459-
})
460-
user := coderdtest.CreateFirstUser(t, client)
461-
authToken := uuid.NewString()
462-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
463-
Parse: echo.ParseComplete,
464-
ProvisionPlan: echo.ProvisionComplete,
465-
ProvisionApply: echo.ProvisionApplyWithAgent(authToken),
466-
})
467-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
468-
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
469-
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
470-
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
471-
472-
agentClient := agentsdk.New(client.URL)
473-
agentClient.SetSessionToken(authToken)
474-
agentCloser := agent.New(agent.Options{
475-
Client: agentClient,
476-
Logger: slogtest.Make(t, nil).Named("agent").Leveled(slog.LevelDebug),
477-
})
478-
defer func() {
479-
_ = agentCloser.Close()
480-
}()
481-
resources := coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
482-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
483-
defer cancel()
484-
485-
conn, err := client.WorkspaceAgentReconnectingPTY(ctx, resources[0].Agents[0].ID, uuid.New(), 80, 80, "/bin/bash")
486-
require.NoError(t, err)
487-
defer conn.Close()
488-
489-
// First attempt to resize the TTY.
490-
// The websocket will close if it fails!
491-
data, err := json.Marshal(codersdk.ReconnectingPTYRequest{
492-
Height: 250,
493-
Width: 250,
494-
})
495-
require.NoError(t, err)
496-
_, err = conn.Write(data)
497-
require.NoError(t, err)
498-
bufRead := bufio.NewReader(conn)
499-
500-
// Brief pause to reduce the likelihood that we send keystrokes while
501-
// the shell is simultaneously sending a prompt.
502-
time.Sleep(100 * time.Millisecond)
503-
504-
data, err = json.Marshal(codersdk.ReconnectingPTYRequest{
505-
Data: "echo test\r\n",
506-
})
507-
require.NoError(t, err)
508-
_, err = conn.Write(data)
509-
require.NoError(t, err)
510-
511-
expectLine := func(matcher func(string) bool) {
512-
for {
513-
line, err := bufRead.ReadString('\n')
514-
require.NoError(t, err)
515-
if matcher(line) {
516-
break
517-
}
518-
}
519-
}
520-
matchEchoCommand := func(line string) bool {
521-
return strings.Contains(line, "echo test")
522-
}
523-
matchEchoOutput := func(line string) bool {
524-
return strings.Contains(line, "test") && !strings.Contains(line, "echo")
525-
}
526-
527-
expectLine(matchEchoCommand)
528-
expectLine(matchEchoOutput)
529-
}
530-
531447
func TestWorkspaceAgentListeningPorts(t *testing.T) {
532448
t.Parallel()
533449

0 commit comments

Comments
 (0)