77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								# Not everyone has a suitable remote builder set up, so the cross-compilation
							 | 
						||
| 
								 | 
							
								# tests that _include_ running the result are separate. That way, most people
							 | 
						||
| 
								 | 
							
								# can run the majority of the test suite without the extra setup.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import ./make-test-python.nix ({ pkgs, ... }:
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  remoteSystem =
							 | 
						||
| 
								 | 
							
								    if pkgs.system == "aarch64-linux"
							 | 
						||
| 
								 | 
							
								    then "x86_64-linux"
							 | 
						||
| 
								 | 
							
								    else "aarch64-linux";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  remoteCrossPkgs = import ../.. /*nixpkgs*/ {
							 | 
						||
| 
								 | 
							
								    # NOTE: This is the machine that runs the build -  local from the
							 | 
						||
| 
								 | 
							
								    #       'perspective' of the build script.
							 | 
						||
| 
								 | 
							
								    localSystem = remoteSystem;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # NOTE: Since this file can't control where the test will be _run_ we don't
							 | 
						||
| 
								 | 
							
								    #       cross-compile _to_ a different system but _from_ a different system
							 | 
						||
| 
								 | 
							
								    crossSystem = pkgs.system;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  hello1 = remoteCrossPkgs.dockerTools.buildImage {
							 | 
						||
| 
								 | 
							
								    name = "hello1";
							 | 
						||
| 
								 | 
							
								    tag = "latest";
							 | 
						||
| 
								 | 
							
								    contents = remoteCrossPkgs.hello;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  hello2 = remoteCrossPkgs.dockerTools.buildLayeredImage {
							 | 
						||
| 
								 | 
							
								    name = "hello2";
							 | 
						||
| 
								 | 
							
								    tag = "latest";
							 | 
						||
| 
								 | 
							
								    contents = remoteCrossPkgs.hello;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in {
							 | 
						||
| 
								 | 
							
								  name = "docker-tools";
							 | 
						||
| 
								 | 
							
								  meta = with pkgs.stdenv.lib.maintainers; {
							 | 
						||
| 
								 | 
							
								    maintainers = [ roberth ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  nodes = {
							 | 
						||
| 
								 | 
							
								    docker = { ... }: {
							 | 
						||
| 
								 | 
							
								      virtualisation = {
							 | 
						||
| 
								 | 
							
								        diskSize = 2048;
							 | 
						||
| 
								 | 
							
								        docker.enable = true;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript = ''
							 | 
						||
| 
								 | 
							
								    docker.wait_for_unit("sockets.target")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    with subtest("Ensure cross compiled buildImage image can run."):
							 | 
						||
| 
								 | 
							
								        docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker load --input='${hello1}'"
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        assert "Hello, world!" in docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker run --rm ${hello1.imageName} hello",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker rmi ${hello1.imageName}",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    with subtest("Ensure cross compiled buildLayeredImage image can run."):
							 | 
						||
| 
								 | 
							
								        docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker load --input='${hello2}'"
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        assert "Hello, world!" in docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker run --rm ${hello2.imageName} hello",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        docker.succeed(
							 | 
						||
| 
								 | 
							
								            "docker rmi ${hello2.imageName}",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |