summaryrefslogtreecommitdiffstats
path: root/nixos/tests/containers-imperative.nix
diff options
context:
space:
mode:
authorJacek Galowicz <jacek.galowicz@cyberus-technology.de>2019-11-26 09:11:30 +0100
committerJacek Galowicz <jacek.galowicz@cyberus-technology.de>2019-11-27 09:13:02 +0100
commit9de0a8a7b3d15c8a0d0f561589b3c31572e8aebd (patch)
treefaebaee51b0d5ef9a48da1c08acda9313b375642 /nixos/tests/containers-imperative.nix
parent07802f4d204c8cb5e9a8e6ff1ea25063f823798c (diff)
nixos/containers-imperative: Port test to python
Diffstat (limited to 'nixos/tests/containers-imperative.nix')
-rw-r--r--nixos/tests/containers-imperative.nix186
1 files changed, 95 insertions, 91 deletions
diff --git a/nixos/tests/containers-imperative.nix b/nixos/tests/containers-imperative.nix
index 2e7e4b2f1d69..61df74042cb3 100644
--- a/nixos/tests/containers-imperative.nix
+++ b/nixos/tests/containers-imperative.nix
@@ -1,6 +1,6 @@
# Test for NixOS' container support.
-import ./make-test.nix ({ pkgs, ...} : {
+import ./make-test-python.nix ({ pkgs, ...} : {
name = "containers-imperative";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ aristid aszlig eelco kampfschlaefer ];
@@ -36,95 +36,99 @@ import ./make-test.nix ({ pkgs, ...} : {
};
testScript = let
- tmpfilesContainerConfig = pkgs.writeText "container-config-tmpfiles" ''
- {
- systemd.tmpfiles.rules = [ "d /foo - - - - -" ];
- systemd.services.foo = {
- serviceConfig.Type = "oneshot";
- script = "ls -al /foo";
- wantedBy = [ "multi-user.target" ];
- };
- }
- ''; in
- ''
- # Make sure we have a NixOS tree (required by ‘nixos-container create’).
- $machine->succeed("PAGER=cat nix-env -qa -A nixos.hello >&2");
-
- # Create some containers imperatively.
- my $id1 = $machine->succeed("nixos-container create foo --ensure-unique-name");
- chomp $id1;
- $machine->log("created container $id1");
-
- my $id2 = $machine->succeed("nixos-container create foo --ensure-unique-name");
- chomp $id2;
- $machine->log("created container $id2");
-
- die if $id1 eq $id2;
-
- # Put the root of $id2 into a bind mount.
- $machine->succeed(
- "mv /var/lib/containers/$id2 /id2-bindmount",
- "mount --bind /id2-bindmount /var/lib/containers/$id1"
- );
-
- my $ip1 = $machine->succeed("nixos-container show-ip $id1");
- chomp $ip1;
- my $ip2 = $machine->succeed("nixos-container show-ip $id2");
- chomp $ip2;
- die if $ip1 eq $ip2;
-
- # Create a directory and a file we can later check if it still exists
- # after destruction of the container.
- $machine->succeed(
- "mkdir /nested-bindmount",
- "echo important data > /nested-bindmount/dummy",
- );
-
- # Create a directory with a dummy file and bind-mount it into both
- # containers.
- foreach ($id1, $id2) {
- my $importantPath = "/var/lib/containers/$_/very/important/data";
- $machine->succeed(
- "mkdir -p $importantPath",
- "mount --bind /nested-bindmount $importantPath"
- );
- }
-
- # Start one of them.
- $machine->succeed("nixos-container start $id1");
-
- # Execute commands via the root shell.
- $machine->succeed("nixos-container run $id1 -- uname") =~ /Linux/ or die;
-
- # Execute a nix command via the root shell. (regression test for #40355)
- $machine->succeed("nixos-container run $id1 -- nix-instantiate -E 'derivation { name = \"empty\"; builder = \"false\"; system = \"false\"; }'");
-
- # Stop and start (regression test for #4989)
- $machine->succeed("nixos-container stop $id1");
- $machine->succeed("nixos-container start $id1");
-
- # Ensure tmpfiles are present
- $machine->log("creating container tmpfiles");
- $machine->succeed("nixos-container create tmpfiles --config-file ${tmpfilesContainerConfig}");
- $machine->log("created, starting…");
- $machine->succeed("nixos-container start tmpfiles");
- $machine->log("done starting, investigating…");
- $machine->succeed("echo \$(nixos-container run tmpfiles -- systemctl is-active foo.service) | grep -q active;");
- $machine->succeed("nixos-container destroy tmpfiles");
-
- # Execute commands via the root shell.
- $machine->succeed("nixos-container run $id1 -- uname") =~ /Linux/ or die;
-
- # Destroy the containers.
- $machine->succeed("nixos-container destroy $id1");
- $machine->succeed("nixos-container destroy $id2");
-
- $machine->succeed(
- # Check whether destruction of any container has killed important data
- "grep -qF 'important data' /nested-bindmount/dummy",
- # Ensure that the container path is gone
- "test ! -e /var/lib/containers/$id1"
- );
+ tmpfilesContainerConfig = pkgs.writeText "container-config-tmpfiles" ''
+ {
+ systemd.tmpfiles.rules = [ "d /foo - - - - -" ];
+ systemd.services.foo = {
+ serviceConfig.Type = "oneshot";
+ script = "ls -al /foo";
+ wantedBy = [ "multi-user.target" ];
+ };
+ }
+ '';
+ in ''
+ with subtest("Make sure we have a NixOS tree (required by ‘nixos-container create’)"):
+ machine.succeed("PAGER=cat nix-env -qa -A nixos.hello >&2")
+
+ id1, id2 = None, None
+
+ with subtest("Create some containers imperatively"):
+ id1 = machine.succeed("nixos-container create foo --ensure-unique-name").rstrip()
+ machine.log(f"created container {id1}")
+
+ id2 = machine.succeed("nixos-container create foo --ensure-unique-name").rstrip()
+ machine.log(f"created container {id2}")
+
+ assert id1 != id2
+
+ with subtest(f"Put the root of {id2} into a bind mount"):
+ machine.succeed(
+ f"mv /var/lib/containers/{id2} /id2-bindmount",
+ f"mount --bind /id2-bindmount /var/lib/containers/{id1}",
+ )
+
+ ip1 = machine.succeed(f"nixos-container show-ip {id1}").rstrip()
+ ip2 = machine.succeed(f"nixos-container show-ip {id2}").rstrip()
+ assert ip1 != ip2
+
+ with subtest(
+ "Create a directory and a file we can later check if it still exists "
+ + "after destruction of the container"
+ ):
+ machine.succeed("mkdir /nested-bindmount")
+ machine.succeed("echo important data > /nested-bindmount/dummy")
+
+ with subtest(
+ "Create a directory with a dummy file and bind-mount it into both containers."
+ ):
+ for id in id1, id2:
+ important_path = f"/var/lib/containers/{id}/very/important/data"
+ machine.succeed(
+ f"mkdir -p {important_path}",
+ f"mount --bind /nested-bindmount {important_path}",
+ )
+
+ with subtest("Start one of them"):
+ machine.succeed(f"nixos-container start {id1}")
+
+ with subtest("Execute commands via the root shell"):
+ assert "Linux" in machine.succeed(f"nixos-container run {id1} -- uname")
+
+ with subtest("Execute a nix command via the root shell. (regression test for #40355)"):
+ machine.succeed(
+ f"nixos-container run {id1} -- nix-instantiate -E "
+ + '\'derivation { name = "empty"; builder = "false"; system = "false"; }\' '
+ )
+
+ with subtest("Stop and start (regression test for #4989)"):
+ machine.succeed(f"nixos-container stop {id1}")
+ machine.succeed(f"nixos-container start {id1}")
+
+ with subtest("tmpfiles are present"):
+ machine.log("creating container tmpfiles")
+ machine.succeed(
+ "nixos-container create tmpfiles --config-file ${tmpfilesContainerConfig}"
+ )
+ machine.log("created, starting…")
+ machine.succeed("nixos-container start tmpfiles")
+ machine.log("done starting, investigating…")
+ machine.succeed(
+ "echo $(nixos-container run tmpfiles -- systemctl is-active foo.service) | grep -q active;"
+ )
+ machine.succeed("nixos-container destroy tmpfiles")
+
+ with subtest("Execute commands via the root shell"):
+ assert "Linux" in machine.succeed(f"nixos-container run {id1} -- uname")
+
+ with subtest("Destroy the containers"):
+ for id in id1, id2:
+ machine.succeed(f"nixos-container destroy {id}")
+
+ with subtest("Check whether destruction of any container has killed important data"):
+ machine.succeed("grep -qF 'important data' /nested-bindmount/dummy")
+
+ with subtest("Ensure that the container path is gone"):
+ print(machine.succeed("ls -lsa /var/lib/containers"))
+ machine.succeed(f"test ! -e /var/lib/containers/{id1}")
'';
-
})