pkg/stanza/operator/parser/syslog/syslogtest/data.go (397 lines of code) (raw):

// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 package syslogtest // import "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/parser/syslog/syslogtest" import ( "fmt" "strings" "time" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/entry" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/parser/syslog" ) // This is the name of a test which requires setting the PreserveWhitespace flags. const RFC6587OctetCountingPreserveSpaceTest = "RFC6587 Octet Counting Preserve Space" type Case struct { Name string Config *syslog.Config Input *entry.Entry Expect *entry.Entry // These signal if a test is valid for UDP and/or TCP protocol ValidForTCP bool ValidForUDP bool } func testLocations() (map[string]*time.Location, error) { locations := map[string]string{ "utc": "UTC", "detroit": "America/Detroit", "athens": "Europe/Athens", } l := make(map[string]*time.Location) for k, v := range locations { var err error if l[k], err = time.LoadLocation(v); err != nil { return nil, err } } return l, nil } func CreateCases(basicConfig func() *syslog.Config) ([]Case, error) { location, err := testLocations() if err != nil { return nil, err } // We need to build out the Non-Transparent-Framing body to ensure we control the Trailer byte nonTransparentBodyBuilder := strings.Builder{} nonTransparentBodyBuilder.WriteString(`<86>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`) nonTransparentBodyBuilder.WriteByte(0x00) nonTransparentBody := nonTransparentBodyBuilder.String() nulFramingTrailer := syslog.NULTrailer ts := time.Now() cases := []Case{ { "RFC3164SkipPriAbsent", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC3164 cfg.Location = location["utc"].String() cfg.AllowSkipPriHeader = true return cfg }(), &entry.Entry{ Body: fmt.Sprintf("%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, &entry.Entry{ Timestamp: time.Date(ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second(), 0, location["utc"]), Severity: entry.Default, SeverityText: "", Attributes: map[string]any{ "appname": "apache_server", "hostname": "1.2.3.4", "message": "test message", }, Body: fmt.Sprintf("%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, true, true, }, { "RFC3164SkipPriPresent", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC3164 cfg.Location = location["utc"].String() cfg.AllowSkipPriHeader = true return cfg }(), &entry.Entry{ Body: fmt.Sprintf("<123>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, &entry.Entry{ Timestamp: time.Date(ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second(), 0, location["utc"]), Severity: entry.Error, SeverityText: "err", Attributes: map[string]any{ "appname": "apache_server", "hostname": "1.2.3.4", "message": "test message", "facility": 15, "priority": 123, }, Body: fmt.Sprintf("<123>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, true, true, }, { "RFC3164", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC3164 cfg.Location = location["utc"].String() return cfg }(), &entry.Entry{ Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, &entry.Entry{ Timestamp: time.Date(ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second(), 0, location["utc"]), Severity: entry.Error2, SeverityText: "crit", Attributes: map[string]any{ "appname": "apache_server", "facility": 4, "hostname": "1.2.3.4", "message": "test message", "priority": 34, }, Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, true, true, }, { "RFC3164Detroit", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC3164 cfg.Location = location["detroit"].String() return cfg }(), &entry.Entry{ Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, &entry.Entry{ Timestamp: time.Date(ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second(), 0, location["detroit"]), Severity: entry.Error2, SeverityText: "crit", Attributes: map[string]any{ "appname": "apache_server", "facility": 4, "hostname": "1.2.3.4", "message": "test message", "priority": 34, }, Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, true, true, }, { "RFC3164Athens", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC3164 cfg.Location = location["athens"].String() return cfg }(), &entry.Entry{ Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, &entry.Entry{ Timestamp: time.Date(ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second(), 0, location["athens"]), Severity: entry.Error2, SeverityText: "crit", Attributes: map[string]any{ "appname": "apache_server", "facility": 4, "hostname": "1.2.3.4", "message": "test message", "priority": 34, }, Body: fmt.Sprintf("<34>%s 1.2.3.4 apache_server: test message", ts.Format("Jan _2 15:04:05")), }, true, true, }, { "RFC5424", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 return cfg }(), &entry.Entry{ Body: `<86>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Info, SeverityText: "info", Attributes: map[string]any{ "appname": "SecureAuth0", "facility": 10, "hostname": "192.168.2.132", "message": "Found the user for retrieving user's profile", "msg_id": "ID52020", "priority": 86, "proc_id": "23108", "structured_data": map[string]any{ "SecureAuth@27389": map[string]any{ "PEN": "27389", "Realm": "SecureAuth0", "UserHostAddress": "192.168.2.132", "UserID": "Tester2", }, }, "version": 1, }, Body: `<86>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, true, true, }, { "RFC5424SkipPriAbsent", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 cfg.AllowSkipPriHeader = true return cfg }(), &entry.Entry{ Body: `1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Default, SeverityText: "", Attributes: map[string]any{ "appname": "SecureAuth0", "hostname": "192.168.2.132", "message": "Found the user for retrieving user's profile", "msg_id": "ID52020", "proc_id": "23108", "structured_data": map[string]any{ "SecureAuth@27389": map[string]any{ "PEN": "27389", "Realm": "SecureAuth0", "UserHostAddress": "192.168.2.132", "UserID": "Tester2", }, }, "version": 1, }, Body: `1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, true, true, }, { "RFC5424SkipPriPresent", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 cfg.AllowSkipPriHeader = true return cfg }(), &entry.Entry{ Body: `<123>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Error, SeverityText: "err", Attributes: map[string]any{ "appname": "SecureAuth0", "hostname": "192.168.2.132", "message": "Found the user for retrieving user's profile", "msg_id": "ID52020", "proc_id": "23108", "structured_data": map[string]any{ "SecureAuth@27389": map[string]any{ "PEN": "27389", "Realm": "SecureAuth0", "UserHostAddress": "192.168.2.132", "UserID": "Tester2", }, }, "version": 1, "facility": 15, "priority": 123, }, Body: `<123>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, true, true, }, { "RFC6587 Octet Counting", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 cfg.EnableOctetCounting = true return cfg }(), &entry.Entry{ Body: `215 <86>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Info, SeverityText: "info", Attributes: map[string]any{ "appname": "SecureAuth0", "facility": 10, "hostname": "192.168.2.132", "message": "Found the user for retrieving user's profile", "msg_id": "ID52020", "priority": 86, "proc_id": "23108", "structured_data": map[string]any{ "SecureAuth@27389": map[string]any{ "PEN": "27389", "Realm": "SecureAuth0", "UserHostAddress": "192.168.2.132", "UserID": "Tester2", }, }, "version": 1, }, Body: `215 <86>1 2015-08-05T21:58:59.693Z 192.168.2.132 SecureAuth0 23108 ID52020 [SecureAuth@27389 UserHostAddress="192.168.2.132" Realm="SecureAuth0" UserID="Tester2" PEN="27389"] Found the user for retrieving user's profile`, }, true, false, }, { RFC6587OctetCountingPreserveSpaceTest, func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 cfg.EnableOctetCounting = true return cfg }(), &entry.Entry{ Body: `77 <86>1 2015-08-05T21:58:59.693Z 192.168.2.132 inactive - - - partition is p2 `, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Info, SeverityText: "info", Attributes: map[string]any{ "appname": "inactive", "facility": 10, "hostname": "192.168.2.132", "message": " partition is p2 ", "priority": 86, "version": 1, }, Body: `77 <86>1 2015-08-05T21:58:59.693Z 192.168.2.132 inactive - - - partition is p2 `, }, true, false, }, { "RFC6587 Non-Transparent-framing", func() *syslog.Config { cfg := basicConfig() cfg.Protocol = syslog.RFC5424 cfg.NonTransparentFramingTrailer = &nulFramingTrailer return cfg }(), &entry.Entry{ Body: nonTransparentBody, }, &entry.Entry{ Timestamp: time.Date(2015, 8, 5, 21, 58, 59, 693000000, time.UTC), Severity: entry.Info, SeverityText: "info", Attributes: map[string]any{ "appname": "SecureAuth0", "facility": 10, "hostname": "192.168.2.132", "message": "Found the user for retrieving user's profile", "msg_id": "ID52020", "priority": 86, "proc_id": "23108", "structured_data": map[string]any{ "SecureAuth@27389": map[string]any{ "PEN": "27389", "Realm": "SecureAuth0", "UserHostAddress": "192.168.2.132", "UserID": "Tester2", }, }, "version": 1, }, Body: nonTransparentBody, }, true, false, }, } return cases, nil }