aboutsummaryrefslogtreecommitdiff
path: root/internal/encoding/ssh/filexfer/packets_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/encoding/ssh/filexfer/packets_test.go')
-rw-r--r--internal/encoding/ssh/filexfer/packets_test.go132
1 files changed, 132 insertions, 0 deletions
diff --git a/internal/encoding/ssh/filexfer/packets_test.go b/internal/encoding/ssh/filexfer/packets_test.go
new file mode 100644
index 0000000..1600920
--- /dev/null
+++ b/internal/encoding/ssh/filexfer/packets_test.go
@@ -0,0 +1,132 @@
+package filexfer
+
+import (
+ "bytes"
+ "testing"
+)
+
+func TestRawPacket(t *testing.T) {
+ const (
+ id = 42
+ errMsg = "eof"
+ langTag = "en"
+ )
+
+ p := &RawPacket{
+ PacketType: PacketTypeStatus,
+ RequestID: id,
+ Data: Buffer{
+ b: []byte{
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x03, 'e', 'o', 'f',
+ 0x00, 0x00, 0x00, 0x02, 'e', 'n',
+ },
+ },
+ }
+
+ buf, err := p.MarshalBinary()
+ if err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+
+ want := []byte{
+ 0x00, 0x00, 0x00, 22,
+ 101,
+ 0x00, 0x00, 0x00, 42,
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 3, 'e', 'o', 'f',
+ 0x00, 0x00, 0x00, 2, 'e', 'n',
+ }
+
+ if !bytes.Equal(buf, want) {
+ t.Errorf("RawPacket.MarshalBinary() = %X, but wanted %X", buf, want)
+ }
+
+ *p = RawPacket{}
+
+ if err := p.ReadFrom(bytes.NewReader(buf), nil, DefaultMaxPacketLength); err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+
+ if p.PacketType != PacketTypeStatus {
+ t.Errorf("RawPacket.UnmarshalBinary(): Type was %v, but expected %v", p.PacketType, PacketTypeStat)
+ }
+
+ if p.RequestID != uint32(id) {
+ t.Errorf("RawPacket.UnmarshalBinary(): RequestID was %d, but expected %d", p.RequestID, id)
+ }
+
+ want = []byte{
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 3, 'e', 'o', 'f',
+ 0x00, 0x00, 0x00, 2, 'e', 'n',
+ }
+
+ if !bytes.Equal(p.Data.Bytes(), want) {
+ t.Fatalf("RawPacket.UnmarshalBinary(): Data was %X, but expected %X", p.Data, want)
+ }
+
+ var resp StatusPacket
+ resp.UnmarshalPacketBody(&p.Data)
+
+ if resp.StatusCode != StatusEOF {
+ t.Errorf("UnmarshalPacketBody(): StatusCode was %v, but expected %v", resp.StatusCode, StatusEOF)
+ }
+
+ if resp.ErrorMessage != errMsg {
+ t.Errorf("UnmarshalPacketBody(): ErrorMessage was %q, but expected %q", resp.ErrorMessage, errMsg)
+ }
+
+ if resp.LanguageTag != langTag {
+ t.Errorf("UnmarshalPacketBody(): LanguageTag was %q, but expected %q", resp.LanguageTag, langTag)
+ }
+}
+
+func TestRequestPacket(t *testing.T) {
+ const (
+ id = 42
+ path = "foo"
+ )
+
+ p := &RequestPacket{
+ RequestID: id,
+ Request: &StatPacket{
+ Path: path,
+ },
+ }
+
+ buf, err := p.MarshalBinary()
+ if err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+
+ want := []byte{
+ 0x00, 0x00, 0x00, 12,
+ 17,
+ 0x00, 0x00, 0x00, 42,
+ 0x00, 0x00, 0x00, 3, 'f', 'o', 'o',
+ }
+
+ if !bytes.Equal(buf, want) {
+ t.Errorf("RequestPacket.MarshalBinary() = %X, but wanted %X", buf, want)
+ }
+
+ *p = RequestPacket{}
+
+ if err := p.ReadFrom(bytes.NewReader(buf), nil, DefaultMaxPacketLength); err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+
+ if p.RequestID != uint32(id) {
+ t.Errorf("RequestPacket.UnmarshalBinary(): RequestID was %d, but expected %d", p.RequestID, id)
+ }
+
+ req, ok := p.Request.(*StatPacket)
+ if !ok {
+ t.Fatalf("unexpected Request type was %T, but expected %T", p.Request, req)
+ }
+
+ if req.Path != path {
+ t.Errorf("RequestPacket.UnmarshalBinary(): Request.Path was %q, but expected %q", req.Path, path)
+ }
+}