X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fmain_sync_test.go;h=8726307cba408a1002722bd2a7dc1e17d09ee524;hb=8222dd7be72bef3773eb66b04af6094e584b13fb;hp=8d702db218a3655318583864c47fd347c7eaabfe;hpb=825f928d824f728088606bcbf112d30d7a76f627;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/main_sync_test.go b/cmd/safcm/main_sync_test.go index 8d702db..8726307 100644 --- a/cmd/safcm/main_sync_test.go +++ b/cmd/safcm/main_sync_test.go @@ -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,39 +106,241 @@ func TestSyncSshEndToEnd(t *testing.T) { { "no settings", + false, true, []string{"no-settings.example.org"}, `[info] [no-settings.example.org] remote helper upload in progress +[info] [no-settings.example.org] no changes `, nil, }, { "no settings (no helper upload)", false, + false, []string{"no-settings.example.org"}, + `[info] [no-settings.example.org] no changes +`, + nil, + }, + { + "no settings (error)", + false, + true, + []string{"-log", "error", "no-settings.example.org"}, ``, nil, }, { "no settings (verbose)", + false, true, []string{"-log", "verbose", "no-settings.example.org"}, `[info] [no-settings.example.org] remote helper upload in progress [verbose] [no-settings.example.org] host groups: all no-settings.example.org -[verbose] [no-settings.example.org] host group priorities (desc. order): no-settings.example.org +[verbose] [no-settings.example.org] host group priorities (descending): no-settings.example.org +[info] [no-settings.example.org] no changes `, nil, }, { "no settings (debug2)", + false, true, []string{"-log", "debug2", "no-settings.example.org"}, `[info] [no-settings.example.org] remote helper upload in progress [verbose] [no-settings.example.org] host groups: all no-settings.example.org -[verbose] [no-settings.example.org] host group priorities (desc. order): no-settings.example.org +[verbose] [no-settings.example.org] host group priorities (descending): no-settings.example.org +[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"}, + `[info] [no-changes.example.org] remote helper upload in progress +[info] [no-changes.example.org] no changes +`, + nil, + }, + { + "no changes (dry-run, debug2)", + false, + true, + []string{"-n", "-log", "debug2", "no-changes.example.org"}, + `[info] [no-changes.example.org] remote helper upload in progress +[verbose] [no-changes.example.org] host groups: all no-changes.example.org +[verbose] [no-changes.example.org] host group priorities (descending): no-changes.example.org +[debug] [no-changes.example.org] sync remote: files: "/" (no-changes.example.org): unchanged +[debug] [no-changes.example.org] sync remote: files: "/etc" (no-changes.example.org): unchanged +[debug] [no-changes.example.org] sync remote: files: "/tmp" (no-changes.example.org): unchanged +[info] [no-changes.example.org] no changes +`, + nil, + }, + { + "no changes", + skipUnlessCiRun, + true, + []string{"no-changes.example.org"}, + `[info] [no-changes.example.org] remote helper upload in progress +[info] [no-changes.example.org] no changes +`, + nil, + }, + { + "no changes (debug2)", + skipUnlessCiRun, + true, + []string{"-log", "debug2", "no-changes.example.org"}, + `[info] [no-changes.example.org] remote helper upload in progress +[verbose] [no-changes.example.org] host groups: all no-changes.example.org +[verbose] [no-changes.example.org] host group priorities (descending): no-changes.example.org +[debug] [no-changes.example.org] sync remote: files: "/" (no-changes.example.org): unchanged +[debug] [no-changes.example.org] sync remote: files: "/etc" (no-changes.example.org): unchanged +[debug] [no-changes.example.org] sync remote: files: "/tmp" (no-changes.example.org): unchanged +[info] [no-changes.example.org] no changes +`, + nil, + }, + + { + "no effect commands (dry-run)", + false, + true, + []string{"-n", "no-effect-commands.example.org"}, + `[info] [no-effect-commands.example.org] remote helper upload in progress +[info] [no-effect-commands.example.org] +will execute 2 command(s): (dry-run) +"echo this is a command" +"true" +`, + nil, + }, + { + "no effect commands (dry-run)", + false, + true, + []string{"-n", "-log", "debug2", "no-effect-commands.example.org"}, + `[info] [no-effect-commands.example.org] remote helper upload in progress +[verbose] [no-effect-commands.example.org] host groups: all no-effect-commands.example.org +[verbose] [no-effect-commands.example.org] host group priorities (descending): no-effect-commands.example.org +[info] [no-effect-commands.example.org] +will execute 2 command(s): (dry-run) +"echo this is a command" +"true" +`, + nil, + }, + { + "no effect commands", + false, + true, + []string{"no-effect-commands.example.org"}, + `[info] [no-effect-commands.example.org] remote helper upload in progress +[info] [no-effect-commands.example.org] +executed 2 command(s): +"echo this is a command": + > this is a command +"true" `, nil, }, + { + "no effect commands (debug2)", + false, + true, + []string{"-log", "debug2", "no-effect-commands.example.org"}, + `[info] [no-effect-commands.example.org] remote helper upload in progress +[verbose] [no-effect-commands.example.org] host groups: all no-effect-commands.example.org +[verbose] [no-effect-commands.example.org] host group priorities (descending): no-effect-commands.example.org +[verbose] [no-effect-commands.example.org] sync remote: commands: running "/bin/sh" "-c" "echo this is a command" (no-effect-commands.example.org) +[debug2] [no-effect-commands.example.org] sync remote: commands: command output: +this is a command +[verbose] [no-effect-commands.example.org] sync remote: commands: running "/bin/sh" "-c" "true" (no-effect-commands.example.org) +[info] [no-effect-commands.example.org] +executed 2 command(s): +"echo this is a command": + > this is a command +"true" +`, + nil, + }, + + { + "no effect commands failing (dry-run)", + false, + true, + []string{"-n", "no-effect-commands-failing.example.org"}, + `[info] [no-effect-commands-failing.example.org] remote helper upload in progress +[info] [no-effect-commands-failing.example.org] +will execute 2 command(s): (dry-run) +"echo this is a command" +"echo failing; false" +`, + nil, + }, + { + "no effect commands failing (dry-run)", + false, + true, + []string{"-n", "-log", "debug2", "no-effect-commands-failing.example.org"}, + `[info] [no-effect-commands-failing.example.org] remote helper upload in progress +[verbose] [no-effect-commands-failing.example.org] host groups: all no-effect-commands-failing.example.org +[verbose] [no-effect-commands-failing.example.org] host group priorities (descending): no-effect-commands-failing.example.org +[info] [no-effect-commands-failing.example.org] +will execute 2 command(s): (dry-run) +"echo this is a command" +"echo failing; false" +`, + nil, + }, + { + "no effect commands failing", + false, + true, + []string{"no-effect-commands-failing.example.org"}, + `[info] [no-effect-commands-failing.example.org] remote helper upload in progress +[info] [no-effect-commands-failing.example.org] +executed 2 command(s): +"echo this is a command": + > this is a command +"echo failing; false", failed: "exit status 1": + > failing +[error] [no-effect-commands-failing.example.org] sync remote: commands: "echo failing; false" failed: exit status 1 +`, + fmt.Errorf("exit status 1"), + }, + { + "no effect commands failing (debug2)", + false, + true, + []string{"-log", "debug2", "no-effect-commands-failing.example.org"}, + `[info] [no-effect-commands-failing.example.org] remote helper upload in progress +[verbose] [no-effect-commands-failing.example.org] host groups: all no-effect-commands-failing.example.org +[verbose] [no-effect-commands-failing.example.org] host group priorities (descending): no-effect-commands-failing.example.org +[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) +[debug2] [no-effect-commands-failing.example.org] sync remote: commands: command output: +this is a command +[verbose] [no-effect-commands-failing.example.org] sync remote: commands: running "/bin/sh" "-c" "echo failing; false" (no-effect-commands-failing.example.org) +[debug2] [no-effect-commands-failing.example.org] sync remote: commands: command output: +failing +[info] [no-effect-commands-failing.example.org] +executed 2 command(s): +"echo this is a command": + > this is a command +"echo failing; false", failed: "exit status 1": + > failing +[error] [no-effect-commands-failing.example.org] sync remote: commands: "echo failing; false" failed: exit status 1 +`, + fmt.Errorf("exit status 1"), + }, } remotePath := fmt.Sprintf("/tmp/safcm-remote-%d", os.Getuid())