From: Scott Worley Date: Wed, 29 Jul 2020 23:41:10 +0000 (-0700) Subject: Verify files sync after "nixos-rebuild switch" X-Git-Url: http://git.scottworley.com/syncthing-autoregister/commitdiff_plain/0043dc6823fd9acc5199976084507feb564f4ff0 Verify files sync after "nixos-rebuild switch" --- diff --git a/lib/test-nixos-rebuild-switch-config.nix b/lib/test-nixos-rebuild-switch-config.nix new file mode 100644 index 0000000..a31a39e --- /dev/null +++ b/lib/test-nixos-rebuild-switch-config.nix @@ -0,0 +1,38 @@ +{ lib, pkgs, ... }: { + imports = [ + + + + + ]; + + nix.binaryCaches = lib.mkForce [ ]; + nix.extraOptions = '' + hashed-mirrors = + connect-timeout = 1 + ''; + + system.extraDependencies = with pkgs; [ + # List of packages from installer test + curl # To diagnose fetch requests + desktop-file-utils + docbook5 + docbook_xsl_ns + grub + libxml2.bin + libxslt.bin + nixos-artwork.wallpapers.simple-dark-gray-bottom + ntp + perlPackages.ListCompare + perlPackages.XMLLibXML + shared-mime-info + stdenvNoCC + sudo + texinfo + unionfs-fuse + xorg.lndir + ]; + + # Don't try to install bootloaders in a VM + boot.loader.grub.devices = lib.mkForce [ "nodev" ]; +} diff --git a/tests/automatic-enrollment.nix b/tests/automatic-enrollment.nix index 617f672..184bcc7 100644 --- a/tests/automatic-enrollment.nix +++ b/tests/automatic-enrollment.nix @@ -1,11 +1,11 @@ import ({ pkgs, lib, ... }: let deviceIDFilename = "/tmp/syncthing-auto-register-test-device-ids.nix"; - configuration = pkgs.writeText "configuration.nix" '' + vmConfiguration = pkgs.writeText "vm-configuration.nix" '' { pkgs, ... }: { imports = [ + ${../.}/lib/test-nixos-rebuild-switch-config.nix ${../.}/modules/syncthing-autoregister.nix - ]; services.syncthing = { enable = true; @@ -15,37 +15,76 @@ import ({ pkgs, lib, ... }: path = "${deviceIDFilename}"; }; }; + + # For verifyDeviceIDSet() environment.systemPackages = with pkgs; [ nix ]; } ''; - initialConfiguration = pkgs.writeText "initial-configuration.nix" '' - { - imports = [ "${configuration}" ]; + + evaluatedVMConfiguration = import { + system = builtins.currentSystem; + modules = [ "${vmConfiguration}" ]; + }; + + # Also include a syncthing configuration with a declarative device id + # because using this feature pulls in additional dependencies. + evaluatedSyncthingDeclarativeConfiguration = import { + system = builtins.currentSystem; + modules = [ + ../lib/test-nixos-rebuild-switch-config.nix + { + services.syncthing = { + enable = true; + declarative.folders.forDeps.path = "/nope"; + }; + } + ]; + }; + + initialConfiguration = { + imports = [ "${vmConfiguration}" ]; + virtualisation.memorySize = 2048; system.activationScripts.installInitialConfiguration = { - text = ''' + text = '' mkdir -p /etc/nixos - cp "${configuration}" /etc/nixos/configuration.nix - '''; + cp "${vmConfiguration}" /etc/nixos/configuration.nix + ''; deps = [ ]; }; - } - ''; + system.extraDependencies = [ + evaluatedVMConfiguration.config.system.build.toplevel + evaluatedSyncthingDeclarativeConfiguration.config.system.build.toplevel + ]; + }; + configurationWithDeviceIDs = pkgs.writeText "configuration-with-device-ids.nix" '' { imports = [ - ${configuration} + ${vmConfiguration} ${deviceIDFilename} ]; } ''; + + configurationWithFolder = + pkgs.writeText "configuration-with-folder.nix" '' + { config, ... }: { + imports = [ ${configurationWithDeviceIDs} ]; + services.syncthing.declarative.folders.foo = { + devices = [ "a" "b" ]; + path = "''${config.services.syncthing.dataDir}/foo"; + }; + } + ''; + in { name = "syncthing"; nodes = { - a = "${initialConfiguration}"; - b = "${initialConfiguration}"; + a = initialConfiguration; + b = initialConfiguration; }; testScript = '' @@ -81,6 +120,9 @@ import ({ pkgs, lib, ... }: configurationWithDeviceIDs = ( "${configurationWithDeviceIDs}" ) + configurationWithFolder = ( + "${configurationWithFolder}" + ) start_all() a.wait_for_unit("syncthing-autoregister.service") @@ -93,5 +135,18 @@ import ({ pkgs, lib, ... }: setConfig(b, configurationWithDeviceIDs) verifyDeviceIDSet(b, "a") verifyDeviceIDSet(b, "b") + + getDeviceFile(b) + putDeviceFile(a) + setConfig(a, configurationWithFolder) + setConfig(b, configurationWithFolder) + a.succeed("nixos-rebuild switch") + b.succeed("nixos-rebuild switch") + a.wait_for_file("/var/lib/syncthing/foo") + b.wait_for_file("/var/lib/syncthing/foo") + a.succeed("echo a2b > /var/lib/syncthing/foo/a2b") + b.succeed("echo b2a > /var/lib/syncthing/foo/b2a") + a.wait_for_file("/var/lib/syncthing/foo/b2a") + b.wait_for_file("/var/lib/syncthing/foo/a2b") ''; })