--- /dev/null
+{ lib, pkgs, ... }: {
+ imports = [
+ <nixos/nixos/modules/installer/cd-dvd/channel.nix>
+ <nixos/nixos/modules/profiles/base.nix>
+ <nixos/nixos/modules/testing/test-instrumentation.nix>
+ <nixos/nixos/modules/virtualisation/qemu-vm.nix>
+ ];
+
+ nix.binaryCaches = lib.mkForce [ ];
+ nix.extraOptions = ''
+ hashed-mirrors =
+ connect-timeout = 1
+ '';
+
+ system.extraDependencies = with pkgs; [
+ # List of packages from installer test
+ curl # To diagnose fetch requests
+ desktop-file-utils
+ docbook5
+ docbook_xsl_ns
+ grub
+ libxml2.bin
+ libxslt.bin
+ nixos-artwork.wallpapers.simple-dark-gray-bottom
+ ntp
+ perlPackages.ListCompare
+ perlPackages.XMLLibXML
+ shared-mime-info
+ stdenvNoCC
+ sudo
+ texinfo
+ unionfs-fuse
+ xorg.lndir
+ ];
+
+ # Don't try to install bootloaders in a VM
+ boot.loader.grub.devices = lib.mkForce [ "nodev" ];
+}
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" ''
+ vmConfiguration = pkgs.writeText "vm-configuration.nix" ''
{ pkgs, ... }: {
imports = [
+ ${../.}/lib/test-nixos-rebuild-switch-config.nix
${../.}/modules/syncthing-autoregister.nix
- <nixos/nixos/modules/installer/cd-dvd/channel.nix>
];
services.syncthing = {
enable = true;
path = "${deviceIDFilename}";
};
};
+
+ # For verifyDeviceIDSet()
environment.systemPackages = with pkgs; [ nix ];
}
'';
- initialConfiguration = pkgs.writeText "initial-configuration.nix" ''
- {
- imports = [ "${configuration}" ];
+
+ evaluatedVMConfiguration = import <nixos/nixos/lib/eval-config.nix> {
+ system = builtins.currentSystem;
+ modules = [ "${vmConfiguration}" ];
+ };
+
+ # Also include a syncthing configuration with a declarative device id
+ # because using this feature pulls in additional dependencies.
+ evaluatedSyncthingDeclarativeConfiguration = import <nixos/nixos/lib/eval-config.nix> {
+ system = builtins.currentSystem;
+ modules = [
+ ../lib/test-nixos-rebuild-switch-config.nix
+ {
+ services.syncthing = {
+ enable = true;
+ declarative.folders.forDeps.path = "/nope";
+ };
+ }
+ ];
+ };
+
+ initialConfiguration = {
+ imports = [ "${vmConfiguration}" ];
+ virtualisation.memorySize = 2048;
system.activationScripts.installInitialConfiguration = {
- text = '''
+ text = ''
mkdir -p /etc/nixos
- cp "${configuration}" /etc/nixos/configuration.nix
- ''';
+ cp "${vmConfiguration}" /etc/nixos/configuration.nix
+ '';
deps = [ ];
};
- }
- '';
+ system.extraDependencies = [
+ evaluatedVMConfiguration.config.system.build.toplevel
+ evaluatedSyncthingDeclarativeConfiguration.config.system.build.toplevel
+ ];
+ };
+
configurationWithDeviceIDs =
pkgs.writeText "configuration-with-device-ids.nix" ''
{
imports = [
- ${configuration}
+ ${vmConfiguration}
${deviceIDFilename}
];
}
'';
+
+ configurationWithFolder =
+ pkgs.writeText "configuration-with-folder.nix" ''
+ { config, ... }: {
+ imports = [ ${configurationWithDeviceIDs} ];
+ services.syncthing.declarative.folders.foo = {
+ devices = [ "a" "b" ];
+ path = "''${config.services.syncthing.dataDir}/foo";
+ };
+ }
+ '';
+
in {
name = "syncthing";
nodes = {
- a = "${initialConfiguration}";
- b = "${initialConfiguration}";
+ a = initialConfiguration;
+ b = initialConfiguration;
};
testScript = ''
configurationWithDeviceIDs = (
"${configurationWithDeviceIDs}"
)
+ configurationWithFolder = (
+ "${configurationWithFolder}"
+ )
start_all()
a.wait_for_unit("syncthing-autoregister.service")
setConfig(b, configurationWithDeviceIDs)
verifyDeviceIDSet(b, "a")
verifyDeviceIDSet(b, "b")
+
+ getDeviceFile(b)
+ putDeviceFile(a)
+ setConfig(a, configurationWithFolder)
+ setConfig(b, configurationWithFolder)
+ a.succeed("nixos-rebuild switch")
+ b.succeed("nixos-rebuild switch")
+ a.wait_for_file("/var/lib/syncthing/foo")
+ b.wait_for_file("/var/lib/syncthing/foo")
+ a.succeed("echo a2b > /var/lib/syncthing/foo/a2b")
+ b.succeed("echo b2a > /var/lib/syncthing/foo/b2a")
+ a.wait_for_file("/var/lib/syncthing/foo/b2a")
+ b.wait_for_file("/var/lib/syncthing/foo/a2b")
'';
})