Skip to content

Commit 1632eb4

Browse files
committed
fix: Fix broken TestConfigSSH test
1 parent 5bcd038 commit 1632eb4

File tree

1 file changed

+53
-38
lines changed

1 file changed

+53
-38
lines changed

cli/configssh_test.go

Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cli_test
22

33
import (
44
"context"
5+
"fmt"
56
"io"
67
"net"
78
"os"
@@ -26,6 +27,36 @@ import (
2627
"github.com/coder/coder/pty/ptytest"
2728
)
2829

30+
func sshConfigFileNames(t *testing.T) (sshConfig string, coderConfig string) {
31+
t.Helper()
32+
tmpdir := t.TempDir()
33+
dotssh := filepath.Join(tmpdir, ".ssh")
34+
err := os.Mkdir(dotssh, 0o700)
35+
require.NoError(t, err)
36+
n1 := filepath.Join(dotssh, "config")
37+
n2 := filepath.Join(dotssh, "coder")
38+
return n1, n2
39+
}
40+
41+
func sshConfigFileCreate(t *testing.T, name string, data io.Reader) {
42+
t.Helper()
43+
t.Logf("Writing %s", name)
44+
f, err := os.Create(name)
45+
require.NoError(t, err)
46+
n, err := io.Copy(f, data)
47+
t.Logf("Wrote %d", n)
48+
require.NoError(t, err)
49+
err = f.Close()
50+
require.NoError(t, err)
51+
}
52+
53+
func sshConfigFileRead(t *testing.T, name string) string {
54+
t.Helper()
55+
b, err := os.ReadFile(name)
56+
require.NoError(t, err)
57+
return string(b)
58+
}
59+
2960
func TestConfigSSH(t *testing.T) {
3061
t.Parallel()
3162

@@ -78,13 +109,6 @@ func TestConfigSSH(t *testing.T) {
78109
t.Cleanup(func() {
79110
_ = agentCloser.Close()
80111
})
81-
tmpdir := t.TempDir()
82-
tempFile, err := os.CreateTemp(tmpdir, "config")
83-
require.NoError(t, err)
84-
_ = tempFile.Close()
85-
coderTempFile, err := os.CreateTemp(tmpdir, "coder")
86-
require.NoError(t, err)
87-
_ = coderTempFile.Close()
88112
resources := coderdtest.AwaitWorkspaceAgents(t, client, workspace.LatestBuild.ID)
89113
agentConn, err := client.DialWorkspaceAgent(context.Background(), resources[0].Agents[0].ID, nil)
90114
require.NoError(t, err)
@@ -111,61 +135,52 @@ func TestConfigSSH(t *testing.T) {
111135
_ = listener.Close()
112136
})
113137

138+
sshConfigFile, coderConfigFile := sshConfigFileNames(t)
139+
114140
tcpAddr, valid := listener.Addr().(*net.TCPAddr)
115141
require.True(t, valid)
116142
cmd, root := clitest.New(t, "config-ssh",
117143
"--ssh-option", "HostName "+tcpAddr.IP.String(),
118144
"--ssh-option", "Port "+strconv.Itoa(tcpAddr.Port),
119-
"--ssh-config-file", tempFile.Name(),
120-
"--ssh-coder-config-file", coderTempFile.Name(),
145+
"--ssh-config-file", sshConfigFile,
146+
"--test.ssh-coder-config-file", coderConfigFile,
121147
"--skip-proxy-command")
122148
clitest.SetupConfig(t, client, root)
123149
doneChan := make(chan struct{})
124150
pty := ptytest.New(t)
125151
cmd.SetIn(pty.Input())
126-
cmd.SetOut(pty.Output())
152+
cmd.SetOut(io.MultiWriter(pty.Output(), os.Stderr))
127153
go func() {
128154
defer close(doneChan)
129155
err := cmd.Execute()
130156
assert.NoError(t, err)
131157
}()
158+
159+
matches := []struct {
160+
match, write string
161+
}{
162+
{match: "Continue?", write: "yes"},
163+
}
164+
for _, m := range matches {
165+
pty.ExpectMatch(m.match)
166+
pty.WriteLine(m.write)
167+
}
168+
132169
<-doneChan
133170

134-
t.Log(tempFile.Name())
171+
t.Log(coderConfigFile)
172+
t.Log(sshConfigFileRead(t, coderConfigFile))
173+
home := filepath.Dir(filepath.Dir(sshConfigFile))
135174
// #nosec
136-
sshCmd := exec.Command("ssh", "-F", tempFile.Name(), "coder."+workspace.Name, "echo", "test")
175+
sshCmd := exec.Command("ssh", "-F", sshConfigFile, "coder."+workspace.Name, "echo", "test")
176+
// Set HOME because coder config is included from ~/.ssh/coder.
177+
sshCmd.Env = append(sshCmd.Env, fmt.Sprintf("HOME=%s", home))
137178
sshCmd.Stderr = os.Stderr
138179
data, err := sshCmd.Output()
139180
require.NoError(t, err)
140181
require.Equal(t, "test", strings.TrimSpace(string(data)))
141182
}
142183

143-
func sshConfigFileNames(t *testing.T) (sshConfig string, coderConfig string) {
144-
t.Helper()
145-
tmpdir := t.TempDir()
146-
n1 := filepath.Join(tmpdir, "config")
147-
n2 := filepath.Join(tmpdir, "coder")
148-
return n1, n2
149-
}
150-
151-
func sshConfigFileCreate(t *testing.T, name string, data io.Reader) {
152-
t.Helper()
153-
t.Logf("Writing %s", name)
154-
f, err := os.Create(name)
155-
require.NoError(t, err)
156-
n, err := io.Copy(f, data)
157-
t.Logf("Wrote %d", n)
158-
require.NoError(t, err)
159-
err = f.Close()
160-
require.NoError(t, err)
161-
}
162-
163-
func sshConfigFileRead(t *testing.T, name string) string {
164-
b, err := os.ReadFile(name)
165-
require.NoError(t, err)
166-
return string(b)
167-
}
168-
169184
func TestConfigSSH_FileWriteAndOptionsFlow(t *testing.T) {
170185
t.Parallel()
171186

0 commit comments

Comments
 (0)