| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  | # Test whether DNS resolving returns multiple records and all address families. | 
					
						
							|  |  |  | import ./make-test-python.nix ({ pkgs, ... } : { | 
					
						
							|  |  |  |   name = "resolv"; | 
					
						
							| 
									
										
										
										
											2021-01-10 20:08:30 +01:00
										 |  |  |   meta = with pkgs.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  |     maintainers = [ ckauhaus ]; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   nodes.resolv = { ... }: { | 
					
						
							|  |  |  |     networking.extraHosts = ''
 | 
					
						
							|  |  |  |       # IPv4 only | 
					
						
							|  |  |  |       192.0.2.1 host-ipv4.example.net | 
					
						
							|  |  |  |       192.0.2.2 host-ipv4.example.net | 
					
						
							|  |  |  |       # IP6 only | 
					
						
							|  |  |  |       2001:db8::2:1 host-ipv6.example.net | 
					
						
							|  |  |  |       2001:db8::2:2 host-ipv6.example.net | 
					
						
							|  |  |  |       # dual stack | 
					
						
							|  |  |  |       192.0.2.1 host-dual.example.net | 
					
						
							|  |  |  |       192.0.2.2 host-dual.example.net | 
					
						
							|  |  |  |       2001:db8::2:1 host-dual.example.net | 
					
						
							|  |  |  |       2001:db8::2:2 host-dual.example.net | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 11:25:12 +01:00
										 |  |  |   testScript = ''
 | 
					
						
							|  |  |  |     def addrs_in(hostname, addrs): | 
					
						
							|  |  |  |         res = resolv.succeed("getent ahosts {}".format(hostname)) | 
					
						
							|  |  |  |         for addr in addrs: | 
					
						
							|  |  |  |             assert addr in res, "Expected output '{}' not found in\n{}".format(addr, res) | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     start_all() | 
					
						
							|  |  |  |     resolv.wait_for_unit("nscd") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 11:25:12 +01:00
										 |  |  |     ipv4 = ["192.0.2.1", "192.0.2.2"] | 
					
						
							|  |  |  |     ipv6 = ["2001:db8::2:1", "2001:db8::2:2"] | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 11:25:12 +01:00
										 |  |  |     with subtest("IPv4 resolves"): | 
					
						
							|  |  |  |         addrs_in("host-ipv4.example.net", ipv4) | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 11:25:12 +01:00
										 |  |  |     with subtest("IPv6 resolves"): | 
					
						
							|  |  |  |         addrs_in("host-ipv6.example.net", ipv6) | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 11:25:12 +01:00
										 |  |  |     with subtest("Dual stack resolves"): | 
					
						
							|  |  |  |         addrs_in("host-dual.example.net", ipv4 + ipv6) | 
					
						
							| 
									
										
										
										
											2019-11-29 12:08:34 +01:00
										 |  |  |   '';
 | 
					
						
							|  |  |  | }) |