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")
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |