diff options
Diffstat (limited to 'internal/pktline/pktline_test.go')
-rw-r--r-- | internal/pktline/pktline_test.go | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/internal/pktline/pktline_test.go b/internal/pktline/pktline_test.go new file mode 100644 index 0000000..cf3f6fd --- /dev/null +++ b/internal/pktline/pktline_test.go @@ -0,0 +1,87 @@ +package pktline + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +var ( + largestString = strings.Repeat("z", 0xffff-4) +) + +func TestScanner(t *testing.T) { + largestPacket := "ffff" + largestString + testCases := []struct { + desc string + in string + out []string + fail bool + }{ + { + desc: "happy path", + in: "0010hello world!000000010010hello world!", + out: []string{"0010hello world!", "0000", "0001", "0010hello world!"}, + }, + { + desc: "large input", + in: "0010hello world!0000" + largestPacket + "0000", + out: []string{"0010hello world!", "0000", largestPacket, "0000"}, + }, + { + desc: "missing byte middle", + in: "0010hello world!00000010010hello world!", + out: []string{"0010hello world!", "0000", "0010010hello wor"}, + fail: true, + }, + { + desc: "unfinished prefix", + in: "0010hello world!000", + out: []string{"0010hello world!"}, + fail: true, + }, + { + desc: "short read in data, only prefix", + in: "0010hello world!0005", + out: []string{"0010hello world!"}, + fail: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + scanner := NewScanner(strings.NewReader(tc.in)) + var output []string + for scanner.Scan() { + output = append(output, scanner.Text()) + } + + if tc.fail { + require.Error(t, scanner.Err()) + } else { + require.NoError(t, scanner.Err()) + } + + require.Equal(t, tc.out, output) + }) + } +} + +func TestIsDone(t *testing.T) { + testCases := []struct { + in string + done bool + }{ + {in: "0008abcd", done: false}, + {in: "invalid packet", done: false}, + {in: "0009done\n", done: true}, + {in: "0001", done: false}, + } + + for _, tc := range testCases { + t.Run(tc.in, func(t *testing.T) { + require.Equal(t, tc.done, IsDone([]byte(tc.in))) + }) + } +} |