coder/pty/start_windows_test.go

89 lines
2.0 KiB
Go

//go:build windows
// +build windows
package pty_test
import (
"fmt"
"os"
"os/exec"
"testing"
"github.com/coder/coder/v2/pty"
"github.com/coder/coder/v2/pty/ptytest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/goleak"
"golang.org/x/xerrors"
)
func TestMain(m *testing.M) {
goleak.VerifyTestMain(m)
}
func TestStart(t *testing.T) {
t.Parallel()
t.Run("Echo", func(t *testing.T) {
t.Parallel()
ptty, ps := ptytest.Start(t, pty.Command("cmd.exe", "/c", "echo", "test"))
ptty.ExpectMatch("test")
err := ps.Wait()
require.NoError(t, err)
err = ptty.Close()
require.NoError(t, err)
})
t.Run("Resize", func(t *testing.T) {
t.Parallel()
ptty, _ := ptytest.Start(t, pty.Command("cmd.exe"))
err := ptty.Resize(100, 50)
require.NoError(t, err)
err = ptty.Close()
require.NoError(t, err)
})
t.Run("Kill", func(t *testing.T) {
t.Parallel()
ptty, ps := ptytest.Start(t, pty.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 = ptty.Close()
require.NoError(t, err)
})
t.Run("Interrupt", func(t *testing.T) {
t.Parallel()
ptty, ps := ptytest.Start(t, pty.Command("cmd.exe"))
err := ps.Signal(os.Interrupt) // Actually does 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 = ptty.Close()
require.NoError(t, err)
})
}
// these constants/vars are used by Test_Start_copy
const cmdEcho = "cmd.exe"
var argEcho = []string{"/c", "echo", "test"}
// these constants/vars are used by Test_Start_truncate
const (
countEnd = 1000
cmdCount = "cmd.exe"
)
var argCount = []string{"/c", fmt.Sprintf("for /L %%n in (1,1,%d) do @echo %%n", countEnd)}
// these constants/vars are used by Test_Start_cancel_context
const cmdSleep = "cmd.exe"
var argSleep = []string{"/c", "timeout", "/t", "30"}