| //go:build linux |
| // +build linux |
| |
| package logtree |
| |
| import ( |
| "testing" |
| "time" |
| |
| "github.com/google/go-cmp/cmp" |
| ) |
| |
| func TestParseKmsg(t *testing.T) { |
| now := time.Unix(1691593045, 128027944) |
| nowMonotonic := time.Duration(1501096434537722) |
| |
| for i, te := range []struct { |
| line string |
| want *LeveledPayload |
| }{ |
| // Empty line |
| {"", nil}, |
| // Unknown format |
| {"Not a valid line", nil}, |
| // Normal entry |
| {"6,30962,1501094342185,-;test\n", &LeveledPayload{ |
| messages: []string{"test"}, |
| timestamp: time.Date(2023, 8, 9, 14, 57, 23, 35675222, time.UTC), |
| severity: INFO, |
| }}, |
| // With metadata and different severity |
| {"4,30951,1486884175312,-;nvme nvme2: starting error recovery\n SUBSYSTEM=nvme\n DEVICE=c239:2\n", &LeveledPayload{ |
| messages: []string{"nvme nvme2: starting error recovery"}, |
| timestamp: time.Date(2023, 8, 9, 11, 00, 32, 868802222, time.UTC), |
| severity: WARNING, |
| }}, |
| } { |
| got := parseKmsg(now, nowMonotonic, []byte(te.line)) |
| if diff := cmp.Diff(te.want, got, cmp.AllowUnexported(LeveledPayload{})); diff != "" { |
| t.Errorf("%d: mismatch (-want +got):\n%s", i, diff) |
| } |
| } |
| } |