mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
121 lines
4 KiB
Go
121 lines
4 KiB
Go
package syslog
|
|
|
|
import (
|
|
"bytes"
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vlinsert/insertutils"
|
|
)
|
|
|
|
func TestSyslogLineReader_Success(t *testing.T) {
|
|
f := func(data string, linesExpected []string) {
|
|
t.Helper()
|
|
|
|
r := bytes.NewBufferString(data)
|
|
slr := getSyslogLineReader(r)
|
|
defer putSyslogLineReader(slr)
|
|
|
|
var lines []string
|
|
for slr.nextLine() {
|
|
lines = append(lines, string(slr.line))
|
|
}
|
|
if err := slr.Error(); err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if !reflect.DeepEqual(lines, linesExpected) {
|
|
t.Fatalf("unexpected lines read;\ngot\n%q\nwant\n%q", lines, linesExpected)
|
|
}
|
|
}
|
|
|
|
f("", nil)
|
|
f("foobar", []string{"foobar"})
|
|
|
|
f(`Jun 3 12:08:33 abcd systemd: Starting Update the local ESM caches...
|
|
48 <165>Jun 4 12:08:33 abcd systemd[345]: abc defg<123>1 2023-06-03T17:42:12.345Z mymachine.example.com appname 12345 ID47 [exampleSDID@32473 iut="3" eventSource="Application 123 = ] 56" eventID="11211"] This is a test message with structured data.
|
|
`, []string{
|
|
"Jun 3 12:08:33 abcd systemd: Starting Update the local ESM caches...",
|
|
"<165>Jun 4 12:08:33 abcd systemd[345]: abc defg",
|
|
`<123>1 2023-06-03T17:42:12.345Z mymachine.example.com appname 12345 ID47 [exampleSDID@32473 iut="3" eventSource="Application 123 = ] 56" eventID="11211"] This is a test message with structured data.`,
|
|
})
|
|
}
|
|
|
|
func TestSyslogLineReader_Failure(t *testing.T) {
|
|
f := func(data string) {
|
|
t.Helper()
|
|
|
|
r := bytes.NewBufferString(data)
|
|
slr := getSyslogLineReader(r)
|
|
defer putSyslogLineReader(slr)
|
|
|
|
if slr.nextLine() {
|
|
t.Fatalf("expecting failure to read the first line")
|
|
}
|
|
if err := slr.Error(); err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
}
|
|
|
|
// invalid format for message size
|
|
f("12foo bar")
|
|
|
|
// too big message size
|
|
f("123 aa")
|
|
f("1233423432 abc")
|
|
}
|
|
|
|
func TestProcessStreamInternal_Success(t *testing.T) {
|
|
f := func(data string, currentYear, rowsExpected int, timestampsExpected []int64, resultExpected string) {
|
|
t.Helper()
|
|
|
|
MustInit()
|
|
defer MustStop()
|
|
|
|
globalTimezone = time.UTC
|
|
globalCurrentYear.Store(int64(currentYear))
|
|
|
|
tlp := &insertutils.TestLogMessageProcessor{}
|
|
r := bytes.NewBufferString(data)
|
|
if err := processStreamInternal(r, "", tlp); err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if err := tlp.Verify(rowsExpected, timestampsExpected, resultExpected); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
data := `Jun 3 12:08:33 abcd systemd: Starting Update the local ESM caches...
|
|
|
|
48 <165>Jun 4 12:08:33 abcd systemd[345]: abc defg<123>1 2023-06-03T17:42:12.345Z mymachine.example.com appname 12345 ID47 [exampleSDID@32473 iut="3" eventSource="Application 123 = ] 56" eventID="11211"] This is a test message with structured data.
|
|
`
|
|
currentYear := 2023
|
|
rowsExpected := 3
|
|
timestampsExpected := []int64{1685794113000000000, 1685880513000000000, 1685814132345000000}
|
|
resultExpected := `{"format":"rfc3164","timestamp":"","hostname":"abcd","app_name":"systemd","_msg":"Starting Update the local ESM caches..."}
|
|
{"priority":"165","facility":"20","severity":"5","format":"rfc3164","timestamp":"","hostname":"abcd","app_name":"systemd","proc_id":"345","_msg":"abc defg"}
|
|
{"priority":"123","facility":"15","severity":"3","format":"rfc5424","timestamp":"","hostname":"mymachine.example.com","app_name":"appname","proc_id":"12345","msg_id":"ID47","exampleSDID@32473.iut":"3","exampleSDID@32473.eventSource":"Application 123 = ] 56","exampleSDID@32473.eventID":"11211","_msg":"This is a test message with structured data."}`
|
|
f(data, currentYear, rowsExpected, timestampsExpected, resultExpected)
|
|
}
|
|
|
|
func TestProcessStreamInternal_Failure(t *testing.T) {
|
|
f := func(data string) {
|
|
t.Helper()
|
|
|
|
MustInit()
|
|
defer MustStop()
|
|
|
|
tlp := &insertutils.TestLogMessageProcessor{}
|
|
r := bytes.NewBufferString(data)
|
|
if err := processStreamInternal(r, "", tlp); err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
}
|
|
|
|
// invalid format for message size
|
|
f("12foo bar")
|
|
|
|
// too big message size
|
|
f("123 foo")
|
|
f("123456789 bar")
|
|
}
|