]> git.scottworley.com Git - syncthing-autoregister/blame - tests/automatic-enrollment.nix
Verify b's device ID gets set also
[syncthing-autoregister] / tests / automatic-enrollment.nix
CommitLineData
b00b144b
SW
1import <nixpkgs/nixos/tests/make-test-python.nix> ({ pkgs, lib, ... }:
2 let
e16b7079 3 deviceIDFilename = "/tmp/syncthing-auto-register-test-device-ids.nix";
b00b144b
SW
4 configuration = pkgs.writeText "configuration.nix" ''
5 { pkgs, ... }: {
6 imports = [
7 ${../.}/modules/syncthing-autoregister.nix
8 <nixos/nixos/modules/installer/cd-dvd/channel.nix>
9 ];
10 services.syncthing = {
11 enable = true;
12 openDefaultPorts = true;
7fb0951b
SW
13 autoRegister = {
14 enable = true;
e16b7079 15 path = "${deviceIDFilename}";
7fb0951b 16 };
b00b144b
SW
17 };
18 environment.systemPackages = with pkgs; [ nix ];
19 }
20 '';
2475b534
SW
21 initialConfiguration = pkgs.writeText "initial-configuration.nix" ''
22 {
23 imports = [ "${configuration}" ];
24 system.activationScripts.installInitialConfiguration = {
25 text = '''
26 mkdir -p /etc/nixos
27 cp "${configuration}" /etc/nixos/configuration.nix
28 ''';
29 deps = [ ];
30 };
31 }
32 '';
97c3aa62
SW
33 configurationWithDeviceIDs =
34 pkgs.writeText "configuration-with-device-ids.nix" ''
35 {
36 imports = [
37 ${configuration}
e16b7079 38 ${deviceIDFilename}
97c3aa62
SW
39 ];
40 }
41 '';
b00b144b
SW
42 in {
43
44 name = "syncthing";
45
cefa20b6 46 nodes = {
2475b534
SW
47 a = "${initialConfiguration}";
48 b = "${initialConfiguration}";
cefa20b6 49 };
b00b144b
SW
50
51 testScript = ''
fc02e299
SW
52 import os
53
54
97c3aa62
SW
55 def setConfig(machine, config):
56 machine.copy_from_host(config, "/etc/nixos/configuration.nix")
57
58
0a262b79
SW
59 def verifyDeviceIDSet(machine, expectedDevice):
60 machine.succeed(
61 '(( "$(nix eval --raw -f "<nixos/nixos>" config.services.syncthing.declarative.devices.%s.id | wc -c)" == 63 ))'
62 % expectedDevice
63 )
64
65
36008f17
SW
66 def getDeviceFile(machine):
67 machine.copy_from_vm("${deviceIDFilename}")
68
69
70 def putDeviceFile(machine):
71 hostDeviceIDFilename = os.path.join(
72 os.environ["out"],
73 os.path.basename("${deviceIDFilename}"),
74 )
75 machine.copy_from_host(
76 hostDeviceIDFilename, "${deviceIDFilename}"
77 )
78 machine.succeed("chown syncthing ${deviceIDFilename}")
79
80
97c3aa62
SW
81 configurationWithDeviceIDs = (
82 "${configurationWithDeviceIDs}"
b00b144b 83 )
97c3aa62 84
cefa20b6
SW
85 a.wait_for_unit("syncthing-autoregister.service")
86 setConfig(a, configurationWithDeviceIDs)
0a262b79 87 verifyDeviceIDSet(a, "a")
36008f17 88 getDeviceFile(a)
fc02e299 89
36008f17 90 putDeviceFile(b)
fc02e299
SW
91 setConfig(b, configurationWithDeviceIDs)
92 verifyDeviceIDSet(b, "a")
1d5d76e4
SW
93 b.wait_for_unit("syncthing-autoregister.service")
94 verifyDeviceIDSet(b, "a")
95 verifyDeviceIDSet(b, "b")
b00b144b
SW
96 '';
97 })