78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								import ./make-test-python.nix ({ pkgs, ... }:
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  fakeReply = pkgs.writeText "namecoin-reply.json" ''
							 | 
						||
| 
								 | 
							
								  { "error": null,
							 | 
						||
| 
								 | 
							
								    "id": 1,
							 | 
						||
| 
								 | 
							
								    "result": {
							 | 
						||
| 
								 | 
							
								      "address": "T31q8ucJ4dI1xzhxQ5QispfECld5c7Xw",
							 | 
						||
| 
								 | 
							
								      "expired": false,
							 | 
						||
| 
								 | 
							
								      "expires_in": 2248,
							 | 
						||
| 
								 | 
							
								      "height": 438155,
							 | 
						||
| 
								 | 
							
								      "name": "d/test",
							 | 
						||
| 
								 | 
							
								      "txid": "db61c0b2540ba0c1a2c8cc92af703a37002e7566ecea4dbf8727c7191421edfb",
							 | 
						||
| 
								 | 
							
								      "value": "{\"ip\": \"1.2.3.4\", \"email\": \"root@test.bit\",\"info\": \"Fake record\"}",
							 | 
						||
| 
								 | 
							
								      "vout": 0
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  name = "ncdns";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nodes.server = { ... }: {
							 | 
						||
| 
								 | 
							
								    networking.nameservers = [ "127.0.0.1" ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.namecoind.rpc = {
							 | 
						||
| 
								 | 
							
								      address = "127.0.0.1";
							 | 
						||
| 
								 | 
							
								      user = "namecoin";
							 | 
						||
| 
								 | 
							
								      password = "secret";
							 | 
						||
| 
								 | 
							
								      port = 8332;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Fake namecoin RPC server because we can't
							 | 
						||
| 
								 | 
							
								    # run a full node in a test.
							 | 
						||
| 
								 | 
							
								    systemd.services.namecoind = {
							 | 
						||
| 
								 | 
							
								      wantedBy = [ "multi-user.target" ];
							 | 
						||
| 
								 | 
							
								      script = ''
							 | 
						||
| 
								 | 
							
								        while true; do
							 | 
						||
| 
								 | 
							
								          echo -e "HTTP/1.1 200 OK\n\n $(<${fakeReply})\n" \
							 | 
						||
| 
								 | 
							
								            | ${pkgs.netcat}/bin/nc -N -l 127.0.0.1 8332
							 | 
						||
| 
								 | 
							
								        done
							 | 
						||
| 
								 | 
							
								      '';
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.ncdns = {
							 | 
						||
| 
								 | 
							
								      enable = true;
							 | 
						||
| 
								 | 
							
								      dnssec.enable = true;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.pdns-recursor = {
							 | 
						||
| 
								 | 
							
								      enable = true;
							 | 
						||
| 
								 | 
							
								      dns.allowFrom = [ "127.0.0.0/8" ];
							 | 
						||
| 
								 | 
							
								      settings.loglevel = 8;
							 | 
						||
| 
								 | 
							
								      resolveNamecoin = true;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    environment.systemPackages = [ pkgs.dnsutils ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = ''
							 | 
						||
| 
								 | 
							
								    with subtest("DNSSEC keys have been generated"):
							 | 
						||
| 
								 | 
							
								        server.wait_for_unit("ncdns")
							 | 
						||
| 
								 | 
							
								        server.wait_for_file("/var/lib/ncdns/bit.key")
							 | 
						||
| 
								 | 
							
								        server.wait_for_file("/var/lib/ncdns/bit-zone.key")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    with subtest("DNSKEY bit record is present"):
							 | 
						||
| 
								 | 
							
								        server.wait_for_unit("pdns-recursor")
							 | 
						||
| 
								 | 
							
								        server.wait_for_open_port("53")
							 | 
						||
| 
								 | 
							
								        server.succeed("host -t DNSKEY bit")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    with subtest("can resolve a .bit name"):
							 | 
						||
| 
								 | 
							
								        server.wait_for_unit("namecoind")
							 | 
						||
| 
								 | 
							
								        server.wait_for_open_port("8332")
							 | 
						||
| 
								 | 
							
								        assert "1.2.3.4" in server.succeed("host -t A test.bit")
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |