1# nix-build -A nixosTests.docker-tools-nix-shell
2{ config, lib, ... }:
3let
4 inherit (config.node.pkgs.dockerTools) examples;
5in
6{
7 name = "docker-tools-nix-shell";
8 meta = with lib.maintainers; {
9 maintainers = [
10 infinisil
11 roberth
12 ];
13 };
14
15 nodes = {
16 docker =
17 { ... }:
18 {
19 virtualisation = {
20 diskSize = 4000;
21 docker.enable = true;
22 };
23 };
24 };
25
26 testScript = ''
27 docker.wait_for_unit("sockets.target")
28
29 with subtest("buildImageWithNixDB: Has a nix database"):
30 docker.succeed(
31 "docker load --input='${examples.nix}'",
32 "docker run --rm ${examples.nix.imageName} nix-store -q --references /bin/bash"
33 )
34
35 with subtest("buildNixShellImage: Can build a basic derivation"):
36 docker.succeed(
37 "${examples.nix-shell-basic} | docker load",
38 "docker run --rm nix-shell-basic bash -c 'buildDerivation && $out/bin/hello' | grep '^Hello, world!$'"
39 )
40
41 with subtest("buildNixShellImage: Runs the shell hook"):
42 docker.succeed(
43 "${examples.nix-shell-hook} | docker load",
44 "docker run --rm -it nix-shell-hook | grep 'This is the shell hook!'"
45 )
46
47 with subtest("buildNixShellImage: Sources stdenv, making build inputs available"):
48 docker.succeed(
49 "${examples.nix-shell-inputs} | docker load",
50 "docker run --rm -it nix-shell-inputs | grep 'Hello, world!'"
51 )
52
53 with subtest("buildNixShellImage: passAsFile works"):
54 docker.succeed(
55 "${examples.nix-shell-pass-as-file} | docker load",
56 "docker run --rm -it nix-shell-pass-as-file | grep 'this is a string'"
57 )
58
59 with subtest("buildNixShellImage: run argument works"):
60 docker.succeed(
61 "${examples.nix-shell-run} | docker load",
62 "docker run --rm -it nix-shell-run | grep 'This shell is not interactive'"
63 )
64
65 with subtest("buildNixShellImage: command argument works"):
66 docker.succeed(
67 "${examples.nix-shell-command} | docker load",
68 "docker run --rm -it nix-shell-command | grep 'This shell is interactive'"
69 )
70
71 with subtest("buildNixShellImage: home directory is writable by default"):
72 docker.succeed(
73 "${examples.nix-shell-writable-home} | docker load",
74 "docker run --rm -it nix-shell-writable-home"
75 )
76
77 with subtest("buildNixShellImage: home directory can be made non-existent"):
78 docker.succeed(
79 "${examples.nix-shell-nonexistent-home} | docker load",
80 "docker run --rm -it nix-shell-nonexistent-home"
81 )
82
83 with subtest("buildNixShellImage: can build derivations"):
84 docker.succeed(
85 "${examples.nix-shell-build-derivation} | docker load",
86 "docker run --rm -it nix-shell-build-derivation"
87 )
88
89 with subtest("streamLayeredImage: with nix db"):
90 docker.succeed(
91 "${examples.nix-layered} | docker load",
92 "docker run --rm ${examples.nix-layered.imageName} nix-store -q --references /bin/bash"
93 )
94 '';
95}