2016-06-13 19:37:38 +08:00
|
|
|
package sftp
|
|
|
|
|
2016-06-15 09:33:39 +08:00
|
|
|
import "testing"
|
2016-06-13 19:37:38 +08:00
|
|
|
|
|
|
|
func clientServerPair(t *testing.T) (*Client, *Server) {
|
|
|
|
c, s := netPipe(t)
|
|
|
|
server, err := NewServer(s)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
go server.Serve()
|
|
|
|
client, err := NewClientPipe(c, c)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
return client, server
|
|
|
|
}
|
|
|
|
|
|
|
|
type sshFxpTestBadExtendedPacket struct {
|
|
|
|
ID uint32
|
|
|
|
Extension string
|
|
|
|
Data string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p sshFxpTestBadExtendedPacket) id() uint32 { return p.ID }
|
|
|
|
|
|
|
|
func (p sshFxpTestBadExtendedPacket) MarshalBinary() ([]byte, error) {
|
|
|
|
l := 1 + 4 + 4 + // type(byte) + uint32 + uint32
|
|
|
|
len(p.Extension) +
|
|
|
|
len(p.Data)
|
|
|
|
|
|
|
|
b := make([]byte, 0, l)
|
|
|
|
b = append(b, ssh_FXP_EXTENDED)
|
|
|
|
b = marshalUint32(b, p.ID)
|
|
|
|
b = marshalString(b, p.Extension)
|
|
|
|
b = marshalString(b, p.Data)
|
|
|
|
return b, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// test that errors are sent back when we request an invalid extended packet operation
|
|
|
|
func TestInvalidExtendedPacket(t *testing.T) {
|
|
|
|
client, _ := clientServerPair(t)
|
|
|
|
defer client.Close()
|
|
|
|
badPacket := sshFxpTestBadExtendedPacket{client.nextID(), "thisDoesn'tExist", "foobar"}
|
2016-06-15 16:57:05 +08:00
|
|
|
_, _, err := client.clientConn.sendPacket(badPacket)
|
2016-06-13 20:40:12 +08:00
|
|
|
if err == nil {
|
2016-06-13 19:37:38 +08:00
|
|
|
t.Fatal("expected error from bad packet")
|
|
|
|
}
|
|
|
|
}
|