github.com/vishvananda/netlink@v1.3.0/nl/addr_linux_test.go (about) 1 package nl 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "encoding/binary" 7 "testing" 8 9 "golang.org/x/sys/unix" 10 ) 11 12 func (msg *IfAddrmsg) write(b []byte) { 13 native := NativeEndian() 14 b[0] = msg.Family 15 b[1] = msg.Prefixlen 16 b[2] = msg.Flags 17 b[3] = msg.Scope 18 native.PutUint32(b[4:8], msg.Index) 19 } 20 21 func (msg *IfAddrmsg) serializeSafe() []byte { 22 len := unix.SizeofIfAddrmsg 23 b := make([]byte, len) 24 msg.write(b) 25 return b 26 } 27 28 func deserializeIfAddrmsgSafe(b []byte) *IfAddrmsg { 29 var msg = IfAddrmsg{} 30 binary.Read(bytes.NewReader(b[0:unix.SizeofIfAddrmsg]), NativeEndian(), &msg) 31 return &msg 32 } 33 34 func TestIfAddrmsgDeserializeSerialize(t *testing.T) { 35 var orig = make([]byte, unix.SizeofIfAddrmsg) 36 rand.Read(orig) 37 safemsg := deserializeIfAddrmsgSafe(orig) 38 msg := DeserializeIfAddrmsg(orig) 39 testDeserializeSerialize(t, orig, safemsg, msg) 40 } 41 42 func (msg *IfaCacheInfo) write(b []byte) { 43 native := NativeEndian() 44 native.PutUint32(b[0:4], uint32(msg.Prefered)) 45 native.PutUint32(b[4:8], uint32(msg.Valid)) 46 native.PutUint32(b[8:12], uint32(msg.Cstamp)) 47 native.PutUint32(b[12:16], uint32(msg.Tstamp)) 48 } 49 50 func (msg *IfaCacheInfo) serializeSafe() []byte { 51 length := unix.SizeofIfaCacheinfo 52 b := make([]byte, length) 53 msg.write(b) 54 return b 55 } 56 57 func deserializeIfaCacheInfoSafe(b []byte) *IfaCacheInfo { 58 var msg = IfaCacheInfo{} 59 binary.Read(bytes.NewReader(b[0:unix.SizeofIfaCacheinfo]), NativeEndian(), &msg) 60 return &msg 61 } 62 63 func TestIfaCacheInfoDeserializeSerialize(t *testing.T) { 64 var orig = make([]byte, unix.SizeofIfaCacheinfo) 65 rand.Read(orig) 66 safemsg := deserializeIfaCacheInfoSafe(orig) 67 msg := DeserializeIfaCacheInfo(orig) 68 testDeserializeSerialize(t, orig, safemsg, msg) 69 }