]> ruderich.org/simon Gitweb - safcm/safcm.git/commitdiff
safcm: add tests for logEvent()
authorSimon Ruderich <simon@ruderich.org>
Tue, 6 Apr 2021 09:27:32 +0000 (11:27 +0200)
committerSimon Ruderich <simon@ruderich.org>
Wed, 7 Apr 2021 05:48:14 +0000 (07:48 +0200)
cmd/safcm/sync_test.go

index 4616f716a28d75f5967e3654b02f2ede81331c84..2e5b3ab95106710d84ff2bdcdbacdb891b22a0a7 100644 (file)
 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)
+               })
+       }
+}