import ./make-test-python.nix ({ lib, pkgs, ... }: { name = "syncthing"; meta.maintainers = with pkgs.stdenv.lib.maintainers; [ chkno ]; nodes = rec { a = { environment.systemPackages = with pkgs; [ curl libxml2 syncthing ]; services.syncthing = { enable = true; openDefaultPorts = true; }; }; b = a; }; testScript = '' import json import shlex confdir = "/var/lib/syncthing/.config/syncthing" def addPeer(host, name, deviceID): APIKey = host.succeed( "xmllint --xpath 'string(configuration/gui/apikey)' %s/config.xml" % confdir ).strip() oldConf = host.succeed( "curl -Ssf -H 'X-API-Key: %s' 127.0.0.1:8384/rest/system/config" % APIKey ) conf = json.loads(oldConf) conf["devices"].append({"deviceID": deviceID, "id": name}) conf["folders"].append( { "devices": [{"deviceID": deviceID}], "id": "foo", "path": "/var/lib/syncthing/foo", "rescanIntervalS": 1, } ) newConf = json.dumps(conf) host.succeed( "curl -Ssf -H 'X-API-Key: %s' 127.0.0.1:8384/rest/system/config -d %s" % (APIKey, shlex.quote(newConf)) ) start_all() a.wait_for_unit("syncthing.service") b.wait_for_unit("syncthing.service") a.wait_for_open_port(22000) b.wait_for_open_port(22000) aDeviceID = a.succeed("syncthing -home=%s -device-id" % confdir).strip() bDeviceID = b.succeed("syncthing -home=%s -device-id" % confdir).strip() addPeer(a, "b", bDeviceID) addPeer(b, "a", aDeviceID) 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") ''; })