-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpacket_test.go
107 lines (80 loc) · 2.04 KB
/
packet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package xenstore
import (
"bytes"
"io"
"testing"
"github.com/stretchr/testify/assert"
)
func expectPacket(t *testing.T, p *Packet, res string) {
buf := bytes.NewBuffer([]byte{})
if err := p.Pack(buf); err != nil {
t.Fatal(err)
}
b, err := readBytes(buf, len(res))
if err != nil {
t.Fatal(err)
}
assert.Equal(t, res, string(b))
}
func readBytes(r io.Reader, n int) ([]byte, error) {
result := []byte{}
for n > 0 {
b := make([]byte, n)
nr, err := r.Read(b)
if err != nil {
return []byte{}, err
}
result = append(result, b[:nr]...)
n -= nr
}
return result, nil
}
func TestPacket(t *testing.T) {
requestCounter = 0x0
p1, err := NewPacket(XsDebug, []byte("test"), 0x0)
if err != nil {
t.Fatal(err)
}
expectPacket(t, p1,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00test\x00")
p2, err := NewPacket(XsDebug, []byte("/local/domain/0/name"), 0x0)
if err != nil {
t.Fatal(err)
}
expectPacket(t, p2,
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00/local/domain/0/name\x00")
}
func TestTransactionPacket(t *testing.T) {
requestCounter = 0x0
p1, err := NewPacket(XsDebug, []byte("test"), 0x9)
if err != nil {
t.Fatal(err)
}
expectPacket(t, p1,
"\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x05\x00\x00\x00test\x00")
p2, err := NewPacket(XsDebug, []byte("/local/domain/0/name"), 0x6)
if err != nil {
t.Fatal(err)
}
expectPacket(t, p2,
"\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x15\x00\x00\x00/local/domain/0/name\x00")
}
func TestPacketPackUnpack(t *testing.T) {
p1, err := NewPacket(XsDebug, []byte("/local/domain/0"), 0x7)
if err != nil {
t.Fatal(err)
}
b := bytes.NewBuffer([]byte{})
if err := p1.Pack(b); err != nil {
t.Fatal(err)
}
p2 := &Packet{}
if err := p2.Unpack(b); err != nil {
t.Fatal(err)
}
assert.Equal(t, p1.Header.Op, p2.Header.Op)
assert.Equal(t, p1.Header.RqId, p2.Header.RqId)
assert.Equal(t, p1.Header.TxId, p2.Header.TxId)
assert.Equal(t, p1.Header.Length, p2.Header.Length)
assert.Equal(t, p1.Payload, p2.Payload)
}