forked from grafana/loki
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyslogparser_test.go
99 lines (75 loc) · 3.02 KB
/
syslogparser_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package syslogparser_test
import (
"io"
"strings"
"testing"
"github.com/leodido/go-syslog/v4"
"github.com/leodido/go-syslog/v4/rfc5424"
"github.com/stretchr/testify/require"
"github.com/grafana/loki/v3/clients/pkg/promtail/targets/syslog/syslogparser"
)
var (
defaultMaxMessageLength = 8192
)
func TestParseStream_OctetCounting(t *testing.T) {
r := strings.NewReader("23 <13>1 - - - - - - First24 <13>1 - - - - - - Second")
results := make([]*syslog.Result, 0)
cb := func(res *syslog.Result) {
results = append(results, res)
}
err := syslogparser.ParseStream(false, r, cb, defaultMaxMessageLength)
require.NoError(t, err)
require.Equal(t, 2, len(results))
require.NoError(t, results[0].Error)
require.Equal(t, "First", *results[0].Message.(*rfc5424.SyslogMessage).Message)
require.NoError(t, results[1].Error)
require.Equal(t, "Second", *results[1].Message.(*rfc5424.SyslogMessage).Message)
}
func TestParseStream_ValidParseError(t *testing.T) {
// This message can not parse fully but is valid when using the BestEffort Parser Option.
r := strings.NewReader("17 <13>1 First")
results := make([]*syslog.Result, 0)
cb := func(res *syslog.Result) {
results = append(results, res)
}
err := syslogparser.ParseStream(false, r, cb, defaultMaxMessageLength)
require.NoError(t, err)
require.Equal(t, 1, len(results))
require.EqualError(t, results[0].Error, "expecting a RFC3339MICRO timestamp or a nil value [col 6]")
require.True(t, results[0].Message.(*rfc5424.SyslogMessage).Valid())
}
func TestParseStream_OctetCounting_LongMessage(t *testing.T) {
r := strings.NewReader("8198 <13>1 - - - - - - First")
results := make([]*syslog.Result, 0)
cb := func(res *syslog.Result) {
results = append(results, res)
}
err := syslogparser.ParseStream(false, r, cb, defaultMaxMessageLength)
require.NoError(t, err)
require.Equal(t, 1, len(results))
require.EqualError(t, results[0].Error, "message too long to parse. was size 8198, max length 8192")
}
func TestParseStream_NewlineSeparated(t *testing.T) {
r := strings.NewReader("<13>1 - - - - - - First\n<13>1 - - - - - - Second\n")
results := make([]*syslog.Result, 0)
cb := func(res *syslog.Result) {
results = append(results, res)
}
err := syslogparser.ParseStream(false, r, cb, defaultMaxMessageLength)
require.NoError(t, err)
require.Equal(t, 2, len(results))
require.NoError(t, results[0].Error)
require.Equal(t, "First", *results[0].Message.(*rfc5424.SyslogMessage).Message)
require.NoError(t, results[1].Error)
require.Equal(t, "Second", *results[1].Message.(*rfc5424.SyslogMessage).Message)
}
func TestParseStream_InvalidStream(t *testing.T) {
r := strings.NewReader("invalid")
err := syslogparser.ParseStream(false, r, func(res *syslog.Result) {}, defaultMaxMessageLength)
require.EqualError(t, err, "invalid or unsupported framing. first byte: 'i'")
}
func TestParseStream_EmptyStream(t *testing.T) {
r := strings.NewReader("")
err := syslogparser.ParseStream(false, r, func(res *syslog.Result) {}, defaultMaxMessageLength)
require.Equal(t, err, io.EOF)
}