about summary refs log tree commit diff
path: root/nixos/tests/docker-tools-cross.nix
blob: 14cb14ceeaea9edf76fb2e5cd5eba2eb476f1ee9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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.stdenv.hostPlatform.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.stdenv.hostPlatform.system;
  };

  hello1 = remoteCrossPkgs.dockerTools.buildImage {
    name = "hello1";
    tag = "latest";
    copyToRoot = remoteCrossPkgs.buildEnv {
      name = "image-root";
      pathsToLink = [ "/bin" ];
      paths = [ remoteCrossPkgs.hello ];
    };
  };

  hello2 = remoteCrossPkgs.dockerTools.buildLayeredImage {
    name = "hello2";
    tag = "latest";
    contents = remoteCrossPkgs.hello;
  };

in {
  name = "docker-tools";
  meta = with pkgs.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}",
        )
  '';
})