44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								import ./make-test-python.nix ({ lib, pkgs, ... }: {
							 | 
						||
| 
								 | 
							
								  name = "doh-proxy-rust";
							 | 
						||
| 
								 | 
							
								  meta = with lib.maintainers; {
							 | 
						||
| 
								 | 
							
								    maintainers = [ stephank ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nodes = {
							 | 
						||
| 
								 | 
							
								    machine = { pkgs, lib, ... }: {
							 | 
						||
| 
								 | 
							
								      services.bind = {
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								        extraOptions = "empty-zones-enable no;";
							 | 
						||
| 
								 | 
							
								        zones = lib.singleton {
							 | 
						||
| 
								 | 
							
								          name = ".";
							 | 
						||
| 
								 | 
							
								          master = true;
							 | 
						||
| 
								 | 
							
								          file = pkgs.writeText "root.zone" ''
							 | 
						||
| 
								 | 
							
								            $TTL 3600
							 | 
						||
| 
								 | 
							
								            . IN SOA ns.example.org. admin.example.org. ( 1 3h 1h 1w 1d )
							 | 
						||
| 
								 | 
							
								            . IN NS ns.example.org.
							 | 
						||
| 
								 | 
							
								            ns.example.org. IN A    192.168.0.1
							 | 
						||
| 
								 | 
							
								          '';
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      services.doh-proxy-rust = {
							 | 
						||
| 
								 | 
							
								        enable = true;
							 | 
						||
| 
								 | 
							
								        flags = [
							 | 
						||
| 
								 | 
							
								          "--server-address=127.0.0.1:53"
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = { nodes, ... }: ''
							 | 
						||
| 
								 | 
							
								    url = "http://localhost:3000/dns-query"
							 | 
						||
| 
								 | 
							
								    query = "AAABAAABAAAAAAAAAm5zB2V4YW1wbGUDb3JnAAABAAE="  # IN A ns.example.org.
							 | 
						||
| 
								 | 
							
								    bin_ip = r"$'\xC0\xA8\x00\x01'"  # 192.168.0.1, as shell binary string
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    machine.wait_for_unit("bind.service")
							 | 
						||
| 
								 | 
							
								    machine.wait_for_unit("doh-proxy-rust.service")
							 | 
						||
| 
								 | 
							
								    machine.wait_for_open_port(53)
							 | 
						||
| 
								 | 
							
								    machine.wait_for_open_port(3000)
							 | 
						||
| 
								 | 
							
								    machine.succeed(f"curl --fail '{url}?dns={query}' | grep -qF {bin_ip}")
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |