summaryrefslogtreecommitdiff
path: root/internal/pktline/pktline_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pktline/pktline_test.go')
-rw-r--r--internal/pktline/pktline_test.go87
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)))
+ })
+ }
+}