2021-03-19 03:20:11 +08:00
|
|
|
package filexfer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &ClosePacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestClosePacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
|
|
|
)
|
|
|
|
|
|
|
|
p := &ClosePacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
|
|
|
0x00, 0x00, 0x00, 19,
|
|
|
|
4,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = ClosePacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &ReadPacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestReadPacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
|
|
|
offset = 0x123456789ABCDEF0
|
|
|
|
length = 0xFEDCBA98
|
|
|
|
)
|
|
|
|
|
|
|
|
p := &ReadPacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
|
|
|
Offset: offset,
|
|
|
|
Len: length,
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
|
|
|
0x00, 0x00, 0x00, 31,
|
|
|
|
5,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
|
|
|
|
0xFE, 0xDC, 0xBA, 0x98,
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = ReadPacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if p.Offset != offset {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Offset was %x, but expected %x", p.Offset, offset)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if p.Len != length {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Len was %x, but expected %x", p.Len, length)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &WritePacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestWritePacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
|
|
|
offset = 0x123456789ABCDEF0
|
|
|
|
)
|
|
|
|
|
|
|
|
var payload = []byte(`foobar`)
|
|
|
|
|
|
|
|
p := &WritePacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
|
|
|
Offset: offset,
|
|
|
|
Data: payload,
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
|
|
|
0x00, 0x00, 0x00, 37,
|
|
|
|
6,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
|
|
|
|
0x00, 0x00, 0x00, 0x06, 'f', 'o', 'o', 'b', 'a', 'r',
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = WritePacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if p.Offset != offset {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Offset was %x, but expected %x", p.Offset, offset)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(p.Data, payload) {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Data was %X, but expected %X", p.Data, payload)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &FstatPacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestFstatPacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
|
|
|
)
|
|
|
|
|
|
|
|
p := &FstatPacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
2021-03-20 05:19:45 +08:00
|
|
|
0x00, 0x00, 0x00, 19,
|
2021-03-19 03:20:11 +08:00
|
|
|
8,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = FstatPacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &FsetstatPacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestFsetstatPacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
2021-03-19 23:39:24 +08:00
|
|
|
perms = 0x87654321
|
2021-03-19 03:20:11 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
p := &FsetstatPacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
2021-03-19 03:20:11 +08:00
|
|
|
Attrs: Attributes{
|
|
|
|
Flags: AttrPermissions,
|
|
|
|
Permissions: perms,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
|
|
|
0x00, 0x00, 0x00, 27,
|
|
|
|
10,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
0x00, 0x00, 0x00, 0x04,
|
2021-03-19 23:39:24 +08:00
|
|
|
0x87, 0x65, 0x43, 0x21,
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = FsetstatPacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
var _ Packet = &ReaddirPacket{}
|
|
|
|
|
2021-03-19 03:20:11 +08:00
|
|
|
func TestReaddirPacket(t *testing.T) {
|
|
|
|
const (
|
|
|
|
id = 42
|
|
|
|
handle = "somehandle"
|
|
|
|
)
|
|
|
|
|
|
|
|
p := &ReaddirPacket{
|
2021-03-21 22:11:23 +08:00
|
|
|
Handle: "somehandle",
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
data, err := ComposePacket(p.MarshalPacket(id))
|
2021-03-19 03:20:11 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []byte{
|
|
|
|
0x00, 0x00, 0x00, 19,
|
|
|
|
12,
|
2021-03-19 21:48:05 +08:00
|
|
|
0x00, 0x00, 0x00, 42,
|
2021-03-19 03:20:11 +08:00
|
|
|
0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e',
|
|
|
|
}
|
|
|
|
|
|
|
|
if !bytes.Equal(data, want) {
|
|
|
|
t.Fatalf("Marshal() = %X, but wanted %X", data, want)
|
|
|
|
}
|
|
|
|
|
|
|
|
*p = ReaddirPacket{}
|
|
|
|
|
2021-03-21 22:11:23 +08:00
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
|
|
if err := p.UnmarshalPacketBody(NewBuffer(data[9:])); err != nil {
|
2021-03-19 03:20:11 +08:00
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p.Handle != handle {
|
2021-03-21 22:11:23 +08:00
|
|
|
t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", p.Handle, handle)
|
2021-03-19 03:20:11 +08:00
|
|
|
}
|
|
|
|
}
|