]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/field_test.go
Refactoring and cleanup
[rbdr/mobius] / hotline / field_test.go
index fb686dc51182b7fafb03f5e703559d8490bccc6d..317c2d94a99b482dda425a61c23198f524e2ad3a 100644 (file)
@@ -1,7 +1,101 @@
 package hotline
 
-import "testing"
+import (
+       "fmt"
+       "github.com/stretchr/testify/assert"
+       "testing"
+)
 
 func TestHello(t *testing.T) {
 
 }
+
+func Test_fieldScanner(t *testing.T) {
+       type args struct {
+               data []byte
+               in1  bool
+       }
+       tests := []struct {
+               name        string
+               args        args
+               wantAdvance int
+               wantToken   []byte
+               wantErr     assert.ErrorAssertionFunc
+       }{
+               {
+                       name: "when too few bytes are provided to read the field size",
+                       args: args{
+                               data: []byte{},
+                               in1:  false,
+                       },
+                       wantAdvance: 0,
+                       wantToken:   []byte(nil),
+                       wantErr:     assert.NoError,
+               },
+               {
+                       name: "when too few bytes are provided to read the full payload",
+                       args: args{
+                               data: []byte{
+                                       0, 1,
+                                       0, 4,
+                                       0, 0,
+                               },
+                               in1: false,
+                       },
+                       wantAdvance: 0,
+                       wantToken:   []byte(nil),
+                       wantErr:     assert.NoError,
+               },
+               {
+                       name: "when a full field is provided",
+                       args: args{
+                               data: []byte{
+                                       0, 1,
+                                       0, 4,
+                                       0, 0,
+                                       0, 0,
+                               },
+                               in1: false,
+                       },
+                       wantAdvance: 8,
+                       wantToken: []byte{
+                               0, 1,
+                               0, 4,
+                               0, 0,
+                               0, 0,
+                       },
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "when a full field plus extra bytes are provided",
+                       args: args{
+                               data: []byte{
+                                       0, 1,
+                                       0, 4,
+                                       0, 0,
+                                       0, 0,
+                                       1, 1,
+                               },
+                               in1: false,
+                       },
+                       wantAdvance: 8,
+                       wantToken: []byte{
+                               0, 1,
+                               0, 4,
+                               0, 0,
+                               0, 0,
+                       },
+                       wantErr: assert.NoError,
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       gotAdvance, gotToken, err := fieldScanner(tt.args.data, tt.args.in1)
+                       if !tt.wantErr(t, err, fmt.Sprintf("fieldScanner(%v, %v)", tt.args.data, tt.args.in1)) {
+                               return
+                       }
+                       assert.Equalf(t, tt.wantAdvance, gotAdvance, "fieldScanner(%v, %v)", tt.args.data, tt.args.in1)
+                       assert.Equalf(t, tt.wantToken, gotToken, "fieldScanner(%v, %v)", tt.args.data, tt.args.in1)
+               })
+       }
+}