go.crypto/ssh: add terminal modes to ssh.RequestPty()

R=dave, agl
CC=golang-dev
https://golang.org/cl/6655046
This commit is contained in:
Willem van der Schyff
2012-10-21 16:16:55 +11:00
committed by Dave Cheney
parent c9c0e06eed
commit 2fccde5d00
3 changed files with 180 additions and 5 deletions
+74
View File
@@ -10,8 +10,11 @@ package test
import (
"bytes"
"code.google.com/p/go.crypto/ssh"
"io"
"strings"
"testing"
"time"
)
func TestRunCommandSuccess(t *testing.T) {
@@ -99,3 +102,74 @@ func TestFuncLargeRead(t *testing.T) {
t.Fatalf("Expected %d bytes but read only %d from remote command", 2048, n)
}
}
func TestInvalidTerminalMode(t *testing.T) {
server := newServer(t)
defer server.Shutdown()
conn := server.Dial()
defer conn.Close()
session, err := conn.NewSession()
if err != nil {
t.Fatalf("session failed: %v", err)
}
defer session.Close()
if err = session.RequestPty("vt100", 80, 40, ssh.TerminalModes{255: 1984}); err == nil {
t.Fatalf("req-pty failed: successful request with invalid mode")
}
}
func TestValidTerminalMode(t *testing.T) {
server := newServer(t)
defer server.Shutdown()
conn := server.Dial()
defer conn.Close()
session, err := conn.NewSession()
if err != nil {
t.Fatalf("session failed: %v", err)
}
defer session.Close()
stdout, err := session.StdoutPipe()
if err != nil {
t.Fatalf("unable to acquire stdout pipe: %s", err)
}
stdin, err := session.StdinPipe()
if err != nil {
t.Fatalf("unable to acquire stdin pipe: %s", err)
}
tm := ssh.TerminalModes{ssh.ECHO: 0}
if err = session.RequestPty("xterm", 80, 40, tm); err != nil {
t.Fatalf("req-pty failed: %s", err)
}
err = session.Shell()
if err != nil {
t.Fatalf("session failed: %s", err)
}
stdin.Write([]byte("stty -a && exit\n"))
rc := make(chan string)
go func() {
var buf bytes.Buffer
if _, err := io.Copy(&buf, stdout); err != nil {
t.Fatalf("reading failed: %s", err)
}
rc <- buf.String()
}()
result := ""
select {
case result = <-rc:
case <-time.After(1 * time.Second):
}
if !strings.Contains(result, "-echo") {
t.Fatalf("terminal mode failure: expected '%s'", "-echo")
}
}