// Copyright (c) 2026 Petr BalvĂ­n (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) } }