blob: 5ae0df3a150baf672dd2d75e8a667a7780d49e7e [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
Serge Bazanski248b2ec2020-10-26 15:55:51 +01002// SPDX-License-Identifier: Apache-2.0
Serge Bazanski248b2ec2020-10-26 15:55:51 +01003
4package logbuffer
5
6import (
7 "fmt"
8 "testing"
9)
10
11func TestLineBuffer(t *testing.T) {
12 var lines []*Line
13 lb := NewLineBuffer(1024, func(l *Line) {
14 lines = append(lines, l)
15 })
16
17 compare := func(a []*Line, b ...string) string {
18 msg := fmt.Sprintf("want %v, got %v", a, b)
19 if len(a) != len(b) {
20 return msg
21 }
Tim Windelschmidt6b6428d2024-04-11 01:35:41 +020022 for i := range a {
Serge Bazanski248b2ec2020-10-26 15:55:51 +010023 if a[i].String() != b[i] {
24 return msg
25 }
26 }
27 return ""
28 }
29
30 // Write some data.
31 fmt.Fprintf(lb, "foo ")
32 if diff := compare(lines); diff != "" {
33 t.Fatal(diff)
34 }
35 fmt.Fprintf(lb, "bar\n")
36 if diff := compare(lines, "foo bar"); diff != "" {
37 t.Fatal(diff)
38 }
39 fmt.Fprintf(lb, "baz")
40 if diff := compare(lines, "foo bar"); diff != "" {
41 t.Fatal(diff)
42 }
43 fmt.Fprintf(lb, " baz")
44 if diff := compare(lines, "foo bar"); diff != "" {
45 t.Fatal(diff)
46 }
47 // Close and expect flush.
48 if err := lb.Close(); err != nil {
49 t.Fatalf("Close: %v", err)
50 }
51 if diff := compare(lines, "foo bar", "baz baz"); diff != "" {
52 t.Fatal(diff)
53 }
54
55 // Check behaviour after close
56 if _, err := fmt.Fprintf(lb, "nope"); err == nil {
57 t.Fatalf("Write after Close: wanted error, got nil")
58 }
59 if err := lb.Close(); err == nil {
60 t.Fatalf("second Close: wanted error, got nil")
61 }
62}