From 3b727d74f76503b1306a81318025ed7772c884c3 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Tue, 6 Apr 2021 11:27:32 +0200 Subject: [PATCH] safcm: add tests for logEvent() --- cmd/safcm/sync_test.go | 355 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 355 insertions(+) diff --git a/cmd/safcm/sync_test.go b/cmd/safcm/sync_test.go index 4616f71..2e5b3ab 100644 --- a/cmd/safcm/sync_test.go +++ b/cmd/safcm/sync_test.go @@ -16,11 +16,15 @@ package main import ( + "bytes" "fmt" + "log" "os" "testing" + "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/cmd/safcm/config" + "ruderich.org/simon/safcm/rpc" "ruderich.org/simon/safcm/testutil" ) @@ -171,3 +175,354 @@ func TestHostsToSync(t *testing.T) { }) } } + +func TestLogEvent(t *testing.T) { + // Restore default logger + defer log.SetFlags(log.Flags()) + defer log.SetOutput(os.Stderr) + + tests := []struct { + name string + event Event + level safcm.LogLevel + isTTY bool + exp string + expFailed bool + }{ + + { + "Error", + Event{ + Error: fmt.Errorf("fake error"), + }, + safcm.LogDebug3, + false, + "[error] [fake-host] fake error\n", + true, + }, + { + "Error (tty)", + Event{ + Error: fmt.Errorf("fake error"), + }, + safcm.LogDebug3, + true, + "[error] [\x1b[31mfake-host\x1b[0m] fake error\n", + true, + }, + { + "Error: escape", + Event{ + Error: fmt.Errorf("\x00"), + }, + safcm.LogDebug3, + false, + "[error] [fake-host] \\x00\n", + true, + }, + { + "Error: escape (tty)", + Event{ + Error: fmt.Errorf("\x00"), + }, + safcm.LogDebug3, + true, + "[error] [\x1b[31mfake-host\x1b[0m] \x1b[35m\\x00\x1b[0m\n", + true, + }, + + { + "Log: info", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "info log", + }, + }, + safcm.LogDebug3, + false, + "[info] [fake-host] info log\n", + false, + }, + { + "Log: info (tty)", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "info log", + }, + }, + safcm.LogDebug3, + true, + "[info] [fake-host] info log\n", + false, + }, + { + "Log: verbose", + Event{ + Log: Log{ + Level: safcm.LogVerbose, + Text: "verbose log", + }, + }, + safcm.LogDebug3, + false, + "[verbose] [fake-host] verbose log\n", + false, + }, + { + "Log: debug", + Event{ + Log: Log{ + Level: safcm.LogDebug, + Text: "debug log", + }, + }, + safcm.LogDebug3, + false, + "[debug] [fake-host] debug log\n", + false, + }, + { + "Log: debug2", + Event{ + Log: Log{ + Level: safcm.LogDebug2, + Text: "debug2 log", + }, + }, + safcm.LogDebug3, + false, + "[debug2] [fake-host] debug2 log\n", + false, + }, + { + "Log: debug3", + Event{ + Log: Log{ + Level: safcm.LogDebug3, + Text: "debug3 log", + }, + }, + safcm.LogDebug3, + false, + fmt.Sprintf("[INVALID=%d] [fake-host] debug3 log\n", + safcm.LogDebug3), + false, + }, + { + "Log: debug3 (tty)", + Event{ + Log: Log{ + Level: safcm.LogDebug3, + Text: "debug3 log", + }, + }, + safcm.LogDebug3, + true, + fmt.Sprintf("[INVALID=%d] [\x1b[31mfake-host\x1b[0m] debug3 log\n", + safcm.LogDebug3), + false, + }, + { + "Log: escape", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "\x00", + }, + }, + safcm.LogDebug3, + false, + "[info] [fake-host] \\x00\n", + false, + }, + { + "Log: escape (tty)", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "\x00", + }, + }, + safcm.LogDebug3, + true, + "[info] [fake-host] \x1b[35m\\x00\x1b[0m\n", + false, + }, + + { + "ConnEvent: stderr", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventStderr, + Data: "fake stderr", + }, + }, + safcm.LogDebug3, + false, + "[stderr] [fake-host] fake stderr\n", + false, + }, + { + "ConnEvent: stderr (tty)", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventStderr, + Data: "fake stderr", + }, + }, + safcm.LogDebug3, + true, + "[stderr] [fake-host] fake stderr\n", + false, + }, + { + "ConnEvent: debug", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventDebug, + Data: "conn debug", + }, + }, + safcm.LogDebug3, + false, + "[debug3] [fake-host] conn debug\n", + false, + }, + { + "ConnEvent: upload", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventUpload, + }, + }, + safcm.LogDebug3, + false, + "[info] [fake-host] remote helper upload in progress\n", + false, + }, + { + "ConnEvent: upload (ignored)", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventUpload, + }, + }, + safcm.LogError, + false, + "", + false, + }, + { + "ConnEvent: invalid", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: 42, + Data: "invalid", + }, + }, + safcm.LogError, + false, + "[INVALID=42] [fake-host] invalid\n", + false, + }, + { + "ConnEvent: invalid (tty)", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: 42, + Data: "invalid", + }, + }, + safcm.LogError, + true, + "[INVALID=42] [\x1b[31mfake-host\x1b[0m] invalid\n", + false, + }, + { + "ConnEvent: escape", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventStderr, + Data: "\x00", + }, + }, + safcm.LogDebug3, + false, + "[stderr] [fake-host] \\x00\n", + false, + }, + { + "ConnEvent: escape (tty)", + Event{ + ConnEvent: rpc.ConnEvent{ + Type: rpc.ConnEventDebug, + Data: "\x01", + }, + }, + safcm.LogDebug3, + true, + "[debug3] [fake-host] \x1b[35m\\x01\x1b[0m\n", + false, + }, + + { + "Escaped", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "\x00", + }, + Escaped: true, + }, + safcm.LogDebug3, + false, + "[info] [fake-host] \x00\n", + false, + }, + { + "Escaped (tty)", + Event{ + Log: Log{ + Level: safcm.LogInfo, + Text: "\x00", + }, + Escaped: true, + }, + safcm.LogDebug3, + true, + "[info] [fake-host] \x00\n", + false, + }, + + { + "empty (invalid)", + Event{}, + safcm.LogDebug3, + false, + "[INVALID=0] [fake-host] \n", + false, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + tc.event.Host = &config.Host{ + Name: "fake-host", + } + + var buf bytes.Buffer + log.SetFlags(0) + log.SetOutput(&buf) + + var failed bool + logEvent(tc.event, tc.level, tc.isTTY, &failed) + + testutil.AssertEqual(t, "log", + buf.String(), tc.exp) + testutil.AssertEqual(t, "failed", + failed, tc.expFailed) + }) + } +} -- 2.45.2