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)
|
assert.NoError(t, err)
|
||||||
defer client.Close()
|
defer client.Close()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assertExec(t, client)
|
|
||||||
assertLocalPortForwarding(t, client)
|
|
||||||
assertRemotePortForwardingTODO(t, client)
|
assertRemotePortForwardingTODO(t, client)
|
||||||
// TODO: pty
|
assertLocalPortForwarding(t, client)
|
||||||
|
assertExec(t, client)
|
||||||
|
assertPtyTerminal(t, client)
|
||||||
// TODO: sftp
|
// TODO: sftp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ func TestAllowExecute(t *testing.T) {
|
||||||
assertNoRemotePortForwarding(t, client)
|
assertNoRemotePortForwarding(t, client)
|
||||||
assertNoLocalPortForwarding(t, client)
|
assertNoLocalPortForwarding(t, client)
|
||||||
assertExec(t, client)
|
assertExec(t, client)
|
||||||
// TODO: no pty
|
assertPtyTerminal(t, client)
|
||||||
// TODO: no sftp
|
// TODO: no sftp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ func TestAllowTcpipForward(t *testing.T) {
|
||||||
assertRemotePortForwardingTODO(t, client)
|
assertRemotePortForwardingTODO(t, client)
|
||||||
assertNoLocalPortForwarding(t, client)
|
assertNoLocalPortForwarding(t, client)
|
||||||
assertNoExec(t, client)
|
assertNoExec(t, client)
|
||||||
// TODO: no pty
|
assertNoPtyTerminal(t, client)
|
||||||
// TODO: no sftp
|
// TODO: no sftp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ func TestAllowDirectTcpip(t *testing.T) {
|
||||||
assertNoRemotePortForwarding(t, client)
|
assertNoRemotePortForwarding(t, client)
|
||||||
assertLocalPortForwarding(t, client)
|
assertLocalPortForwarding(t, client)
|
||||||
assertNoExec(t, client)
|
assertNoExec(t, client)
|
||||||
// TODO: no pty
|
assertNoPtyTerminal(t, client)
|
||||||
// TODO: no sftp
|
// TODO: no sftp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
"io"
|
"io"
|
||||||
|
@ -8,6 +9,7 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getAvailableTcpPort() int {
|
func getAvailableTcpPort() int {
|
||||||
|
@ -49,6 +51,43 @@ func assertNoExec(t *testing.T, client *ssh.Client) {
|
||||||
assert.Equal(t, "ssh: command whoami failed", err.Error())
|
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) {
|
func assertLocalPortForwarding(t *testing.T, client *ssh.Client) {
|
||||||
var remoteTcpPort int
|
var remoteTcpPort int
|
||||||
acceptedConnChan := make(chan net.Conn)
|
acceptedConnChan := make(chan net.Conn)
|
||||||
|
|
Loading…
Add table
Reference in a new issue