| 
									
										
										
										
											2016-01-31 21:45:05 +01:00
										 |  |  | # Test for NixOS' container support. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   hostIp = "fc00::2"; | 
					
						
							|  |  |  |   localIp = "fc00::1"; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ./make-test.nix ({ pkgs, ...} : { | 
					
						
							|  |  |  |   name = "containers-ipv6"; | 
					
						
							|  |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2016-05-16 13:06:40 +02:00
										 |  |  |     maintainers = [ aristid aszlig eelco chaoflow kampfschlaefer ]; | 
					
						
							| 
									
										
										
										
											2016-01-31 21:45:05 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   machine = | 
					
						
							|  |  |  |     { config, pkgs, ... }: | 
					
						
							|  |  |  |     { imports = [ ../modules/installer/cd-dvd/channel.nix ]; | 
					
						
							|  |  |  |       virtualisation.writableStore = true; | 
					
						
							|  |  |  |       virtualisation.memorySize = 768; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       containers.webserver = | 
					
						
							|  |  |  |         { privateNetwork = true; | 
					
						
							|  |  |  |           hostAddress6 = hostIp; | 
					
						
							|  |  |  |           localAddress6 = localIp; | 
					
						
							|  |  |  |           config = | 
					
						
							|  |  |  |             { services.httpd.enable = true; | 
					
						
							|  |  |  |               services.httpd.adminAddr = "foo@example.org"; | 
					
						
							|  |  |  |               networking.firewall.allowedTCPPorts = [ 80 ]; | 
					
						
							|  |  |  |               networking.firewall.allowPing = true; | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       virtualisation.pathsInNixDB = [ pkgs.stdenv ]; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testScript = | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       $machine->waitForUnit("default.target"); | 
					
						
							|  |  |  |       $machine->succeed("nixos-container list") =~ /webserver/ or die; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Start the webserver container. | 
					
						
							|  |  |  |       $machine->succeed("nixos-container start webserver"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # wait two seconds for the container to start and the network to be up | 
					
						
							|  |  |  |       sleep 2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Since "start" returns after the container has reached | 
					
						
							|  |  |  |       # multi-user.target, we should now be able to access it. | 
					
						
							|  |  |  |       my $ip = "${localIp}"; | 
					
						
							|  |  |  |       chomp $ip; | 
					
						
							| 
									
										
										
										
											2017-02-15 11:05:50 +01:00
										 |  |  |       $machine->succeed("ping -n -c 1 $ip"); | 
					
						
							| 
									
										
										
										
											2016-01-31 21:45:05 +01:00
										 |  |  |       $machine->succeed("curl --fail http://[$ip]/ > /dev/null"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Stop the container. | 
					
						
							|  |  |  |       $machine->succeed("nixos-container stop webserver"); | 
					
						
							|  |  |  |       $machine->fail("curl --fail --connect-timeout 2 http://[$ip]/ > /dev/null"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Destroying a declarative container should fail. | 
					
						
							|  |  |  |       $machine->fail("nixos-container destroy webserver"); | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }) |