Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Windows copy test
Signed-off-by: Spike Curtis <spike@coder.com>
  • Loading branch information
spikecurtis committed Apr 14, 2023
commit e83ff6ef00143512e20d7f58418e3eb72d6c8c2e
57 changes: 49 additions & 8 deletions pty/start_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@
package pty_test

import (
"bytes"
"context"
"io"
"os/exec"
"testing"
"time"

"github.com/coder/coder/pty"
"github.com/coder/coder/pty/ptytest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
Expand All @@ -22,31 +27,67 @@ func TestStart(t *testing.T) {
t.Parallel()
t.Run("Echo", func(t *testing.T) {
t.Parallel()
pty, ps := ptytest.Start(t, exec.Command("cmd.exe", "/c", "echo", "test"))
pty.ExpectMatch("test")
ptty, ps := ptytest.Start(t, exec.Command("cmd.exe", "/c", "echo", "test"))
ptty.ExpectMatch("test")
err := ps.Wait()
require.NoError(t, err)
err = pty.Close()
err = ptty.Close()
require.NoError(t, err)
})
t.Run("Resize", func(t *testing.T) {
t.Parallel()
pty, _ := ptytest.Start(t, exec.Command("cmd.exe"))
err := pty.Resize(100, 50)
ptty, _ := ptytest.Start(t, exec.Command("cmd.exe"))
err := ptty.Resize(100, 50)
require.NoError(t, err)
err = pty.Close()
err = ptty.Close()
require.NoError(t, err)
})
t.Run("Kill", func(t *testing.T) {
t.Parallel()
pty, ps := ptytest.Start(t, exec.Command("cmd.exe"))
ptty, ps := ptytest.Start(t, exec.Command("cmd.exe"))
err := ps.Kill()
assert.NoError(t, err)
err = ps.Wait()
var exitErr *exec.ExitError
require.True(t, xerrors.As(err, &exitErr))
assert.NotEqual(t, 0, exitErr.ExitCode())
err = pty.Close()
err = ptty.Close()
require.NoError(t, err)
})
}

func Test_Start_copy(t *testing.T) {
t.Parallel()

ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()

pc, cmd, err := pty.Start(exec.CommandContext(ctx, "cmd.exe", "/c", "echo", "test"))
require.NoError(t, err)
b := &bytes.Buffer{}
readDone := make(chan error)
go func() {
_, err := io.Copy(b, pc.OutputReader())
readDone <- err
}()

select {
case err := <-readDone:
require.NoError(t, err)
case <-ctx.Done():
t.Error("read timed out")
}
assert.Equal(t, "test", b.String())

cmdDone := make(chan error)
go func() {
cmdDone <- cmd.Wait()
}()

select {
case err := <-cmdDone:
require.NoError(t, err)
case <-ctx.Done():
t.Error("cmd.Wait() timed out")
}
}