Transport should not be a ReadWriter. It can only write packets, i.e. no partial reads or writes. Furthermore, you can currently do ClientConn.Write() while the connection is live, which sends raw bytes over the connection. Doing so will confuse the transports because the data is not encrypted.
As a consequence, ClientConn and ServerConn stop being a net.Conn
Finally, ensure that {Server,Client}Conn implement LocalAddr and RemoteAddr methods that previously were exposed by an embedded net.Conn field.
R=hanwen
CC=golang-dev
https://golang.org/cl/16610043
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ssh
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
func TestSafeString(t *testing.T) {
|
|
strings := map[string]string{
|
|
"\x20\x0d\x0a": "\x20\x0d\x0a",
|
|
"flibble": "flibble",
|
|
"new\x20line": "new\x20line",
|
|
"123456\x07789": "123456 789",
|
|
"\t\t\x10\r\n": "\t\t \r\n",
|
|
}
|
|
|
|
for s, expected := range strings {
|
|
actual := safeString(s)
|
|
if expected != actual {
|
|
t.Errorf("expected: %v, actual: %v", []byte(expected), []byte(actual))
|
|
}
|
|
}
|
|
}
|
|
|
|
// Make sure Read/Write are not exposed.
|
|
func TestConnHideRWMethods(t *testing.T) {
|
|
for _, c := range []interface{}{new(ServerConn), new(ClientConn)} {
|
|
if _, ok := c.(io.Reader); ok {
|
|
t.Errorf("%T implements io.Reader", c)
|
|
}
|
|
if _, ok := c.(io.Writer); ok {
|
|
t.Errorf("%T implements io.Writer", c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestConnSupportsLocalRemoteMethods(t *testing.T) {
|
|
type LocalAddr interface {
|
|
LocalAddr() net.Addr
|
|
}
|
|
type RemoteAddr interface {
|
|
RemoteAddr() net.Addr
|
|
}
|
|
for _, c := range []interface{}{new(ServerConn), new(ClientConn)} {
|
|
if _, ok := c.(LocalAddr); !ok {
|
|
t.Errorf("%T does not implement LocalAddr", c)
|
|
}
|
|
if _, ok := c.(RemoteAddr); !ok {
|
|
t.Errorf("%T does not implement RemoteAddr", c)
|
|
}
|
|
}
|
|
}
|