parser_test.go
1796 bytes
1package parser_test
2
3import (
4 "bytes"
5 "strings"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10
11 "github.com/TheEdgeOfRage/logfmt/config"
12 "github.com/TheEdgeOfRage/logfmt/parser"
13)
14
15func TestParseLevels(t *testing.T) {
16 data := strings.NewReader(`time="2025-03-15T10:32:22Z" level=trace msg="foobar"
17time="2025-03-15T10:32:23Z" level=debug msg="bar"
18time="2025-03-15T10:32:24Z" level=info msg="foo"
19time="2025-03-15T10:32:25Z" level=warn msg="oopsie"
20time="2025-03-15T10:32:26Z" level=error msg="oh no"
21time="2025-03-15T10:32:27Z" level=fatal msg="AAAAAA"`)
22 w := &bytes.Buffer{}
23
24 p := parser.NewParser(&config.Config{}, data, w)
25 err := p.Start()
26 require.NoError(t, err)
27
28 assert.Equal(t, `2025-03-15 10:32:22 [TRACE] msg=foobar
292025-03-15 10:32:23 [DEBUG] msg=bar
302025-03-15 10:32:24 [INFO] msg=foo
312025-03-15 10:32:25 [WARN] msg=oopsie
322025-03-15 10:32:26 [ERROR] msg="oh no"
332025-03-15 10:32:27 [FATAL] msg=AAAAAA
34`, w.String())
35}
36
37func TestParseTimestamps(t *testing.T) {
38 data := strings.NewReader(`timestamp="2025-03-15T10:32:23Z" level=info msg=foo
39time="2025-03-15T10:32:24Z" level=info msg=foo
40ts="2025-03-15T10:32:25Z" level=info msg=foo
41datetime="2025-03-15T10:32:26Z" level=info msg=foo`)
42 w := &bytes.Buffer{}
43
44 p := parser.NewParser(&config.Config{}, data, w)
45 err := p.Start()
46 require.NoError(t, err)
47
48 assert.Equal(t, `2025-03-15 10:32:23 [INFO] msg=foo
492025-03-15 10:32:24 [INFO] msg=foo
502025-03-15 10:32:25 [INFO] msg=foo
512025-03-15 10:32:26 [INFO] msg=foo
52`, w.String())
53}
54
55func TestParseInvalidLogs(t *testing.T) {
56 data := strings.NewReader(`
57time="2025-03-15T10:32:23Z" level=info msg="loading"
58time="`)
59 w := &bytes.Buffer{}
60 p := parser.NewParser(&config.Config{}, data, w)
61 err := p.Start()
62 require.Error(t, err)
63}