66 lines
2.0 KiB
Nix
66 lines
2.0 KiB
Nix
|
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 -Ss -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 -Ss -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")
|
||
|
'';
|
||
|
})
|