69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package openssh
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
sshfx "github.com/pkg/sftp/internal/encoding/ssh/filexfer"
|
|
)
|
|
|
|
var _ sshfx.PacketMarshaller = &HardlinkExtendedPacket{}
|
|
|
|
func init() {
|
|
RegisterExtensionHardlink()
|
|
}
|
|
|
|
func TestHardlinkExtendedPacket(t *testing.T) {
|
|
const (
|
|
id = 42
|
|
oldpath = "/foo"
|
|
newpath = "/bar"
|
|
)
|
|
|
|
ep := &HardlinkExtendedPacket{
|
|
OldPath: oldpath,
|
|
NewPath: newpath,
|
|
}
|
|
|
|
data, err := sshfx.ComposePacket(ep.MarshalPacket(id, nil))
|
|
if err != nil {
|
|
t.Fatal("unexpected error:", err)
|
|
}
|
|
|
|
want := []byte{
|
|
0x00, 0x00, 0x00, 45,
|
|
200,
|
|
0x00, 0x00, 0x00, 42,
|
|
0x00, 0x00, 0x00, 20, 'h', 'a', 'r', 'd', 'l', 'i', 'n', 'k', '@', 'o', 'p', 'e', 'n', 's', 's', 'h', '.', 'c', 'o', 'm',
|
|
0x00, 0x00, 0x00, 4, '/', 'f', 'o', 'o',
|
|
0x00, 0x00, 0x00, 4, '/', 'b', 'a', 'r',
|
|
}
|
|
|
|
if !bytes.Equal(data, want) {
|
|
t.Fatalf("MarshalPacket() = %X, but wanted %X", data, want)
|
|
}
|
|
|
|
var p sshfx.ExtendedPacket
|
|
|
|
// UnmarshalPacketBody assumes the (length, type, request-id) have already been consumed.
|
|
if err := p.UnmarshalPacketBody(sshfx.NewBuffer(data[9:])); err != nil {
|
|
t.Fatal("unexpected error:", err)
|
|
}
|
|
|
|
if p.ExtendedRequest != extensionHardlink {
|
|
t.Errorf("UnmarshalPacketBody(): ExtendedRequest was %q, but expected %q", p.ExtendedRequest, extensionHardlink)
|
|
}
|
|
|
|
ep, ok := p.Data.(*HardlinkExtendedPacket)
|
|
if !ok {
|
|
t.Fatalf("UnmarshaledPacketBody(): Data was type %T, but expected *HardlinkExtendedPacket", p.Data)
|
|
}
|
|
|
|
if ep.OldPath != oldpath {
|
|
t.Errorf("UnmarshalPacketBody(): OldPath was %q, but expected %q", ep.OldPath, oldpath)
|
|
}
|
|
|
|
if ep.NewPath != newpath {
|
|
t.Errorf("UnmarshalPacketBody(): NewPath was %q, but expected %q", ep.NewPath, newpath)
|
|
}
|
|
}
|