]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/main_sync_test.go
tests: add end-to-end test with configuration without any changes
[safcm/safcm.git] / cmd / safcm / main_sync_test.go
index ad4acac9c823f2da1a68eb7a6d189b19dc233747..1f53e4b338902d8f243053752a852d4b1929cc5a 100644 (file)
@@ -26,6 +26,7 @@ import (
        "testing"
        "time"
 
+       ft "ruderich.org/simon/safcm/cmd/safcm-remote/sync/filetest"
        "ruderich.org/simon/safcm/testutil"
 )
 
@@ -72,8 +73,31 @@ func TestSyncSshEndToEnd(t *testing.T) {
                t.Fatal(err)
        }
 
+       ft.CreateDirectoryExists("no-changes.example.org", 0755)
+       ft.CreateDirectoryExists("no-changes.example.org/files", 0755)
+       ft.CreateDirectoryExists("no-changes.example.org/files/etc", 0755)
+       ft.CreateDirectoryExists("no-changes.example.org/files/tmp", 0755)
+
+       noChangePermissions := `
+/: 0755 root root
+/etc: 0755 root root
+/tmp: 1777 root root
+`
+       if runtime.GOOS == "openbsd" || runtime.GOOS == "freebsd" {
+               noChangePermissions = `
+/: 0755 root wheel
+/etc: 0755 root wheel
+/tmp: 1777 root wheel
+`
+       }
+       ft.CreateFile("no-changes.example.org/permissions.yaml",
+               noChangePermissions, 0644)
+
+       skipUnlessCiRun := len(os.Getenv("SAFCM_CI_RUN")) == 0
+
        tests := []struct {
                name   string
+               skip   bool
                remove bool
                args   []string
                exp    string
@@ -82,6 +106,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
 
                {
                        "no settings",
+                       false,
                        true,
                        []string{"no-settings.example.org"},
                        `<LOG>[info]    [no-settings.example.org] remote helper upload in progress
@@ -92,6 +117,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
                {
                        "no settings (no helper upload)",
                        false,
+                       false,
                        []string{"no-settings.example.org"},
                        `<LOG>[info]    [no-settings.example.org] no changes
 `,
@@ -99,6 +125,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
                },
                {
                        "no settings (error)",
+                       false,
                        true,
                        []string{"-log", "error", "no-settings.example.org"},
                        ``,
@@ -106,6 +133,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
                },
                {
                        "no settings (verbose)",
+                       false,
                        true,
                        []string{"-log", "verbose", "no-settings.example.org"},
                        `<LOG>[info]    [no-settings.example.org] remote helper upload in progress
@@ -117,12 +145,68 @@ func TestSyncSshEndToEnd(t *testing.T) {
                },
                {
                        "no settings (debug2)",
+                       false,
                        true,
                        []string{"-log", "debug2", "no-settings.example.org"},
                        `<LOG>[info]    [no-settings.example.org] remote helper upload in progress
 <LOG>[verbose] [no-settings.example.org] host groups: all <DET> <DET> no-settings.example.org
 <LOG>[verbose] [no-settings.example.org] host group priorities (descending): no-settings.example.org
 <LOG>[info]    [no-settings.example.org] no changes
+`,
+                       nil,
+               },
+
+               // NOTE: We use -n on regular runs to prevent changing
+               // anything important on the host when running as root!
+
+               {
+                       "no changes (dry-run)",
+                       false,
+                       true,
+                       []string{"-n", "no-changes.example.org"},
+                       `<LOG>[info]    [no-changes.example.org] remote helper upload in progress
+<LOG>[info]    [no-changes.example.org] no changes
+`,
+                       nil,
+               },
+               {
+                       "no changes (dry-run, debug2)",
+                       false,
+                       true,
+                       []string{"-n", "-log", "debug2", "no-changes.example.org"},
+                       `<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>[info]    [no-changes.example.org] no changes
+`,
+                       nil,
+               },
+
+               {
+                       "no changes",
+                       skipUnlessCiRun,
+                       true,
+                       []string{"no-changes.example.org"},
+                       `<LOG>[info]    [no-changes.example.org] remote helper upload in progress
+<LOG>[info]    [no-changes.example.org] no changes
+`,
+                       nil,
+               },
+               {
+                       "no changes (debug2)",
+                       skipUnlessCiRun,
+                       true,
+                       []string{"-log", "debug2", "no-changes.example.org"},
+                       `<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>[info]    [no-changes.example.org] no changes
 `,
                        nil,
                },