50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|||
|
|
// SPDX-License-Identifier: MIT
|
||
|
|
|
||
|
|
package nfs4
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"sourcedock.dev/petrbalvin/nfs/internal/xdr"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestLockuAndLocktResWire(t *testing.T) {
|
||
|
|
var st Stateid
|
||
|
|
st[4], st[5], st[6], st[7] = 'L', 'O', 'C', 'K'
|
||
|
|
arg := AppendLockuArgs(nil, st, 8, 32)
|
||
|
|
d := xdr.NewDecoder(arg)
|
||
|
|
if op, err := d.Uint32(); err != nil || op != OpLocku {
|
||
|
|
t.Fatalf("op: %d, %v", op, err)
|
||
|
|
}
|
||
|
|
if lt, err := d.Uint32(); err != nil || lt != LockTypeWrite {
|
||
|
|
t.Fatalf("locktype: %v", err)
|
||
|
|
}
|
||
|
|
if _, err := d.Uint32(); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if raw, err := d.Raw(16); err != nil || raw[4] != 'L' {
|
||
|
|
t.Fatalf("stateid: %x, %v", raw, err)
|
||
|
|
}
|
||
|
|
if off, err := d.Uint64(); err != nil || off != 8 {
|
||
|
|
t.Fatalf("offset: %v", err)
|
||
|
|
}
|
||
|
|
if length, err := d.Uint64(); err != nil || length != 32 {
|
||
|
|
t.Fatalf("length: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
res := AppendLockuRes(nil, st)
|
||
|
|
if n, err := resBodyLen(OpLocku, ErrOK, res); err != nil || n != 16 {
|
||
|
|
t.Fatalf("locku measure: %d, %v", n, err)
|
||
|
|
}
|
||
|
|
|
||
|
|
okBody := AppendLocktResOK(nil)
|
||
|
|
if n, err := resBodyLen(OpLockt, ErrOK, okBody); err != nil || n != 0 {
|
||
|
|
t.Fatalf("lockt ok measure: %d, %v", n, err)
|
||
|
|
}
|
||
|
|
denied := AppendLocktResDenied(nil, 0, 100, LockTypeWrite, 0x1111, []byte("holder"))
|
||
|
|
if n, err := resBodyLen(OpLockt, ErrDenied, denied); err != nil || n != len(denied) {
|
||
|
|
t.Fatalf("lockt denied measure: %d of %d, %v", n, len(denied), err)
|
||
|
|
}
|
||
|
|
}
|