...
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 }
70
View as plain text