2020-03-27 12:35:57 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
|
|
"github.com/zrepl/zrepl/daemon/logging"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestParseHumanFormatter(t *testing.T) {
|
|
|
|
|
|
|
|
type testCase struct {
|
|
|
|
Name string
|
|
|
|
Input string
|
|
|
|
Expect *RuntimeLine
|
|
|
|
ExpectErr string
|
|
|
|
}
|
|
|
|
|
|
|
|
secs := func(s string) time.Duration {
|
|
|
|
d, err := parseSecs(s)
|
|
|
|
require.NoError(t, err)
|
|
|
|
return d
|
|
|
|
}
|
|
|
|
|
|
|
|
logTime, err := time.Parse(logging.HumanFormatterDateFormat, "2020-04-04T00:00:05+02:00")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
tcs := []testCase{
|
|
|
|
{
|
|
|
|
Name: "human-formatter-noerror",
|
2020-04-11 15:49:41 +02:00
|
|
|
Input: `2020-04-04T00:00:05+02:00 [DEBG][jobname][zfs.cmd][task$stack$span.stack]: command exited without error usertime_s="0.008445" cmd="zfs list -H -p -o name -r -t filesystem,volume" systemtime_s="0.033783" invocation="84" total_time_s="0.037828619"`,
|
2020-03-27 12:35:57 +01:00
|
|
|
Expect: &RuntimeLine{
|
|
|
|
Cmd: "zfs list -H -p -o name -r -t filesystem,volume",
|
|
|
|
TotalTime: secs("0.037828619"),
|
|
|
|
Usertime: secs("0.008445"),
|
|
|
|
Systime: secs("0.033783"),
|
|
|
|
Error: "",
|
|
|
|
LogTime: logTime,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "human-formatter-witherror",
|
2020-04-11 15:49:41 +02:00
|
|
|
Input: `2020-04-04T00:00:05+02:00 [DEBG][jobname][zfs.cmd][task$stack$span.stack]: command exited with error usertime_s="0.008445" cmd="zfs list -H -p -o name -r -t filesystem,volume" systemtime_s="0.033783" invocation="84" total_time_s="0.037828619" err="some error"`,
|
2020-03-27 12:35:57 +01:00
|
|
|
Expect: &RuntimeLine{
|
|
|
|
Cmd: "zfs list -H -p -o name -r -t filesystem,volume",
|
|
|
|
TotalTime: secs("0.037828619"),
|
|
|
|
Usertime: secs("0.008445"),
|
|
|
|
Systime: secs("0.033783"),
|
|
|
|
Error: "some error",
|
|
|
|
LogTime: logTime,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "from graylog",
|
2020-04-11 15:49:41 +02:00
|
|
|
Input: `2020-04-04T00:00:05+02:00 [DEBG][csnas][zfs.cmd][task$stack$span.stack]: command exited without error usertime_s="0" cmd="zfs send -i zroot/ezjail/synapse-12@zrepl_20200329_095518_000 zroot/ezjail/synapse-12@zrepl_20200329_102454_000" total_time_s="0.101598591" invocation="85" systemtime_s="0.041581"`,
|
2020-03-27 12:35:57 +01:00
|
|
|
Expect: &RuntimeLine{
|
|
|
|
Cmd: "zfs send -i zroot/ezjail/synapse-12@zrepl_20200329_095518_000 zroot/ezjail/synapse-12@zrepl_20200329_102454_000",
|
|
|
|
TotalTime: secs("0.101598591"),
|
|
|
|
Systime: secs("0.041581"),
|
|
|
|
Usertime: secs("0"),
|
|
|
|
Error: "",
|
|
|
|
LogTime: logTime,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, c := range tcs {
|
|
|
|
t.Run(c.Name, func(t *testing.T) {
|
|
|
|
l, err := parseLogLine(c.Input)
|
|
|
|
t.Logf("l=%v", l)
|
|
|
|
t.Logf("err=%T %v", err, err)
|
|
|
|
if (c.Expect != nil && c.ExpectErr != "") || (c.Expect == nil && c.ExpectErr == "") {
|
|
|
|
t.Fatal("bad test case", c)
|
|
|
|
}
|
|
|
|
if c.Expect != nil {
|
|
|
|
require.Equal(t, *c.Expect, l)
|
|
|
|
}
|
|
|
|
if c.ExpectErr != "" {
|
|
|
|
require.EqualError(t, err, c.ExpectErr)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|