]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/main_sync_test.go
safcm: don't hang on error before a connection is established
[safcm/safcm.git] / cmd / safcm / main_sync_test.go
index 0b54aeffc54d14dd72de424d9769b921df2548d0..fdbe98fba8764565551f7d4e8845789957c12db4 100644 (file)
@@ -177,9 +177,9 @@ func TestSyncSshEndToEnd(t *testing.T) {
                        `<LOG>[info]    [no-changes.example.org] remote helper upload in progress
 <LOG>[verbose] [no-changes.example.org] host groups: all <DET> <DET> no-changes.example.org
 <LOG>[verbose] [no-changes.example.org] host group priorities (descending): no-changes.example.org
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/" (no-changes.example.org): unchanged
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/etc" (no-changes.example.org): unchanged
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/tmp" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/etc" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/tmp" (no-changes.example.org): unchanged
 <LOG>[info]    [no-changes.example.org] no changes
 `,
                        nil,
@@ -202,9 +202,9 @@ func TestSyncSshEndToEnd(t *testing.T) {
                        `<LOG>[info]    [no-changes.example.org] remote helper upload in progress
 <LOG>[verbose] [no-changes.example.org] host groups: all <DET> <DET> no-changes.example.org
 <LOG>[verbose] [no-changes.example.org] host group priorities (descending): no-changes.example.org
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/" (no-changes.example.org): unchanged
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/etc" (no-changes.example.org): unchanged
-<LOG>[debug]   [no-changes.example.org] sync remote: files: "/tmp" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/etc" (no-changes.example.org): unchanged
+<LOG>[debug]   [no-changes.example.org] files: "/tmp" (no-changes.example.org): unchanged
 <LOG>[info]    [no-changes.example.org] no changes
 `,
                        nil,
@@ -217,7 +217,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
                        []string{"-n", "no-effect-commands.example.org"},
                        `<LOG>[info]    [no-effect-commands.example.org] remote helper upload in progress
 <LOG>[info]    [no-effect-commands.example.org] 
-executed 2 command(s): (dry-run)
+will execute 2 command(s): (dry-run)
 "echo this is a command"
 "true"
 `,
@@ -232,7 +232,7 @@ executed 2 command(s): (dry-run)
 <LOG>[verbose] [no-effect-commands.example.org] host groups: all <DET> <DET> no-effect-commands.example.org
 <LOG>[verbose] [no-effect-commands.example.org] host group priorities (descending): no-effect-commands.example.org
 <LOG>[info]    [no-effect-commands.example.org] 
-executed 2 command(s): (dry-run)
+will execute 2 command(s): (dry-run)
 "echo this is a command"
 "true"
 `,
@@ -260,10 +260,10 @@ executed 2 command(s):
                        `<LOG>[info]    [no-effect-commands.example.org] remote helper upload in progress
 <LOG>[verbose] [no-effect-commands.example.org] host groups: all <DET> <DET> no-effect-commands.example.org
 <LOG>[verbose] [no-effect-commands.example.org] host group priorities (descending): no-effect-commands.example.org
-<LOG>[verbose] [no-effect-commands.example.org] sync remote: commands: running "/bin/sh" "-c" "echo this is a command" (no-effect-commands.example.org)
-<LOG>[debug2]  [no-effect-commands.example.org] sync remote: commands: command output:
+<LOG>[verbose] [no-effect-commands.example.org] commands: running "/bin/sh" "-c" "echo this is a command" (no-effect-commands.example.org)
+<LOG>[debug2]  [no-effect-commands.example.org] commands: command output:
 this is a command
-<LOG>[verbose] [no-effect-commands.example.org] sync remote: commands: running "/bin/sh" "-c" "true" (no-effect-commands.example.org)
+<LOG>[verbose] [no-effect-commands.example.org] commands: running "/bin/sh" "-c" "true" (no-effect-commands.example.org)
 <LOG>[info]    [no-effect-commands.example.org] 
 executed 2 command(s):
 "echo this is a command":
@@ -280,7 +280,7 @@ executed 2 command(s):
                        []string{"-n", "no-effect-commands-failing.example.org"},
                        `<LOG>[info]    [no-effect-commands-failing.example.org] remote helper upload in progress
 <LOG>[info]    [no-effect-commands-failing.example.org] 
-executed 2 command(s): (dry-run)
+will execute 2 command(s): (dry-run)
 "echo this is a command"
 "echo failing; false"
 `,
@@ -295,7 +295,7 @@ executed 2 command(s): (dry-run)
 <LOG>[verbose] [no-effect-commands-failing.example.org] host groups: all <DET> <DET> no-effect-commands-failing.example.org
 <LOG>[verbose] [no-effect-commands-failing.example.org] host group priorities (descending): no-effect-commands-failing.example.org
 <LOG>[info]    [no-effect-commands-failing.example.org] 
-executed 2 command(s): (dry-run)
+will execute 2 command(s): (dry-run)
 "echo this is a command"
 "echo failing; false"
 `,
@@ -313,7 +313,7 @@ executed 2 command(s):
    > this is a command
 "echo failing; false", failed: "exit status 1":
    > failing
-<LOG>[error]   [no-effect-commands-failing.example.org] sync remote: commands: "echo failing; false" failed: exit status 1
+<LOG>[error]   [no-effect-commands-failing.example.org] commands: "echo failing; false" failed: exit status 1
 `,
                        fmt.Errorf("exit status 1"),
                },
@@ -325,11 +325,11 @@ executed 2 command(s):
                        `<LOG>[info]    [no-effect-commands-failing.example.org] remote helper upload in progress
 <LOG>[verbose] [no-effect-commands-failing.example.org] host groups: all <DET> <DET> no-effect-commands-failing.example.org
 <LOG>[verbose] [no-effect-commands-failing.example.org] host group priorities (descending): no-effect-commands-failing.example.org
-<LOG>[verbose] [no-effect-commands-failing.example.org] sync remote: commands: running "/bin/sh" "-c" "echo this is a command" (no-effect-commands-failing.example.org)
-<LOG>[debug2]  [no-effect-commands-failing.example.org] sync remote: commands: command output:
+<LOG>[verbose] [no-effect-commands-failing.example.org] commands: running "/bin/sh" "-c" "echo this is a command" (no-effect-commands-failing.example.org)
+<LOG>[debug2]  [no-effect-commands-failing.example.org] commands: command output:
 this is a command
-<LOG>[verbose] [no-effect-commands-failing.example.org] sync remote: commands: running "/bin/sh" "-c" "echo failing; false" (no-effect-commands-failing.example.org)
-<LOG>[debug2]  [no-effect-commands-failing.example.org] sync remote: commands: command output:
+<LOG>[verbose] [no-effect-commands-failing.example.org] commands: running "/bin/sh" "-c" "echo failing; false" (no-effect-commands-failing.example.org)
+<LOG>[debug2]  [no-effect-commands-failing.example.org] commands: command output:
 failing
 <LOG>[info]    [no-effect-commands-failing.example.org] 
 executed 2 command(s):
@@ -337,7 +337,7 @@ executed 2 command(s):
    > this is a command
 "echo failing; false", failed: "exit status 1":
    > failing
-<LOG>[error]   [no-effect-commands-failing.example.org] sync remote: commands: "echo failing; false" failed: exit status 1
+<LOG>[error]   [no-effect-commands-failing.example.org] commands: "echo failing; false" failed: exit status 1
 `,
                        fmt.Errorf("exit status 1"),
                },
@@ -348,6 +348,20 @@ executed 2 command(s):
        logRegexp := regexp.MustCompile(`^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} `)
        detectedRegexp := regexp.MustCompile(`detected_\S+`)
 
+       t.Run("error before connection is established", func(t *testing.T) {
+               // Fake $PATH so safcm cannot find the `ssh` binary.
+               path := os.Getenv("PATH")
+               os.Setenv("PATH", "")
+               defer os.Setenv("PATH", path)
+
+               cmd := exec.Command("../../../../../safcm",
+                       "sync", "-n", "no-settings.example.org")
+               _, err := cmd.CombinedOutput()
+               if err == nil {
+                       t.Errorf("err = nil")
+               }
+       })
+
        for _, tc := range tests {
                t.Run(tc.name, func(t *testing.T) {
                        if tc.remove {