]> ruderich.org/simon Gitweb - safcm/safcm.git/commitdiff
tests: add end-to-end test with configuration without any changes
authorSimon Ruderich <simon@ruderich.org>
Wed, 28 Apr 2021 10:29:50 +0000 (12:29 +0200)
committerSimon Ruderich <simon@ruderich.org>
Wed, 28 Apr 2021 10:31:35 +0000 (12:31 +0200)
.gitignore
Makefile
cmd/safcm-remote/sync/filetest/filetest.go
cmd/safcm/main_sync_test.go
cmd/safcm/testdata/ssh/project/hosts.yaml
cmd/safcm/testdata/ssh/ssh/ssh_config

index 37a596ec7e174cad786d40f33a8a6edfadd7c38f..139f3d5e8fb195a44c4005477567864350baeb08 100644 (file)
@@ -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
index 17f12134ad9b492be50dd9499656428c95327db9..95cc9c86278b87d59d4b36ababfd3b685acb2753 100644 (file)
--- 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
index 6a594e6ac37b13b0d77c87048ab0e86243293bbd..794e99c88b8a1f5ed03d06fc3e8ec59394f283f6 100644 (file)
@@ -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 {
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,
                },
index b6a0dce4566c0af805704a85e48b5b9db452024f..633da2ca2c0641b6cc9cc6f6c2d409bcb20dc5ae 100644 (file)
@@ -1 +1,2 @@
 - name: no-settings.example.org
+- name: no-changes.example.org
index 77f6fd5ed9922e12f936a4120e2e56b8a4bd47d4..e9fe50472fa3848b81111cffca40c0b3bae059f8 100644 (file)
@@ -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