summaryrefslogtreecommitdiffstats
path: root/nixos/lib
diff options
context:
space:
mode:
authorAndreas Rammhold <andreas@rammhold.de>2020-10-23 23:09:18 +0200
committerAndreas Rammhold <andreas@rammhold.de>2020-10-25 20:09:33 +0100
commit04100cd281b774fbfa4954bec7b6ee9b3ed62acb (patch)
treed88b8f51615b8d4e43d7a0a620686ad85865b250 /nixos/lib
parentd2a28d3b38ece08992a892c8d4b1dcb45bc2588a (diff)
nixos/tests: restructure test driver so that QEMU is actually overriden
Previously you would be able to override only the QEMU package to be used in the test runner. Frankly that doesn't help a lot if you are trying to get a graphical session. The graphical session requires the option in the NixOS module system to bet set to the correct QEMU package. In this commit I moved most of the test node configuration and transformations into the `mkDriver` function (previously called `driver`). The motivation was to be able to create a `driver` instance with a given QEMU package that will be used consistently througout the test expression.
Diffstat (limited to 'nixos/lib')
-rw-r--r--nixos/lib/testing-python.nix79
1 files changed, 48 insertions, 31 deletions
diff --git a/nixos/lib/testing-python.nix b/nixos/lib/testing-python.nix
index 302c7f78bf8e..b7d64d688775 100644
--- a/nixos/lib/testing-python.nix
+++ b/nixos/lib/testing-python.nix
@@ -9,7 +9,6 @@
# Modules to add to each VM
, extraConfigurations ? [] }:
-with import ./build-vms.nix { inherit system pkgs minimal specialArgs extraConfigurations; };
with pkgs;
rec {
@@ -51,9 +50,6 @@ rec {
'';
};
- testDriver = mkTestDriver qemu_test;
- testDriverInteractive = mkTestDriver qemu_kvm;
-
# Run an automated test suite in the given virtual network.
# `driver' is the script that runs the network.
runTests = driver:
@@ -88,25 +84,7 @@ rec {
maxTestNameLen = 50;
testNameLen = builtins.stringLength name;
- testDriverName = with builtins;
- if testNameLen > maxTestNameLen then
- abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " +
- "it's currently ${toString testNameLen} characters long.")
- else
- "nixos-test-driver-${name}";
-
- nodes = buildVirtualNetwork (
- t.nodes or (if t ? machine then { machine = t.machine; } else { }));
-
- testScript' =
- # Call the test script with the computed nodes.
- if lib.isFunction testScript
- then testScript { inherit nodes; }
- else testScript;
-
- vlans = map (m: m.config.virtualisation.vlans) (lib.attrValues nodes);
- vms = map (m: m.config.system.build.vm) (lib.attrValues nodes);
ocrProg = tesseract4.override { enableLanguages = [ "eng" ]; };
@@ -115,8 +93,38 @@ rec {
# Generate convenience wrappers for running the test driver
# interactively with the specified network, and for starting the
# VMs from the command line.
- driver = testDriver:
- let
+ mkDriver = qemu_pkg:
+ let
+ build-vms = import ./build-vms.nix {
+ inherit system pkgs minimal specialArgs;
+ extraConfigurations = extraConfigurations ++ (pkgs.lib.optional (qemu_pkg != null)
+ {
+ virtualisation.qemu.package = qemu_pkg;
+ }
+ );
+ };
+
+ # FIXME: get this pkg from the module system
+ testDriver = mkTestDriver (if qemu_pkg == null then pkgs.qemu_test else qemu_pkg);
+
+ nodes = build-vms.buildVirtualNetwork (
+ t.nodes or (if t ? machine then { machine = t.machine; } else { }));
+ vlans = map (m: m.config.virtualisation.vlans) (lib.attrValues nodes);
+ vms = map (m: m.config.system.build.vm) (lib.attrValues nodes);
+
+ testScript' =
+ # Call the test script with the computed nodes.
+ if lib.isFunction testScript
+ then testScript { inherit nodes; }
+ else testScript;
+
+ testDriverName = with builtins;
+ if testNameLen > maxTestNameLen then
+ abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " +
+ "it's currently ${toString testNameLen} characters long.")
+ else
+ "nixos-test-driver-${name}";
+
warn = if skipLint then lib.warn "Linting is disabled!" else lib.id;
in
warn (runCommand testDriverName
@@ -124,6 +132,9 @@ rec {
testScript = testScript';
preferLocalBuild = true;
testName = name;
+ passthru = {
+ inherit nodes;
+ };
}
''
mkdir -p $out/bin
@@ -154,9 +165,12 @@ rec {
meta = (drv.meta or {}) // t.meta;
};
- test = passMeta (runTests (driver testDriver));
+ driver = mkDriver null;
+ driverInteractive = mkDriver pkgs.qemu;
+
+ test = passMeta (runTests driver);
- nodeNames = builtins.attrNames nodes;
+ nodeNames = builtins.attrNames driver.nodes;
invalidNodeNames = lib.filter
(node: builtins.match "^[A-z_]([A-z0-9_]+)?$" node == null) nodeNames;
@@ -170,10 +184,9 @@ rec {
Please stick to alphanumeric chars and underscores as separation.
''
else
- test // {
- inherit nodes test;
- driver = driver testDriver;
- driverInteractive = driver testDriverInteractive;
+ test // {
+ inherit test driver driverInteractive;
+ inherit (test) nodes;
};
runInMachine =
@@ -184,7 +197,11 @@ rec {
, ... # ???
}:
let
- vm = buildVM { }
+ build-vms = import ./build-vms.nix {
+ inherit system pkgs minimal specialArgs extraConfigurations;
+ };
+
+ vm = build-vms.buildVM { }
[ machine
{ key = "run-in-machine";
networking.hostName = "client";