import ({ pkgs, lib, ... }: let deviceIDFilename = "/tmp/syncthing-auto-register-test-device-ids.nix"; configuration = pkgs.writeText "configuration.nix" '' { pkgs, ... }: { imports = [ ${../.}/modules/syncthing-autoregister.nix ]; services.syncthing = { enable = true; openDefaultPorts = true; autoRegister = { enable = true; path = "${deviceIDFilename}"; }; }; environment.systemPackages = with pkgs; [ nix ]; } ''; initialConfiguration = pkgs.writeText "initial-configuration.nix" '' { imports = [ "${configuration}" ]; system.activationScripts.installInitialConfiguration = { text = ''' mkdir -p /etc/nixos cp "${configuration}" /etc/nixos/configuration.nix '''; deps = [ ]; }; } ''; configurationWithDeviceIDs = pkgs.writeText "configuration-with-device-ids.nix" '' { imports = [ ${configuration} ${deviceIDFilename} ]; } ''; in { name = "syncthing"; nodes = { a = "${initialConfiguration}"; b = "${initialConfiguration}"; }; testScript = '' import os def setConfig(machine, config): machine.copy_from_host(config, "/etc/nixos/configuration.nix") def verifyDeviceIDSet(machine, expectedDevice): machine.succeed( '(( "$(nix eval --raw -f "" config.services.syncthing.declarative.devices.%s.id | wc -c)" == 63 ))' % expectedDevice ) def getDeviceFile(machine): machine.copy_from_vm("${deviceIDFilename}") def putDeviceFile(machine): hostDeviceIDFilename = os.path.join( os.environ["out"], os.path.basename("${deviceIDFilename}"), ) machine.copy_from_host( hostDeviceIDFilename, "${deviceIDFilename}" ) machine.succeed("chown syncthing ${deviceIDFilename}") configurationWithDeviceIDs = ( "${configurationWithDeviceIDs}" ) a.wait_for_unit("syncthing-autoregister.service") setConfig(a, configurationWithDeviceIDs) verifyDeviceIDSet(a, "a") getDeviceFile(a) putDeviceFile(b) setConfig(b, configurationWithDeviceIDs) verifyDeviceIDSet(b, "a") b.wait_for_unit("syncthing-autoregister.service") verifyDeviceIDSet(b, "a") verifyDeviceIDSet(b, "b") ''; })