| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  | { system ? builtins.currentSystem, | 
					
						
							|  |  |  |   config ? {}, | 
					
						
							|  |  |  |   pkgs ? import ../.. { inherit system config; } | 
					
						
							|  |  |  | }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with import ../lib/testing-python.nix { inherit system pkgs; }; | 
					
						
							|  |  |  | with pkgs.lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |   makeHostNameTest = hostName: domain: fqdnOrNull: | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  |     let | 
					
						
							|  |  |  |       fqdn = hostName + (optionalString (domain != null) ".${domain}"); | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |       getStr = str: # maybeString2String | 
					
						
							|  |  |  |         let res = builtins.tryEval str; | 
					
						
							|  |  |  |         in if (res.success && res.value != null) then res.value else "null"; | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  |     in | 
					
						
							|  |  |  |       makeTest { | 
					
						
							|  |  |  |         name = "hostname-${fqdn}"; | 
					
						
							| 
									
										
										
										
											2021-01-10 20:08:30 +01:00
										 |  |  |         meta = with pkgs.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  |           maintainers = [ primeos blitz ]; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         machine = { lib, ... }: { | 
					
						
							|  |  |  |           networking.hostName = hostName; | 
					
						
							|  |  |  |           networking.domain = domain; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           environment.systemPackages = with pkgs; [ | 
					
						
							|  |  |  |             inetutils | 
					
						
							|  |  |  |           ]; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |         testScript = { nodes, ... }: ''
 | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  |           start_all() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           machine = ${hostName} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           machine.wait_for_unit("network-online.target") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |           # Test if NixOS computes the correct FQDN (either a FQDN or an error/null): | 
					
						
							|  |  |  |           assert "${getStr nodes.machine.config.networking.fqdn}" == "${getStr fqdnOrNull}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  |           # The FQDN, domain name, and hostname detection should work as expected: | 
					
						
							|  |  |  |           assert "${fqdn}" == machine.succeed("hostname --fqdn").strip() | 
					
						
							|  |  |  |           assert "${optionalString (domain != null) domain}" == machine.succeed("dnsdomainname").strip() | 
					
						
							|  |  |  |           assert ( | 
					
						
							|  |  |  |               "${hostName}" | 
					
						
							|  |  |  |               == machine.succeed( | 
					
						
							|  |  |  |                   'hostnamectl status | grep "Static hostname" | cut -d: -f2' | 
					
						
							|  |  |  |               ).strip() | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # 127.0.0.1 and ::1 should resolve back to "localhost": | 
					
						
							|  |  |  |           assert ( | 
					
						
							|  |  |  |               "localhost" == machine.succeed("getent hosts 127.0.0.1 | awk '{print $2}'").strip() | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |           assert "localhost" == machine.succeed("getent hosts ::1 | awk '{print $2}'").strip() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # 127.0.0.2 should resolve back to the FQDN and hostname: | 
					
						
							|  |  |  |           fqdn_and_host_name = "${optionalString (domain != null) "${hostName}.${domain} "}${hostName}" | 
					
						
							|  |  |  |           assert ( | 
					
						
							|  |  |  |               fqdn_and_host_name | 
					
						
							|  |  |  |               == machine.succeed("getent hosts 127.0.0.2 | awk '{print $2,$3}'").strip() | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |   noExplicitDomain = makeHostNameTest "ahost" null null; | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-10 11:30:47 +00:00
										 |  |  |   explicitDomain = makeHostNameTest "ahost" "adomain" "ahost.adomain"; | 
					
						
							| 
									
										
										
										
											2020-05-12 23:48:27 +02:00
										 |  |  | } |