import <nixpkgs/nixos/tests/make-test-python.nix> ({ pkgs, lib, ... }:
let
+ deviceIDFilename = "/tmp/syncthing-auto-register-test-device-ids.nix";
configuration = pkgs.writeText "configuration.nix" ''
{ pkgs, ... }: {
imports = [
openDefaultPorts = true;
autoRegister = {
enable = true;
- path = "/tmp/syncthing-auto-register-test-device-ids.nix";
+ 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}
- /tmp/syncthing-auto-register-test-device-ids.nix
+ ${deviceIDFilename}
];
}
'';
name = "syncthing";
nodes = {
- a = "${configuration}";
- b = "${configuration}";
+ a = "${initialConfiguration}";
+ b = "${initialConfiguration}";
};
testScript = ''
+ import os
+
+
def setConfig(machine, config):
machine.copy_from_host(config, "/etc/nixos/configuration.nix")
)
- initialConfiguration = "${configuration}"
+ 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}"
)
- setConfig(a, initialConfiguration)
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")
'';
})