github.com/pkg/sftp@v1.13.6/internal/encoding/ssh/filexfer/openssh/fsync_test.go (about) 1 package openssh 2 3 import ( 4 "bytes" 5 "testing" 6 7 sshfx "github.com/pkg/sftp/internal/encoding/ssh/filexfer" 8 ) 9 10 var _ sshfx.PacketMarshaller = &FSyncExtendedPacket{} 11 12 func init() { 13 RegisterExtensionFSync() 14 } 15 16 func TestFSyncExtendedPacket(t *testing.T) { 17 const ( 18 id = 42 19 handle = "somehandle" 20 ) 21 22 ep := &FSyncExtendedPacket{ 23 Handle: handle, 24 } 25 26 data, err := sshfx.ComposePacket(ep.MarshalPacket(id, nil)) 27 if err != nil { 28 t.Fatal("unexpected error:", err) 29 } 30 31 want := []byte{ 32 0x00, 0x00, 0x00, 40, 33 200, 34 0x00, 0x00, 0x00, 42, 35 0x00, 0x00, 0x00, 17, 'f', 's', 'y', 'n', 'c', '@', 'o', 'p', 'e', 'n', 's', 's', 'h', '.', 'c', 'o', 'm', 36 0x00, 0x00, 0x00, 10, 's', 'o', 'm', 'e', 'h', 'a', 'n', 'd', 'l', 'e', 37 } 38 39 if !bytes.Equal(data, want) { 40 t.Fatalf("MarshalPacket() = %X, but wanted %X", data, want) 41 } 42 43 var p sshfx.ExtendedPacket 44 45 // UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed. 46 if err := p.UnmarshalPacketBody(sshfx.NewBuffer(data[9:])); err != nil { 47 t.Fatal("unexpected error:", err) 48 } 49 50 if p.ExtendedRequest != extensionFSync { 51 t.Errorf("UnmarshalPacketBody(): ExtendedRequest was %q, but expected %q", p.ExtendedRequest, extensionFSync) 52 } 53 54 ep, ok := p.Data.(*FSyncExtendedPacket) 55 if !ok { 56 t.Fatalf("UnmarshaledPacketBody(): Data was type %T, but expected *FSyncExtendedPacket", p.Data) 57 } 58 59 if ep.Handle != handle { 60 t.Errorf("UnmarshalPacketBody(): Handle was %q, but expected %q", ep.Handle, handle) 61 } 62 }