{ name = "syncthing"; clan = { # test.useContainers = false; directory = ./.; inventory = { machines.introducer = { }; machines.peer1 = { }; machines.peer2 = { }; instances."test" = { module.name = "@clan/syncthing"; module.input = "self"; roles.introducer.machines.introducer.settings = { autoAcceptDevices = true; autoShares = [ "Shared" ]; }; roles.peer.machines.peer1 = { }; roles.peer.machines.peer2 = { }; }; }; }; nodes = { peer1.services.syncthing.openDefaultPorts = true; peer2.services.syncthing.openDefaultPorts = true; introducer = { services.syncthing.openDefaultPorts = true; # For faster Tests systemd.timers.syncthing-auto-accept.timerConfig = { OnActiveSec = 1; OnUnitActiveSec = 1; }; services.syncthing.settings.folders = { "Shared" = { enable = true; path = "~/Shared"; versioning = { type = "trashcan"; params = { cleanoutDays = "30"; }; }; }; }; }; }; testScript = '' start_all() # import time # time.sleep(500000) introducer.wait_for_unit("syncthing.service") peer1.wait_for_unit("syncthing.service") peer2.wait_for_unit("syncthing.service") # Check that syncthing web interface is accessible introducer.wait_for_open_port(8384) peer1.wait_for_open_port(8384) peer2.wait_for_open_port(8384) # Basic connectivity test introducer.succeed("curl -s http://127.0.0.1:8384") peer1.succeed("curl -s http://127.0.0.1:8384") peer2.succeed("curl -s http://127.0.0.1:8384") # Check that folders are created correctly peer1.execute("ls -la /var/lib/syncthing") peer2.execute("ls -la /var/lib/syncthing") peer1.wait_for_file("/var/lib/syncthing/Shared") peer2.wait_for_file("/var/lib/syncthing/Shared") # Check file synchronisation from peer1 to peer2 introducer.shutdown() peer1.execute("echo hello > /var/lib/syncthing/Shared/hello") # peer2.wait_until_succeeds("timeout 5 cat /var/lib/syncthing/Shared") peer2.wait_for_file("/var/lib/syncthing/Shared/hello") out = peer2.succeed("cat /var/lib/syncthing/Shared/hello") assert "hello" in out ''; }