Merge pull request #75703 from kampka/port-tests-3

Port NixOS tests to python
This commit is contained in:
Dmitry Kalinkin 2019-12-20 09:52:33 -05:00 committed by GitHub
commit aa934faff2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 140 additions and 144 deletions

View File

@ -1,6 +1,6 @@
# Mutable users tests. # Mutable users tests.
import ./make-test.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "mutable-users"; name = "mutable-users";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ gleber ]; maintainers = [ gleber ];
@ -19,21 +19,27 @@ import ./make-test.nix ({ pkgs, ...} : {
immutableSystem = nodes.machine.config.system.build.toplevel; immutableSystem = nodes.machine.config.system.build.toplevel;
mutableSystem = nodes.mutable.config.system.build.toplevel; mutableSystem = nodes.mutable.config.system.build.toplevel;
in '' in ''
$machine->start(); machine.start()
$machine->waitForUnit("default.target"); machine.wait_for_unit("default.target")
# Machine starts in immutable mode. Add a user and test if reactivating # Machine starts in immutable mode. Add a user and test if reactivating
# configuration removes the user. # configuration removes the user.
$machine->fail("cat /etc/passwd | grep ^foobar:"); with subtest("Machine in immutable mode"):
$machine->succeed("sudo useradd foobar"); assert "foobar" not in machine.succeed("cat /etc/passwd")
$machine->succeed("cat /etc/passwd | grep ^foobar:"); machine.succeed("sudo useradd foobar")
$machine->succeed("${immutableSystem}/bin/switch-to-configuration test"); assert "foobar" in machine.succeed("cat /etc/passwd")
$machine->fail("cat /etc/passwd | grep ^foobar:"); machine.succeed(
"${immutableSystem}/bin/switch-to-configuration test"
)
assert "foobar" not in machine.succeed("cat /etc/passwd")
# In immutable mode passwd is not wrapped, while in mutable mode it is # In immutable mode passwd is not wrapped, while in mutable mode it is
# wrapped. # wrapped.
$machine->succeed('which passwd | grep /run/current-system/'); with subtest("Password is wrapped in mutable mode"):
$machine->succeed("${mutableSystem}/bin/switch-to-configuration test"); assert "/run/current-system/" in machine.succeed("which passwd")
$machine->succeed('which passwd | grep /run/wrappers/'); machine.succeed(
"${mutableSystem}/bin/switch-to-configuration test"
)
assert "/run/wrappers/" in machine.succeed("which passwd")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... } : { import ./make-test-python.nix ({ pkgs, ... } : {
name = "mxisd"; name = "mxisd";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
@ -19,13 +19,12 @@ import ./make-test.nix ({ pkgs, ... } : {
}; };
testScript = '' testScript = ''
startAll; start_all()
$server_mxisd->waitForUnit("mxisd.service"); server_mxisd.wait_for_unit("mxisd.service")
$server_mxisd->waitForOpenPort(8090); server_mxisd.wait_for_open_port(8090)
$server_mxisd->succeed("curl -Ssf \"http://127.0.0.1:8090/_matrix/identity/api/v1\""); server_mxisd.succeed("curl -Ssf 'http://127.0.0.1:8090/_matrix/identity/api/v1'")
$server_ma1sd->waitForUnit("mxisd.service"); server_ma1sd.wait_for_unit("mxisd.service")
$server_ma1sd->waitForOpenPort(8090); server_ma1sd.wait_for_open_port(8090)
$server_ma1sd->succeed("curl -Ssf \"http://127.0.0.1:8090/_matrix/identity/api/v1\"") server_ma1sd.succeed("curl -Ssf 'http://127.0.0.1:8090/_matrix/identity/api/v1'")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix { import ./make-test-python.nix {
name = "nesting"; name = "nesting";
nodes = { nodes = {
clone = { pkgs, ... }: { clone = { pkgs, ... }: {
@ -19,24 +19,26 @@ import ./make-test.nix {
}; };
}; };
testScript = '' testScript = ''
$clone->waitForUnit("default.target"); clone.wait_for_unit("default.target")
$clone->succeed("cowsay hey"); clone.succeed("cowsay hey")
$clone->fail("hello"); clone.fail("hello")
# Nested clones do inherit from parent with subtest("Nested clones do inherit from parent"):
$clone->succeed("/run/current-system/fine-tune/child-1/bin/switch-to-configuration test"); clone.succeed(
$clone->succeed("cowsay hey"); "/run/current-system/fine-tune/child-1/bin/switch-to-configuration test"
$clone->succeed("hello"); )
clone.succeed("cowsay hey")
clone.succeed("hello")
children.wait_for_unit("default.target")
children.succeed("cowsay hey")
children.fail("hello")
$children->waitForUnit("default.target"); with subtest("Nested children do not inherit from parent"):
$children->succeed("cowsay hey"); children.succeed(
$children->fail("hello"); "/run/current-system/fine-tune/child-1/bin/switch-to-configuration test"
)
# Nested children do not inherit from parent children.fail("cowsay hey")
$children->succeed("/run/current-system/fine-tune/child-1/bin/switch-to-configuration test"); children.succeed("hello")
$children->fail("cowsay hey");
$children->succeed("hello");
''; '';
} }

View File

@ -1,7 +1,7 @@
let let
nginxRoot = "/run/nginx"; nginxRoot = "/run/nginx";
in in
import ./make-test.nix ({...}: { import ./make-test-python.nix ({...}: {
name = "nghttpx"; name = "nghttpx";
nodes = { nodes = {
webserver = { webserver = {
@ -52,10 +52,10 @@ in
}; };
testScript = '' testScript = ''
startAll; start_all()
$webserver->waitForOpenPort("80"); webserver.wait_for_open_port("80")
$proxy->waitForOpenPort("80"); proxy.wait_for_open_port("80")
$client->waitUntilSucceeds("curl -s --fail http://proxy/hello-world.txt"); client.wait_until_succeeds("curl -s --fail http://proxy/hello-world.txt")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "novacomd"; name = "novacomd";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ dtzWill ]; maintainers = [ dtzWill ];
@ -9,26 +9,20 @@ import ./make-test.nix ({ pkgs, ...} : {
}; };
testScript = '' testScript = ''
$machine->waitForUnit("multi-user.target"); machine.wait_for_unit("novacomd.service")
# multi-user.target wants novacomd.service, but let's make sure with subtest("Make sure the daemon is really listening"):
$machine->waitForUnit("novacomd.service"); machine.wait_for_open_port(6968)
machine.succeed("novacom -l")
# Check status and try connecting with novacom with subtest("Stop the daemon, double-check novacom fails if daemon isn't working"):
$machine->succeed("systemctl status novacomd.service >&2"); machine.stop_job("novacomd")
# to prevent non-deterministic failure, machine.fail("novacom -l")
# make sure the daemon is really listening
$machine->waitForOpenPort(6968);
$machine->succeed("novacom -l");
# Stop the daemon, double-check novacom fails if daemon isn't working with subtest("Make sure the daemon starts back up again"):
$machine->stopJob("novacomd"); machine.start_job("novacomd")
$machine->fail("novacom -l"); # make sure the daemon is really listening
machine.wait_for_open_port(6968)
# And back again for good measure machine.succeed("novacom -l")
$machine->startJob("novacomd");
# make sure the daemon is really listening
$machine->waitForOpenPort(6968);
$machine->succeed("novacom -l");
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "nzbget"; name = "nzbget";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ aanderse flokli ]; maintainers = [ aanderse flokli ];
@ -15,12 +15,16 @@ import ./make-test.nix ({ pkgs, ...} : {
}; };
testScript = '' testScript = ''
startAll; start_all()
$server->waitForUnit("nzbget.service"); server.wait_for_unit("nzbget.service")
$server->waitForUnit("network.target"); server.wait_for_unit("network.target")
$server->waitForOpenPort(6789); server.wait_for_open_port(6789)
$server->succeed("curl -s -u nzbget:tegbzn6789 http://127.0.0.1:6789 | grep -q 'This file is part of nzbget'"); assert "This file is part of nzbget" in server.succeed(
$server->succeed("${pkgs.nzbget}/bin/nzbget -n -o ControlIP=127.0.0.1 -o ControlPort=6789 -o ControlPassword=tegbzn6789 -V"); "curl -s -u nzbget:tegbzn6789 http://127.0.0.1:6789"
)
server.succeed(
"${pkgs.nzbget}/bin/nzbget -n -o Control_iP=127.0.0.1 -o Control_port=6789 -o Control_password=tegbzn6789 -V"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ ... } : import ./make-test-python.nix ({ ... } :
let let
server = { pkgs, ... } : { server = { pkgs, ... } : {
@ -52,37 +52,31 @@ in {
testScript = '' testScript = ''
# format storage # format storage
foreach my $server (($server1,$server2)) for server in server1, server2:
{ server.start()
$server->start(); server.wait_for_unit("multi-user.target")
$server->waitForUnit("multi-user.target"); server.succeed("mkdir -p /data/storage /data/meta")
$server->succeed("mkdir -p /data/storage /data/meta"); server.succeed("chown orangefs:orangefs /data/storage /data/meta")
$server->succeed("chown orangefs:orangefs /data/storage /data/meta"); server.succeed("chmod 0770 /data/storage /data/meta")
$server->succeed("chmod 0770 /data/storage /data/meta"); server.succeed(
$server->succeed("sudo -g orangefs -u orangefs pvfs2-server -f /etc/orangefs/server.conf"); "sudo -g orangefs -u orangefs pvfs2-server -f /etc/orangefs/server.conf"
} )
# start services after storage is formated on all machines # start services after storage is formated on all machines
foreach my $server (($server1,$server2)) for server in server1, server2:
{ server.succeed("systemctl start orangefs-server.service")
$server->succeed("systemctl start orangefs-server.service");
}
# Check if clients can reach and mount the FS with subtest("clients can reach and mount the FS"):
foreach my $client (($client1,$client2)) for client in client1, client2:
{ client.start()
$client->start(); client.wait_for_unit("orangefs-client.service")
$client->waitForUnit("orangefs-client.service"); # Both servers need to be reachable
# Both servers need to be reachable client.succeed("pvfs2-check-server -h server1 -f orangefs -n tcp -p 3334")
$client->succeed("pvfs2-check-server -h server1 -f orangefs -n tcp -p 3334"); client.succeed("pvfs2-check-server -h server2 -f orangefs -n tcp -p 3334")
$client->succeed("pvfs2-check-server -h server2 -f orangefs -n tcp -p 3334"); client.wait_for_unit("orangefs.mount")
$client->waitForUnit("orangefs.mount");
}
# R/W test between clients
$client1->succeed("echo test > /orangefs/file1");
$client2->succeed("grep test /orangefs/file1");
with subtest("R/W test between clients"):
client1.succeed("echo test > /orangefs/file1")
client2.succeed("grep test /orangefs/file1")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, lib, ... }: import ./make-test-python.nix ({ pkgs, lib, ... }:
let let
port = 5000; port = 5000;
in { in {
@ -45,9 +45,13 @@ in {
testScript = let testScript = let
query = "http://localhost:${toString port}/route/v1/driving/7.41720,43.73304;7.42463,43.73886?steps=true"; query = "http://localhost:${toString port}/route/v1/driving/7.41720,43.73304;7.42463,43.73886?steps=true";
in '' in ''
$machine->waitForUnit("osrm.service"); machine.wait_for_unit("osrm.service")
$machine->waitForOpenPort(${toString port}); machine.wait_for_open_port(${toString port})
$machine->succeed("curl --silent '${query}' | jq .waypoints[0].name | grep -F 'Boulevard Rainier III'"); assert "Boulevard Rainier III" in machine.succeed(
$machine->succeed("curl --silent '${query}' | jq .waypoints[1].name | grep -F 'Avenue de la Costa'"); "curl --silent '${query}' | jq .waypoints[0].name"
)
assert "Avenue de la Costa" in machine.succeed(
"curl --silent '${query}' | jq .waypoints[1].name"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "overlayfs"; name = "overlayfs";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ bachp ]; meta.maintainers = with pkgs.stdenv.lib.maintainers; [ bachp ];
@ -9,49 +9,42 @@ import ./make-test.nix ({ pkgs, ... }: {
}; };
testScript = '' testScript = ''
$machine->succeed("ls /dev"); machine.succeed("ls /dev")
$machine->succeed("mkdir -p /tmp/mnt"); machine.succeed("mkdir -p /tmp/mnt")
# Test ext4 + overlayfs # Test ext4 + overlayfs
$machine->succeed( machine.succeed(
"""
"mkfs.ext4 -F -L overlay-ext4 /dev/vdb", mkfs.ext4 -F -L overlay-ext4 /dev/vdb
"mount -t ext4 /dev/vdb /tmp/mnt", mount -t ext4 /dev/vdb /tmp/mnt
mkdir -p /tmp/mnt/upper /tmp/mnt/lower /tmp/mnt/work /tmp/mnt/merged
"mkdir -p /tmp/mnt/upper /tmp/mnt/lower /tmp/mnt/work /tmp/mnt/merged", # Setup some existing files
echo 'Replace' > /tmp/mnt/lower/replace.txt
# Setup some existing files echo 'Append' > /tmp/mnt/lower/append.txt
"echo 'Replace' > /tmp/mnt/lower/replace.txt", echo 'Overwrite' > /tmp/mnt/lower/overwrite.txt
"echo 'Append' > /tmp/mnt/lower/append.txt", mount -t overlay overlay -o lowerdir=/tmp/mnt/lower,upperdir=/tmp/mnt/upper,workdir=/tmp/mnt/work /tmp/mnt/merged
"echo 'Overwrite' > /tmp/mnt/lower/overwrite.txt", # Test new
echo 'New' > /tmp/mnt/merged/new.txt
"mount -t overlay overlay -o lowerdir=/tmp/mnt/lower,upperdir=/tmp/mnt/upper,workdir=/tmp/mnt/work /tmp/mnt/merged", [[ "\$(cat /tmp/mnt/merged/new.txt)" == "New" ]]
# Test replace
# Test new [[ "\$(cat /tmp/mnt/merged/replace.txt)" == "Replace" ]]
"echo 'New' > /tmp/mnt/merged/new.txt", echo 'Replaced' > /tmp/mnt/merged/replace-tmp.txt
"[[ \"\$(cat /tmp/mnt/merged/new.txt)\" == \"New\" ]]", mv /tmp/mnt/merged/replace-tmp.txt /tmp/mnt/merged/replace.txt
[[ "\$(cat /tmp/mnt/merged/replace.txt)" == "Replaced" ]]
# Test replace # Overwrite
"[[ \"\$(cat /tmp/mnt/merged/replace.txt)\" == \"Replace\" ]]", [[ "\$(cat /tmp/mnt/merged/overwrite.txt)" == "Overwrite" ]]
"echo 'Replaced' > /tmp/mnt/merged/replace-tmp.txt", echo 'Overwritten' > /tmp/mnt/merged/overwrite.txt
"mv /tmp/mnt/merged/replace-tmp.txt /tmp/mnt/merged/replace.txt", [[ "\$(cat /tmp/mnt/merged/overwrite.txt)" == "Overwritten" ]]
"[[ \"\$(cat /tmp/mnt/merged/replace.txt)\" == \"Replaced\" ]]", # Test append
[[ "\$(cat /tmp/mnt/merged/append.txt)" == "Append" ]]
# Overwrite echo 'ed' >> /tmp/mnt/merged/append.txt
"[[ \"\$(cat /tmp/mnt/merged/overwrite.txt)\" == \"Overwrite\" ]]", #"cat /tmp/mnt/merged/append.txt && exit 1
"echo 'Overwritten' > /tmp/mnt/merged/overwrite.txt", [[ "\$(cat /tmp/mnt/merged/append.txt)" == "Append\ned" ]]
"[[ \"\$(cat /tmp/mnt/merged/overwrite.txt)\" == \"Overwritten\" ]]", umount /tmp/mnt/merged
umount /tmp/mnt
# Test append udevadm settle
"[[ \"\$(cat /tmp/mnt/merged/append.txt)\" == \"Append\" ]]", """
"echo 'ed' >> /tmp/mnt/merged/append.txt", )
#"cat /tmp/mnt/merged/append.txt && exit 1",
"[[ \"\$(cat /tmp/mnt/merged/append.txt)\" == \"Append\ned\" ]]",
"umount /tmp/mnt/merged",
"umount /tmp/mnt",
"udevadm settle"
);
''; '';
}) })