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 ) configurationWithDeviceIDs = ( "${configurationWithDeviceIDs}" ) a.wait_for_unit("syncthing-autoregister.service") setConfig(a, configurationWithDeviceIDs) verifyDeviceIDSet(a, "a") a.copy_from_vm("${deviceIDFilename}") b.copy_from_host( os.path.join( os.environ["out"], os.path.basename("${deviceIDFilename}"), ), "${deviceIDFilename}", ) b.succeed("chown syncthing ${deviceIDFilename}") setConfig(b, configurationWithDeviceIDs) verifyDeviceIDSet(b, "a") ''; })