buffer_test.go

 1package logging
 2
 3import "testing"
 4
 5func TestBufferStoresLines(t *testing.T) {
 6	buffer := NewBuffer(DefaultMaxEntries)
 7
 8	if _, err := buffer.Write([]byte("first\nsecond\n")); err != nil {
 9		t.Fatalf("Write returned error: %v", err)
10	}
11
12	got := buffer.Tail(DefaultMaxEntries)
13	if len(got) != 2 {
14		t.Fatalf("Tail returned %d entries, want 2", len(got))
15	}
16	if got[0].Text != "first" || got[1].Text != "second" {
17		t.Fatalf("unexpected entries: %+v", got)
18	}
19}
20
21func TestBufferKeepsLastMaxEntries(t *testing.T) {
22	buffer := NewBuffer(DefaultMaxEntries)
23
24	for i := 0; i < DefaultMaxEntries+2; i++ {
25		if _, err := buffer.Write([]byte{byte('a' + i), '\n'}); err != nil {
26			t.Fatalf("Write returned error: %v", err)
27		}
28	}
29
30	got := buffer.Tail(DefaultMaxEntries)
31	if len(got) != DefaultMaxEntries {
32		t.Fatalf("Tail returned %d entries, want %d", len(got), DefaultMaxEntries)
33	}
34	if got[0].Text != "c" {
35		t.Fatalf("first retained entry = %q, want %q", got[0].Text, "c")
36	}
37}
38
39func TestBufferTailReturnsRequestedCount(t *testing.T) {
40	buffer := NewBuffer(DefaultMaxEntries)
41
42	for _, line := range []string{"first\n", "second\n", "third\n"} {
43		if _, err := buffer.Write([]byte(line)); err != nil {
44			t.Fatalf("Write returned error: %v", err)
45		}
46	}
47
48	got := buffer.Tail(2)
49	if len(got) != 2 {
50		t.Fatalf("Tail returned %d entries, want 2", len(got))
51	}
52	if got[0].Text != "second" || got[1].Text != "third" {
53		t.Fatalf("unexpected entries: %+v", got)
54	}
55}
56
57func TestBufferTailReturnsNilForNonPositiveCount(t *testing.T) {
58	buffer := NewBuffer(DefaultMaxEntries)
59
60	if _, err := buffer.Write([]byte("first\n")); err != nil {
61		t.Fatalf("Write returned error: %v", err)
62	}
63	if got := buffer.Tail(0); got != nil {
64		t.Fatalf("Tail(0) returned %+v, want nil", got)
65	}
66}
67
68func TestNewBufferUsesDefaultForInvalidMax(t *testing.T) {
69	buffer := NewBuffer(0)
70	if got := buffer.MaxEntries(); got != DefaultMaxEntries {
71		t.Fatalf("MaxEntries = %d, want %d", got, DefaultMaxEntries)
72	}
73}