mirror of
https://github.com/nwtgck/handy-sshd.git
synced 2025-06-08 07:03:04 +00:00
test pty
This commit is contained in:
parent
695d0603b3
commit
3b0b650318
2 changed files with 45 additions and 6 deletions
|
@ -57,10 +57,10 @@ func TestAllPermissionsAllowed(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
defer client.Close()
|
||||
assert.NoError(t, err)
|
||||
assertExec(t, client)
|
||||
assertLocalPortForwarding(t, client)
|
||||
assertRemotePortForwardingTODO(t, client)
|
||||
// TODO: pty
|
||||
assertLocalPortForwarding(t, client)
|
||||
assertExec(t, client)
|
||||
assertPtyTerminal(t, client)
|
||||
// TODO: sftp
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ func TestAllowExecute(t *testing.T) {
|
|||
assertNoRemotePortForwarding(t, client)
|
||||
assertNoLocalPortForwarding(t, client)
|
||||
assertExec(t, client)
|
||||
// TODO: no pty
|
||||
assertPtyTerminal(t, client)
|
||||
// TODO: no sftp
|
||||
}
|
||||
|
||||
|
@ -203,7 +203,7 @@ func TestAllowTcpipForward(t *testing.T) {
|
|||
assertRemotePortForwardingTODO(t, client)
|
||||
assertNoLocalPortForwarding(t, client)
|
||||
assertNoExec(t, client)
|
||||
// TODO: no pty
|
||||
assertNoPtyTerminal(t, client)
|
||||
// TODO: no sftp
|
||||
}
|
||||
|
||||
|
@ -234,7 +234,7 @@ func TestAllowDirectTcpip(t *testing.T) {
|
|||
assertNoRemotePortForwarding(t, client)
|
||||
assertLocalPortForwarding(t, client)
|
||||
assertNoExec(t, client)
|
||||
// TODO: no pty
|
||||
assertNoPtyTerminal(t, client)
|
||||
// TODO: no sftp
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"golang.org/x/crypto/ssh"
|
||||
"io"
|
||||
|
@ -8,6 +9,7 @@ import (
|
|||
"os/exec"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func getAvailableTcpPort() int {
|
||||
|
@ -49,6 +51,43 @@ func assertNoExec(t *testing.T, client *ssh.Client) {
|
|||
assert.Equal(t, "ssh: command whoami failed", err.Error())
|
||||
}
|
||||
|
||||
func assertPtyTerminal(t *testing.T, client *ssh.Client) {
|
||||
session, err := client.NewSession()
|
||||
assert.NoError(t, err)
|
||||
defer session.Close()
|
||||
|
||||
err = session.RequestPty("xterm", 100, 200, ssh.TerminalModes{})
|
||||
assert.NoError(t, err)
|
||||
stdin, err := session.StdinPipe()
|
||||
assert.NoError(t, err)
|
||||
_, err = stdin.Write([]byte("echo helloworldviapty\r"))
|
||||
assert.NoError(t, err)
|
||||
stdout, err := session.StdoutPipe()
|
||||
assert.NoError(t, err)
|
||||
stdoutBytesChan := make(chan []byte)
|
||||
go func() {
|
||||
var buff bytes.Buffer
|
||||
_, err := io.Copy(&buff, stdout)
|
||||
assert.NoError(t, err)
|
||||
stdoutBytesChan <- buff.Bytes()
|
||||
}()
|
||||
err = session.Shell()
|
||||
assert.NoError(t, err)
|
||||
time.Sleep(1 * time.Second)
|
||||
session.Close()
|
||||
stdoutBytes := <-stdoutBytesChan
|
||||
assert.Contains(t, string(stdoutBytes), "helloworldviapty")
|
||||
}
|
||||
|
||||
func assertNoPtyTerminal(t *testing.T, client *ssh.Client) {
|
||||
session, err := client.NewSession()
|
||||
assert.NoError(t, err)
|
||||
defer session.Close()
|
||||
err = session.RequestPty("xterm", 100, 200, ssh.TerminalModes{})
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "ssh: pty-req failed", err.Error())
|
||||
}
|
||||
|
||||
func assertLocalPortForwarding(t *testing.T, client *ssh.Client) {
|
||||
var remoteTcpPort int
|
||||
acceptedConnChan := make(chan net.Conn)
|
||||
|
|
Loading…
Add table
Reference in a new issue