Skip to content

Commit e83ff6e

Browse files
committed
Windows copy test
Signed-off-by: Spike Curtis <spike@coder.com>
1 parent 3f21e30 commit e83ff6e

File tree

1 file changed

+49
-8
lines changed

1 file changed

+49
-8
lines changed

pty/start_windows_test.go

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
package pty_test
55

66
import (
7+
"bytes"
8+
"context"
9+
"io"
710
"os/exec"
811
"testing"
12+
"time"
913

14+
"github.com/coder/coder/pty"
1015
"github.com/coder/coder/pty/ptytest"
1116
"github.com/stretchr/testify/assert"
1217
"github.com/stretchr/testify/require"
@@ -22,31 +27,67 @@ func TestStart(t *testing.T) {
2227
t.Parallel()
2328
t.Run("Echo", func(t *testing.T) {
2429
t.Parallel()
25-
pty, ps := ptytest.Start(t, exec.Command("cmd.exe", "/c", "echo", "test"))
26-
pty.ExpectMatch("test")
30+
ptty, ps := ptytest.Start(t, exec.Command("cmd.exe", "/c", "echo", "test"))
31+
ptty.ExpectMatch("test")
2732
err := ps.Wait()
2833
require.NoError(t, err)
29-
err = pty.Close()
34+
err = ptty.Close()
3035
require.NoError(t, err)
3136
})
3237
t.Run("Resize", func(t *testing.T) {
3338
t.Parallel()
34-
pty, _ := ptytest.Start(t, exec.Command("cmd.exe"))
35-
err := pty.Resize(100, 50)
39+
ptty, _ := ptytest.Start(t, exec.Command("cmd.exe"))
40+
err := ptty.Resize(100, 50)
3641
require.NoError(t, err)
37-
err = pty.Close()
42+
err = ptty.Close()
3843
require.NoError(t, err)
3944
})
4045
t.Run("Kill", func(t *testing.T) {
4146
t.Parallel()
42-
pty, ps := ptytest.Start(t, exec.Command("cmd.exe"))
47+
ptty, ps := ptytest.Start(t, exec.Command("cmd.exe"))
4348
err := ps.Kill()
4449
assert.NoError(t, err)
4550
err = ps.Wait()
4651
var exitErr *exec.ExitError
4752
require.True(t, xerrors.As(err, &exitErr))
4853
assert.NotEqual(t, 0, exitErr.ExitCode())
49-
err = pty.Close()
54+
err = ptty.Close()
5055
require.NoError(t, err)
5156
})
5257
}
58+
59+
func Test_Start_copy(t *testing.T) {
60+
t.Parallel()
61+
62+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
63+
defer cancel()
64+
65+
pc, cmd, err := pty.Start(exec.CommandContext(ctx, "cmd.exe", "/c", "echo", "test"))
66+
require.NoError(t, err)
67+
b := &bytes.Buffer{}
68+
readDone := make(chan error)
69+
go func() {
70+
_, err := io.Copy(b, pc.OutputReader())
71+
readDone <- err
72+
}()
73+
74+
select {
75+
case err := <-readDone:
76+
require.NoError(t, err)
77+
case <-ctx.Done():
78+
t.Error("read timed out")
79+
}
80+
assert.Equal(t, "test", b.String())
81+
82+
cmdDone := make(chan error)
83+
go func() {
84+
cmdDone <- cmd.Wait()
85+
}()
86+
87+
select {
88+
case err := <-cmdDone:
89+
require.NoError(t, err)
90+
case <-ctx.Done():
91+
t.Error("cmd.Wait() timed out")
92+
}
93+
}

0 commit comments

Comments
 (0)