From 79a01721cf86d424dbf76ce91d8fa66fbff2f480 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Wed, 28 Apr 2021 12:29:50 +0200 Subject: [PATCH] tests: add end-to-end test with configuration without any changes --- .gitignore | 1 + Makefile | 1 + cmd/safcm-remote/sync/filetest/filetest.go | 11 +++ cmd/safcm/main_sync_test.go | 84 ++++++++++++++++++++++ cmd/safcm/testdata/ssh/project/hosts.yaml | 1 + cmd/safcm/testdata/ssh/ssh/ssh_config | 2 +- 6 files changed, 99 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 37a596e..139f3d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/cmd/safcm/testdata/ssh/project/no-changes.example.org/ /cmd/safcm/testdata/ssh/ssh/authorized_keys /cmd/safcm/testdata/ssh/ssh/id_ed25519 /cmd/safcm/testdata/ssh/ssh/id_ed25519.pub diff --git a/Makefile b/Makefile index 17f1213..95cc9c8 100644 --- a/Makefile +++ b/Makefile @@ -30,5 +30,6 @@ clean: rm -f cmd/safcm/testdata/ssh/ssh/known_hosts rm -f cmd/safcm/testdata/ssh/sshd/ssh_host_key rm -f cmd/safcm/testdata/ssh/sshd/ssh_host_key.pub + rm -rf cmd/safcm/testdata/ssh/project/no-changes.example.org/ .PHONY: all test clean safcm diff --git a/cmd/safcm-remote/sync/filetest/filetest.go b/cmd/safcm-remote/sync/filetest/filetest.go index 6a594e6..794e99c 100644 --- a/cmd/safcm-remote/sync/filetest/filetest.go +++ b/cmd/safcm-remote/sync/filetest/filetest.go @@ -123,6 +123,17 @@ func CreateDirectory(path string, mode fs.FileMode) { } } +func CreateDirectoryExists(path string, mode fs.FileMode) { + err := os.Mkdir(path, 0700) + if err != nil && !os.IsExist(err) { + panic(err) + } + err = os.Chmod(path, mode) + if err != nil { + panic(err) + } +} + func CreateFifo(path string, mode fs.FileMode) { err := syscall.Mkfifo(path, 0600) if err != nil { diff --git a/cmd/safcm/main_sync_test.go b/cmd/safcm/main_sync_test.go index ad4acac..1f53e4b 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,6 +106,7 @@ func TestSyncSshEndToEnd(t *testing.T) { { "no settings", + false, true, []string{"no-settings.example.org"}, `[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"}, `[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"}, `[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"}, `[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 (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, }, diff --git a/cmd/safcm/testdata/ssh/project/hosts.yaml b/cmd/safcm/testdata/ssh/project/hosts.yaml index b6a0dce..633da2c 100644 --- a/cmd/safcm/testdata/ssh/project/hosts.yaml +++ b/cmd/safcm/testdata/ssh/project/hosts.yaml @@ -1 +1,2 @@ - name: no-settings.example.org +- name: no-changes.example.org diff --git a/cmd/safcm/testdata/ssh/ssh/ssh_config b/cmd/safcm/testdata/ssh/ssh/ssh_config index 77f6fd5..e9fe504 100644 --- a/cmd/safcm/testdata/ssh/ssh/ssh_config +++ b/cmd/safcm/testdata/ssh/ssh/ssh_config @@ -2,6 +2,6 @@ IdentityFile ../ssh/id_ed25519 IdentitiesOnly yes UserKnownHostsFile ../ssh/known_hosts -Host no-settings.example.org +Host no-settings.example.org no-changes.example.org Hostname 127.0.0.1 Port 29327 -- 2.43.2