Commit 6881d9b1 authored by Robert Hensing's avatar Robert Hensing
Browse files

nixosTests.docker-tools-nix-shell: Extract

These tests should run as part of the `tests.devShellTools` suite,
and they're a significant portion of the general docker tools test
duration.
parent 1cf3103b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -264,6 +264,7 @@ in {
  docker-rootless = handleTestOn ["aarch64-linux" "x86_64-linux"] ./docker-rootless.nix {};
  docker-registry = handleTest ./docker-registry.nix {};
  docker-tools = handleTestOn ["x86_64-linux"] ./docker-tools.nix {};
  docker-tools-nix-shell = runTestOn ["x86_64-linux"] ./docker-tools-nix-shell.nix;
  docker-tools-cross = handleTestOn ["x86_64-linux" "aarch64-linux"] ./docker-tools-cross.nix {};
  docker-tools-overlay = handleTestOn ["x86_64-linux"] ./docker-tools-overlay.nix {};
  documize = handleTest ./documize.nix {};
+90 −0
Original line number Diff line number Diff line
# nix-build -A nixosTests.docker-tools-nix-shell
{ config, lib, ... }:
let
  inherit (config.node.pkgs.dockerTools) examples;
in
{
  name = "docker-tools-nix-shell";
  meta = with lib.maintainers; {
    maintainers = [ infinisil roberth ];
  };

  nodes = {
    docker = { ... }: {
      virtualisation = {
        diskSize = 3072;
        docker.enable = true;
      };
    };
  };

  testScript = ''
    docker.wait_for_unit("sockets.target")

    with subtest("buildImageWithNixDB: Has a nix database"):
        docker.succeed(
            "docker load --input='${examples.nix}'",
            "docker run --rm ${examples.nix.imageName} nix-store -q --references /bin/bash"
        )

    with subtest("buildNixShellImage: Can build a basic derivation"):
        docker.succeed(
            "${examples.nix-shell-basic} | docker load",
            "docker run --rm nix-shell-basic bash -c 'buildDerivation && $out/bin/hello' | grep '^Hello, world!$'"
        )

    with subtest("buildNixShellImage: Runs the shell hook"):
        docker.succeed(
            "${examples.nix-shell-hook} | docker load",
            "docker run --rm -it nix-shell-hook | grep 'This is the shell hook!'"
        )

    with subtest("buildNixShellImage: Sources stdenv, making build inputs available"):
        docker.succeed(
            "${examples.nix-shell-inputs} | docker load",
            "docker run --rm -it nix-shell-inputs | grep 'Hello, world!'"
        )

    with subtest("buildNixShellImage: passAsFile works"):
        docker.succeed(
            "${examples.nix-shell-pass-as-file} | docker load",
            "docker run --rm -it nix-shell-pass-as-file | grep 'this is a string'"
        )

    with subtest("buildNixShellImage: run argument works"):
        docker.succeed(
            "${examples.nix-shell-run} | docker load",
            "docker run --rm -it nix-shell-run | grep 'This shell is not interactive'"
        )

    with subtest("buildNixShellImage: command argument works"):
        docker.succeed(
            "${examples.nix-shell-command} | docker load",
            "docker run --rm -it nix-shell-command | grep 'This shell is interactive'"
        )

    with subtest("buildNixShellImage: home directory is writable by default"):
        docker.succeed(
            "${examples.nix-shell-writable-home} | docker load",
            "docker run --rm -it nix-shell-writable-home"
        )

    with subtest("buildNixShellImage: home directory can be made non-existent"):
        docker.succeed(
            "${examples.nix-shell-nonexistent-home} | docker load",
            "docker run --rm -it nix-shell-nonexistent-home"
        )

    with subtest("buildNixShellImage: can build derivations"):
        docker.succeed(
            "${examples.nix-shell-build-derivation} | docker load",
            "docker run --rm -it nix-shell-build-derivation"
        )

    with subtest("streamLayeredImage: with nix db"):
        docker.succeed(
            "${examples.nix-layered} | docker load",
            "docker run --rm ${examples.nix-layered.imageName} nix-store -q --references /bin/bash"
        )
  '';
}
+0 −66
Original line number Diff line number Diff line
@@ -567,66 +567,6 @@ in {
        docker.succeed("docker run --rm image-with-certs:latest test -r /etc/pki/tls/certs/ca-bundle.crt")
        docker.succeed("docker image rm image-with-certs:latest")

    with subtest("buildImageWithNixDB: Has a nix database"):
        docker.succeed(
            "docker load --input='${examples.nix}'",
            "docker run --rm ${examples.nix.imageName} nix-store -q --references /bin/bash"
        )

    with subtest("buildNixShellImage: Can build a basic derivation"):
        docker.succeed(
            "${examples.nix-shell-basic} | docker load",
            "docker run --rm nix-shell-basic bash -c 'buildDerivation && $out/bin/hello' | grep '^Hello, world!$'"
        )

    with subtest("buildNixShellImage: Runs the shell hook"):
        docker.succeed(
            "${examples.nix-shell-hook} | docker load",
            "docker run --rm -it nix-shell-hook | grep 'This is the shell hook!'"
        )

    with subtest("buildNixShellImage: Sources stdenv, making build inputs available"):
        docker.succeed(
            "${examples.nix-shell-inputs} | docker load",
            "docker run --rm -it nix-shell-inputs | grep 'Hello, world!'"
        )

    with subtest("buildNixShellImage: passAsFile works"):
        docker.succeed(
            "${examples.nix-shell-pass-as-file} | docker load",
            "docker run --rm -it nix-shell-pass-as-file | grep 'this is a string'"
        )

    with subtest("buildNixShellImage: run argument works"):
        docker.succeed(
            "${examples.nix-shell-run} | docker load",
            "docker run --rm -it nix-shell-run | grep 'This shell is not interactive'"
        )

    with subtest("buildNixShellImage: command argument works"):
        docker.succeed(
            "${examples.nix-shell-command} | docker load",
            "docker run --rm -it nix-shell-command | grep 'This shell is interactive'"
        )

    with subtest("buildNixShellImage: home directory is writable by default"):
        docker.succeed(
            "${examples.nix-shell-writable-home} | docker load",
            "docker run --rm -it nix-shell-writable-home"
        )

    with subtest("buildNixShellImage: home directory can be made non-existent"):
        docker.succeed(
            "${examples.nix-shell-nonexistent-home} | docker load",
            "docker run --rm -it nix-shell-nonexistent-home"
        )

    with subtest("buildNixShellImage: can build derivations"):
        docker.succeed(
            "${examples.nix-shell-build-derivation} | docker load",
            "docker run --rm -it nix-shell-build-derivation"
        )

    with subtest("streamLayeredImage: chown is persistent in fakeRootCommands"):
        docker.succeed(
            "${chownTestImage} | docker load",
@@ -638,11 +578,5 @@ in {
            "${nonRootTestImage} | docker load",
            "docker run --rm ${chownTestImage.imageName} | diff /dev/stdin <(echo 12345:12345)"
        )

    with subtest("streamLayeredImage: with nix db"):
        docker.succeed(
            "${examples.nix-layered} | docker load",
            "docker run --rm ${examples.nix-layered.imageName} nix-store -q --references /bin/bash"
        )
  '';
})
+8 −2
Original line number Diff line number Diff line
@@ -5,7 +5,8 @@
  stdenv,
  hello,
  writeText,
  runCommand, zlib,
  zlib,
  nixosTests,
}:
let
  inherit (lib)
@@ -15,7 +16,12 @@ let
    mapAttrsToList
    ;
in
{
lib.recurseIntoAttrs {

  nixos = lib.recurseIntoAttrs {
    inherit (nixosTests) docker-tools-nix-shell;
  };

  # nix-build -A tests.devShellTools.valueToString
  valueToString =
    let inherit (devShellTools) valueToString; in