| 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) |
| } |
| } |