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 = "${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";
- machine = "${configuration}";
+ nodes = {
+ a = "${initialConfiguration}";
+ b = "${initialConfiguration}";
+ };
testScript = ''
- machine.copy_from_host(
- "${configuration}",
- "/etc/nixos/configuration.nix",
- )
- machine.wait_for_unit("syncthing-autoregister.service")
- machine.succeed(
- '(( "$(nix eval --raw -f /tmp/syncthing-auto-register-test-device-ids.nix services.syncthing.declarative.devices.machine.id | wc -c)" == 63 ))'
+ 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 "<nixos/nixos>" 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")
'';
})