5 "github.com/stretchr/testify/assert"
9 func TestReadFields(t *testing.T) {
21 name: "valid field data",
23 paramCount: []byte{0x00, 0x02},
25 0x00, 0x65, // ID: fieldData
26 0x00, 0x04, // Size: 2 bytes
27 0x01, 0x02, 0x03, 0x04, // Data
28 0x00, 0x66, // ID: fieldUserName
29 0x00, 0x02, // Size: 2 bytes
35 ID: []byte{0x00, 0x65},
36 FieldSize: []byte{0x00, 0x04},
37 Data: []byte{0x01, 0x02, 0x03, 0x04},
40 ID: []byte{0x00, 0x66},
41 FieldSize: []byte{0x00, 0x02},
42 Data: []byte{0x00, 0x01},
50 paramCount: []byte{0x00, 0x00},
57 name: "when field size does not match data length",
59 paramCount: []byte{0x00, 0x01},
61 0x00, 0x65, // ID: fieldData
62 0x00, 0x04, // Size: 4 bytes
63 0x01, 0x02, 0x03, // Data
70 name: "when field size of second field does not match data length",
72 paramCount: []byte{0x00, 0x01},
74 0x00, 0x65, // ID: fieldData
75 0x00, 0x02, // Size: 2 bytes
77 0x00, 0x65, // ID: fieldData
78 0x00, 0x04, // Size: 4 bytes
79 0x01, 0x02, 0x03, // Data
86 name: "when field data has extra bytes",
88 paramCount: []byte{0x00, 0x01},
90 0x00, 0x65, // ID: fieldData
91 0x00, 0x02, // Size: 2 bytes
92 0x01, 0x02, 0x03, // Data
99 for _, tt := range tests {
100 t.Run(tt.name, func(t *testing.T) {
101 got, err := ReadFields(tt.args.paramCount, tt.args.buf)
102 if (err != nil) != tt.wantErr {
103 t.Errorf("ReadFields() error = %v, wantErr %v", err, tt.wantErr)
107 if !assert.Equal(t, tt.want, got) {
108 t.Errorf("ReadFields() got = %v, want %v", got, tt.want)
114 func TestReadTransaction(t *testing.T) {
115 sampleTransaction := &Transaction{
118 Type: []byte{0x000, 0x93},
119 ID: []byte{0x000, 0x00, 0x00, 0x01},
120 ErrorCode: []byte{0x000, 0x00, 0x00, 0x00},
121 TotalSize: []byte{0x000, 0x00, 0x00, 0x08},
122 DataSize: []byte{0x000, 0x00, 0x00, 0x08},
123 ParamCount: []byte{0x00, 0x01},
126 ID: []byte{0x00, 0x01},
127 FieldSize: []byte{0x00, 0x02},
128 Data: []byte{0xff, 0xff},
144 name: "when buf contains all bytes for a single transaction",
147 b, _ := sampleTransaction.MarshalBinary()
151 want: sampleTransaction,
153 b, _ := sampleTransaction.MarshalBinary()
159 name: "when len(buf) is less than the length of the transaction",
162 b, _ := sampleTransaction.MarshalBinary()
171 for _, tt := range tests {
172 t.Run(tt.name, func(t *testing.T) {
173 got, got1, err := ReadTransaction(tt.args.buf)
174 if (err != nil) != tt.wantErr {
175 t.Errorf("ReadTransaction() error = %v, wantErr %v", err, tt.wantErr)
178 if !assert.Equal(t, tt.want, got) {
179 t.Errorf("ReadTransaction() got = %v, want %v", got, tt.want)
181 if got1 != tt.want1 {
182 t.Errorf("ReadTransaction() got1 = %v, want %v", got1, tt.want1)
188 func Test_transactionScanner(t *testing.T) {
198 wantErr assert.ErrorAssertionFunc
201 name: "when too few bytes are provided to read the transaction size",
207 wantToken: []byte(nil),
208 wantErr: assert.NoError,
211 name: "when too few bytes are provided to read the full payload",
225 wantToken: []byte(nil),
226 wantErr: assert.NoError,
229 name: "when a full transaction is provided",
240 00, 0x6c, // 108 - fieldTransferSize
243 00, 0x6b, // 107 = fieldRefNum
245 00, 0x02, 0x93, 0x47,
259 00, 0x6c, // 108 - fieldTransferSize
262 00, 0x6b, // 107 = fieldRefNum
264 00, 0x02, 0x93, 0x47,
266 wantErr: assert.NoError,
269 name: "when a full transaction plus extra bytes are provided",
280 00, 0x6c, // 108 - fieldTransferSize
283 00, 0x6b, // 107 = fieldRefNum
285 00, 0x02, 0x93, 0x47,
286 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
300 00, 0x6c, // 108 - fieldTransferSize
303 00, 0x6b, // 107 = fieldRefNum
305 00, 0x02, 0x93, 0x47,
307 wantErr: assert.NoError,
310 name: "when two full transactions are provided",
321 00, 0x6c, // 108 - fieldTransferSize
324 00, 0x6b, // 107 = fieldRefNum
326 00, 0x02, 0x93, 0x47,
335 00, 0x6c, // 108 - fieldTransferSize
338 00, 0x6b, // 107 = fieldRefNum
340 00, 0x02, 0x93, 0x47,
354 00, 0x6c, // 108 - fieldTransferSize
357 00, 0x6b, // 107 = fieldRefNum
359 00, 0x02, 0x93, 0x47,
361 wantErr: assert.NoError,
364 for _, tt := range tests {
365 t.Run(tt.name, func(t *testing.T) {
366 gotAdvance, gotToken, err := transactionScanner(tt.args.data, tt.args.in1)
367 if !tt.wantErr(t, err, fmt.Sprintf("transactionScanner(%v, %v)", tt.args.data, tt.args.in1)) {
370 assert.Equalf(t, tt.wantAdvance, gotAdvance, "transactionScanner(%v, %v)", tt.args.data, tt.args.in1)
371 assert.Equalf(t, tt.wantToken, gotToken, "transactionScanner(%v, %v)", tt.args.data, tt.args.in1)