]> git.r.bdr.sh - rbdr/mobius/blame - hotline/field_test.go
Delete docs/Screenshot 2024-05-03 at 4.40.09 PM.png
[rbdr/mobius] / hotline / field_test.go
CommitLineData
6988a057
JH
1package hotline
2
95159e55
JH
3import (
4 "fmt"
5 "github.com/stretchr/testify/assert"
6 "testing"
7)
6988a057
JH
8
9func TestHello(t *testing.T) {
10
11}
95159e55
JH
12
13func Test_fieldScanner(t *testing.T) {
14 type args struct {
15 data []byte
16 in1 bool
17 }
18 tests := []struct {
19 name string
20 args args
21 wantAdvance int
22 wantToken []byte
23 wantErr assert.ErrorAssertionFunc
24 }{
25 {
26 name: "when too few bytes are provided to read the field size",
27 args: args{
28 data: []byte{},
29 in1: false,
30 },
31 wantAdvance: 0,
32 wantToken: []byte(nil),
33 wantErr: assert.NoError,
34 },
35 {
36 name: "when too few bytes are provided to read the full payload",
37 args: args{
38 data: []byte{
39 0, 1,
40 0, 4,
41 0, 0,
42 },
43 in1: false,
44 },
45 wantAdvance: 0,
46 wantToken: []byte(nil),
47 wantErr: assert.NoError,
48 },
49 {
50 name: "when a full field is provided",
51 args: args{
52 data: []byte{
53 0, 1,
54 0, 4,
55 0, 0,
56 0, 0,
57 },
58 in1: false,
59 },
60 wantAdvance: 8,
61 wantToken: []byte{
62 0, 1,
63 0, 4,
64 0, 0,
65 0, 0,
66 },
67 wantErr: assert.NoError,
68 },
69 {
70 name: "when a full field plus extra bytes are provided",
71 args: args{
72 data: []byte{
73 0, 1,
74 0, 4,
75 0, 0,
76 0, 0,
77 1, 1,
78 },
79 in1: false,
80 },
81 wantAdvance: 8,
82 wantToken: []byte{
83 0, 1,
84 0, 4,
85 0, 0,
86 0, 0,
87 },
88 wantErr: assert.NoError,
89 },
90 }
91 for _, tt := range tests {
92 t.Run(tt.name, func(t *testing.T) {
93 gotAdvance, gotToken, err := fieldScanner(tt.args.data, tt.args.in1)
94 if !tt.wantErr(t, err, fmt.Sprintf("fieldScanner(%v, %v)", tt.args.data, tt.args.in1)) {
95 return
96 }
97 assert.Equalf(t, tt.wantAdvance, gotAdvance, "fieldScanner(%v, %v)", tt.args.data, tt.args.in1)
98 assert.Equalf(t, tt.wantToken, gotToken, "fieldScanner(%v, %v)", tt.args.data, tt.args.in1)
99 })
100 }
101}
a55350da
JH
102
103func TestField_Read(t *testing.T) {
104 type fields struct {
105 ID [2]byte
106 FieldSize [2]byte
107 Data []byte
108 readOffset int
109 }
110 type args struct {
111 p []byte
112 }
113 tests := []struct {
114 name string
115 fields fields
116 args args
117 want int
118 wantErr assert.ErrorAssertionFunc
119 wantBytes []byte
120 }{
121 {
122 name: "returns field bytes",
123 fields: fields{
124 ID: [2]byte{0x00, 0x62},
125 FieldSize: [2]byte{0x00, 0x03},
126 Data: []byte("hai!"),
127 },
128 args: args{
129 p: make([]byte, 512),
130 },
131 want: 8,
132 wantErr: assert.NoError,
133 wantBytes: []byte{
134 0x00, 0x62,
135 0x00, 0x03,
136 0x68, 0x61, 0x69, 0x21,
137 },
138 },
139 {
140 name: "returns field bytes from readOffset",
141 fields: fields{
142 ID: [2]byte{0x00, 0x62},
143 FieldSize: [2]byte{0x00, 0x03},
144 Data: []byte("hai!"),
145 readOffset: 4,
146 },
147 args: args{
148 p: make([]byte, 512),
149 },
150 want: 4,
151 wantErr: assert.NoError,
152 wantBytes: []byte{
153 0x68, 0x61, 0x69, 0x21,
154 },
155 },
156 {
157 name: "returns io.EOF when all bytes read",
158 fields: fields{
159 ID: [2]byte{0x00, 0x62},
160 FieldSize: [2]byte{0x00, 0x03},
161 Data: []byte("hai!"),
162 readOffset: 8,
163 },
164 args: args{
165 p: make([]byte, 512),
166 },
167 want: 0,
168 wantErr: assert.Error,
169 wantBytes: []byte{},
170 },
171 }
172 for _, tt := range tests {
173 t.Run(tt.name, func(t *testing.T) {
174 f := &Field{
d9bc63a1 175 Type: tt.fields.ID,
a55350da
JH
176 FieldSize: tt.fields.FieldSize,
177 Data: tt.fields.Data,
178 readOffset: tt.fields.readOffset,
179 }
180 got, err := f.Read(tt.args.p)
181 if !tt.wantErr(t, err, fmt.Sprintf("Read(%v)", tt.args.p)) {
182 return
183 }
184 assert.Equalf(t, tt.want, got, "Read(%v)", tt.args.p)
185 assert.Equalf(t, tt.wantBytes, tt.args.p[:got], "Read(%v)", tt.args.p)
186 })
187 }
188}
d9bc63a1
JH
189
190func TestField_DecodeInt(t *testing.T) {
191 type fields struct {
192 Data []byte
193 }
194 tests := []struct {
195 name string
196 fields fields
197 want int
198 wantErr assert.ErrorAssertionFunc
199 }{
200 {
201 name: "with 2 bytes of input",
202 fields: fields{Data: []byte{0, 1}},
203 want: 1,
204 wantErr: assert.NoError,
205 },
206 {
207 name: "with 4 bytes of input",
208 fields: fields{Data: []byte{0, 1, 0, 0}},
209 want: 65536,
210 wantErr: assert.NoError,
211 },
212 {
213 name: "with invalid number of bytes of input",
214 fields: fields{Data: []byte{1, 0, 0, 0, 0, 0, 0, 0}},
215 want: 0,
216 wantErr: assert.Error,
217 },
218 }
219 for _, tt := range tests {
220 t.Run(tt.name, func(t *testing.T) {
221 f := &Field{
222 Data: tt.fields.Data,
223 }
224 got, err := f.DecodeInt()
225 if !tt.wantErr(t, err, fmt.Sprintf("DecodeInt()")) {
226 return
227 }
228 assert.Equalf(t, tt.want, got, "DecodeInt()")
229 })
230 }
231}