 25bef2d8f9
			
		
	
	
		25bef2d8f9
		
	
	
	
	
		
			
			The library does not depend on stdenv, that `stdenv` exposes `lib` is an artifact of the ancient origins of nixpkgs.
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| import ./make-test-python.nix ({ pkgs, ...}:
 | |
| let
 | |
|   pythonEnv = pkgs.python3.withPackages (py: with py; [ appdirs toml ]);
 | |
| 
 | |
|   port = 8000;
 | |
|   baseUrl = "http://server:${toString port}";
 | |
| 
 | |
|   configureSteck = pkgs.writeScript "configure.py" ''
 | |
|     #!${pythonEnv.interpreter}
 | |
|     import appdirs
 | |
|     import toml
 | |
|     import os
 | |
| 
 | |
|     CONFIG = {
 | |
|       "base": "${baseUrl}/",
 | |
|       "confirm": False,
 | |
|       "magic": True,
 | |
|       "ignore": True
 | |
|     }
 | |
| 
 | |
|     os.makedirs(appdirs.user_config_dir('steck'))
 | |
|     with open(os.path.join(appdirs.user_config_dir('steck'), 'steck.toml'), "w") as fd:
 | |
|         toml.dump(CONFIG, fd)
 | |
|     '';
 | |
| in
 | |
| {
 | |
|   name = "pinnwand";
 | |
|   meta = with pkgs.lib.maintainers; {
 | |
|     maintainers =[ hexa ];
 | |
|   };
 | |
| 
 | |
|   nodes = {
 | |
|     server = { config, ... }:
 | |
|     {
 | |
|       networking.firewall.allowedTCPPorts = [
 | |
|         port
 | |
|       ];
 | |
| 
 | |
|       services.pinnwand = {
 | |
|         enable = true;
 | |
|         port = port;
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     client = { pkgs, ... }:
 | |
|     {
 | |
|       environment.systemPackages = [ pkgs.steck ];
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   testScript = ''
 | |
|     start_all()
 | |
| 
 | |
|     server.wait_for_unit("pinnwand.service")
 | |
|     client.wait_for_unit("network.target")
 | |
| 
 | |
|     # create steck.toml config file
 | |
|     client.succeed("${configureSteck}")
 | |
| 
 | |
|     # wait until the server running pinnwand is reachable
 | |
|     client.wait_until_succeeds("ping -c1 server")
 | |
| 
 | |
|     # make sure pinnwand is listening
 | |
|     server.wait_until_succeeds("ss -lnp | grep ${toString port}")
 | |
| 
 | |
|     # send the contents of /etc/machine-id
 | |
|     response = client.succeed("steck paste /etc/machine-id")
 | |
| 
 | |
|     # parse the steck response
 | |
|     raw_url = None
 | |
|     removal_link = None
 | |
|     for line in response.split("\n"):
 | |
|         if line.startswith("View link:"):
 | |
|             raw_url = f"${baseUrl}/raw/{line.split('/')[-1]}"
 | |
|         if line.startswith("Removal link:"):
 | |
|             removal_link = line.split(":", 1)[1]
 | |
| 
 | |
|     # check whether paste matches what we sent
 | |
|     client.succeed(f"curl {raw_url} > /tmp/machine-id")
 | |
|     client.succeed("diff /tmp/machine-id /etc/machine-id")
 | |
| 
 | |
|     # remove paste and check that it's not available any more
 | |
|     client.succeed(f"curl {removal_link}")
 | |
|     client.fail(f"curl --fail {raw_url}")
 | |
|   '';
 | |
| })
 |