blob: d53b53b5ab680cfc55042921fac9978f16822840 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
Lorenz Brun25b82a82020-03-23 20:27:51 +01002// SPDX-License-Identifier: Apache-2.0
Lorenz Brun25b82a82020-03-23 20:27:51 +01003
4package logbuffer
5
6import (
7 "testing"
8
9 "github.com/stretchr/testify/require"
10)
11
12func TestSingleLine(t *testing.T) {
13 buf := New(1, 16000)
14 buf.Write([]byte("Hello World\n"))
15 out := buf.ReadLines(1)
16 require.Len(t, out, 1, "Invalid number of lines read")
17 require.Equal(t, "Hello World", out[0].Data, "Read bad log line")
18 require.Equal(t, 11, out[0].OriginalLength, "Invalid line length")
19}
20
21func TestPartialWritesAndReads(t *testing.T) {
22 buf := New(2, 16000)
23 buf.Write([]byte("Hello "))
24 buf.Write([]byte("World\nTest "))
25 buf.Write([]byte("2\n"))
26
27 out := buf.ReadLines(1)
28 require.Len(t, out, 1, "Invalid number of lines for partial read")
29 require.Equal(t, "Test 2", out[0].Data, "Read bad log line")
30
31 out2 := buf.ReadLines(2)
32 require.Len(t, out2, 2, "Invalid number of lines read")
33 require.Equal(t, "Hello World", out2[0].Data, "Read bad log line")
34 require.Equal(t, "Test 2", out2[1].Data, "Read bad log line")
35}
36
37func TestBufferOverwrite(t *testing.T) {
38 buf := New(3, 16000)
39 buf.Write([]byte("Test1\nTest2\nTest3\nTest4\n"))
40
41 out := buf.ReadLines(3)
42 require.Equal(t, out[0].Data, "Test2", "Read bad log line")
43 require.Equal(t, out[1].Data, "Test3", "Read bad log line")
44 require.Equal(t, out[2].Data, "Test4", "Overwritten data is invalid")
45}
46
47func TestTooLargeRequests(t *testing.T) {
48 buf := New(1, 16000)
49 outEmpty := buf.ReadLines(1)
50 require.Len(t, outEmpty, 0, "Returned more data than there is")
51
52 buf.Write([]byte("1\n2\n"))
53 out := buf.ReadLines(2)
54 require.Len(t, out, 1, "Returned more data than the ring buffer can hold")
55}
56
57func TestSpecialCases(t *testing.T) {
58 buf := New(2, 16000)
59 buf.Write([]byte("Test1"))
60 buf.Write([]byte("\nTest2\n"))
61 out := buf.ReadLines(2)
62 require.Len(t, out, 2, "Too many lines written")
63 require.Equal(t, out[0].Data, "Test1", "Read bad log line")
64 require.Equal(t, out[1].Data, "Test2", "Read bad log line")
65}
66
67func TestLineLengthLimit(t *testing.T) {
68 buf := New(2, 6)
69
70 testStr := "Just Testing"
71
72 buf.Write([]byte(testStr + "\nShort\n"))
73
74 out := buf.ReadLines(2)
75 require.Equal(t, len(testStr), out[0].OriginalLength, "Line is over length limit")
76 require.Equal(t, "Just T", out[0].Data, "Log line not properly truncated")
77
78 out2 := buf.ReadLinesTruncated(2, "...")
79 require.Equal(t, out2[0], "Just T...", "Line is over length limit")
80 require.Equal(t, out2[1], "Short", "Truncated small enough line")
81}