notes: 2.3.0 -> 2.3.1 (#352950)
[NixPkgs.git] / nixos / tests / systemd-nspawn.nix
blobb86762233d183eadfd364c1533789897efe93138
1 import ./make-test-python.nix ({pkgs, lib, ...}:
2 let
3   gpgKeyring = import ./common/gpg-keyring.nix { inherit pkgs; };
5   nspawnImages = (pkgs.runCommand "localhost" { buildInputs = [ pkgs.coreutils pkgs.gnupg ]; } ''
6     mkdir -p $out
7     cd $out
9     # produce a testimage.raw
10     dd if=/dev/urandom of=$out/testimage.raw bs=$((1024*1024+7)) count=5
12     # produce a testimage2.tar.xz, containing the hello store path
13     tar cvJpf testimage2.tar.xz ${pkgs.hello}
15     # produce signature(s)
16     sha256sum testimage* > SHA256SUMS
17     export GNUPGHOME="$(mktemp -d)"
18     cp -R ${gpgKeyring}/* $GNUPGHOME
19     gpg --batch --sign --detach-sign --output SHA256SUMS.gpg SHA256SUMS
20   '');
21 in {
22   name = "systemd-nspawn";
24   nodes = {
25     server = { pkgs, ... }: {
26       networking.firewall.allowedTCPPorts = [ 80 ];
27       services.nginx = {
28         enable = true;
29         virtualHosts."server".root = nspawnImages;
30       };
31     };
32     client = { pkgs, ... }: {
33       environment.etc."systemd/import-pubring.gpg".source = "${gpgKeyring}/pubkey.gpg";
34     };
35   };
37   testScript = ''
38     start_all()
40     server.wait_for_unit("nginx.service")
41     client.systemctl("start network-online.target")
42     client.wait_for_unit("network-online.target")
43     client.succeed("machinectl pull-raw --verify=signature http://server/testimage.raw")
44     client.succeed(
45         "cmp /var/lib/machines/testimage.raw ${nspawnImages}/testimage.raw"
46     )
47     client.succeed("machinectl pull-tar --verify=signature http://server/testimage2.tar.xz")
48     client.succeed(
49         "cmp /var/lib/machines/testimage2/${pkgs.hello}/bin/hello ${pkgs.hello}/bin/hello"
50     )
51   '';