diff options
| author | 2026-01-30 10:24:26 +0100 | |
|---|---|---|
| committer | 2026-01-30 10:24:26 +0100 | |
| commit | 063179e197b341db541b367ebfdf2c7cbd8bf5f9 (patch) | |
| tree | c277868ea5f945bd4efc4449d272748dcef22977 /pktline/pktline_test.go | |
| parent | config: Add package-level doc-comment (diff) | |
| signature | No signature | |
pktline: Move out of internal; fix package-level doc-comment
Diffstat (limited to 'pktline/pktline_test.go')
| -rw-r--r-- | pktline/pktline_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/pktline/pktline_test.go b/pktline/pktline_test.go new file mode 100644 index 00000000..4dae708b --- /dev/null +++ b/pktline/pktline_test.go @@ -0,0 +1,88 @@ +package pktline + +import ( + "bytes" + "errors" + "io" + "testing" +) + +func TestWriteReadLineRoundtrip(t *testing.T) { + var buf bytes.Buffer + payload := []byte("hello\n") + if err := WriteLine(&buf, payload); err != nil { + t.Fatalf("WriteLine: %v", err) + } + + dst := make([]byte, 64) + line, n, status, err := ReadLine(&buf, dst) + if err != nil { + t.Fatalf("ReadLine: %v", err) + } + if status != StatusData { + t.Fatalf("status: got %v, want %v", status, StatusData) + } + if n != len(payload) { + t.Fatalf("n: got %d, want %d", n, len(payload)) + } + if !bytes.Equal(line, payload) { + t.Fatalf("payload: got %q, want %q", line, payload) + } +} + +func TestReadLineSpecialPackets(t *testing.T) { + tests := []struct { + name string + input string + status Status + }{ + {"flush", "0000", StatusFlush}, + {"delim", "0001", StatusDelim}, + {"response_end", "0002", StatusResponseEnd}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r := bytes.NewBufferString(tt.input) + dst := make([]byte, 16) + line, n, status, err := ReadLine(r, dst) + if err != nil { + t.Fatalf("ReadLine: %v", err) + } + if status != tt.status { + t.Fatalf("status: got %v, want %v", status, tt.status) + } + if n != 0 || len(line) != 0 { + t.Fatalf("expected empty payload, got %d bytes", n) + } + }) + } +} + +func TestReadLineInvalidHeader(t *testing.T) { + r := bytes.NewBufferString("zzzz") + dst := make([]byte, 16) + _, _, _, err := ReadLine(r, dst) + if !errors.Is(err, ErrInvalidHeader) { + t.Fatalf("expected ErrInvalidHeader, got %v", err) + } +} + +func TestReadLineBufferTooSmall(t *testing.T) { + var buf bytes.Buffer + payload := []byte("abcd") + if err := WriteLine(&buf, payload); err != nil { + t.Fatalf("WriteLine: %v", err) + } + dst := make([]byte, 2) + _, _, _, err := ReadLine(&buf, dst) + if !errors.Is(err, ErrBufferTooSmall) { + t.Fatalf("expected ErrBufferTooSmall, got %v", err) + } +} + +func TestWriteLineTooLarge(t *testing.T) { + payload := make([]byte, maxPacketDataLen+1) + if err := WriteLine(io.Discard, payload); !errors.Is(err, ErrPacketTooLarge) { + t.Fatalf("expected ErrPacketTooLarge, got %v", err) + } +} |
