Merge pull request #174441 from tljuniper/172325-nixostest-override-python-pkgs-additional-param

nixos/test-driver: additional Python packages in test driver

Changed files
+79 -5
nixos
+22
nixos/doc/manual/development/writing-nixos-tests.section.md
···
def foo_running():
machine.succeed("pgrep -x foo")
```
+
+
## Adding Python packages to the test script {#ssec-python-packages-in-test-script}
+
+
When additional Python libraries are required in the test script, they can be
+
added using the parameter `extraPythonPackages`. For example, you could add
+
`numpy` like this:
+
+
```nix
+
import ./make-test-python.nix
+
{
+
extraPythonPackages = p: [ p.numpy ];
+
+
nodes = { };
+
+
testScript = ''
+
import numpy as np
+
assert str(np.zeros(4) == "array([0., 0., 0., 0.])")
+
'';
+
}
+
```
+
+
In that case, `numpy` is chosen from the generic `python3Packages`.
+26
nixos/doc/manual/from_md/development/writing-nixos-tests.section.xml
···
```
</programlisting>
</section>
+
<section xml:id="ssec-python-packages-in-test-script">
+
<title>Adding Python packages to the test script</title>
+
<para>
+
When additional Python libraries are required in the test script,
+
they can be added using the parameter
+
<literal>extraPythonPackages</literal>. For example, you could add
+
<literal>numpy</literal> like this:
+
</para>
+
<programlisting language="bash">
+
import ./make-test-python.nix
+
{
+
extraPythonPackages = p: [ p.numpy ];
+
+
nodes = { };
+
+
testScript = ''
+
import numpy as np
+
assert str(np.zeros(4) == &quot;array([0., 0., 0., 0.])&quot;)
+
'';
+
}
+
</programlisting>
+
<para>
+
In that case, <literal>numpy</literal> is chosen from the generic
+
<literal>python3Packages</literal>.
+
</para>
+
</section>
</section>
+12 -2
nixos/lib/test-driver/default.nix
···
, socat
, tesseract4
, vde2
+
, extraPythonPackages ? (_ : [])
}:
python3Packages.buildPythonApplication rec {
···
version = "1.1";
src = ./.;
-
propagatedBuildInputs = [ coreutils netpbm python3Packages.colorama python3Packages.ptpython qemu_pkg socat vde2 ]
-
++ (lib.optionals enableOCR [ imagemagick_light tesseract4 ]);
+
propagatedBuildInputs = [
+
coreutils
+
netpbm
+
python3Packages.colorama
+
python3Packages.ptpython
+
qemu_pkg
+
socat
+
vde2
+
]
+
++ (lib.optionals enableOCR [ imagemagick_light tesseract4 ])
+
++ extraPythonPackages python3Packages;
doCheck = true;
checkInputs = with python3Packages; [ mypy pylint black ];
+5 -3
nixos/lib/testing-python.nix
···
, skipTypeCheck ? false
, passthru ? {}
, interactive ? false
+
, extraPythonPackages ? (_ :[])
}:
let
# Reifies and correctly wraps the python test driver for
# the respective qemu version and with or without ocr support
testDriver = pkgs.callPackage ./test-driver {
-
inherit enableOCR;
+
inherit enableOCR extraPythonPackages;
qemu_pkg = qemu_test;
imagemagick_light = imagemagick_light.override { inherit libtiff; };
tesseract4 = tesseract4.override { enableLanguages = [ "eng" ]; };
···
(if meta.description or null != null
then builtins.unsafeGetAttrPos "description" meta
else builtins.unsafeGetAttrPos "testScript" t)
+
, extraPythonPackages ? (_ : [])
} @ t:
let
mkNodes = qemu_pkg:
···
);
driver = setupDriverForTest {
-
inherit testScript enableOCR skipTypeCheck skipLint passthru;
+
inherit testScript enableOCR skipTypeCheck skipLint passthru extraPythonPackages;
testName = name;
qemu_pkg = pkgs.qemu_test;
nodes = mkNodes pkgs.qemu_test;
};
driverInteractive = setupDriverForTest {
-
inherit testScript enableOCR skipTypeCheck skipLint passthru;
+
inherit testScript enableOCR skipTypeCheck skipLint passthru extraPythonPackages;
testName = name;
qemu_pkg = pkgs.qemu;
nodes = mkNodes pkgs.qemu;
+1
nixos/tests/all-tests.nix
···
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
etebase-server = handleTest ./etebase-server.nix {};
etesync-dav = handleTest ./etesync-dav.nix {};
+
extra-python-packages = handleTest ./extra-python-packages.nix {};
fancontrol = handleTest ./fancontrol.nix {};
fcitx = handleTest ./fcitx {};
fenics = handleTest ./fenics.nix {};
+13
nixos/tests/extra-python-packages.nix
···
+
import ./make-test-python.nix ({ ... }:
+
{
+
name = "extra-python-packages";
+
+
extraPythonPackages = p: [ p.numpy ];
+
+
nodes = { };
+
+
testScript = ''
+
import numpy as np
+
assert str(np.zeros(4) == "array([0., 0., 0., 0.])")
+
'';
+
})