summaryrefslogtreecommitdiffstats
path: root/nixos/lib/testing-python.nix
blob: 1d2777ecb033577a4ac1a821dc9df42606d451be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
args@{
  system,
  pkgs ? import ../.. { inherit system config; },
  # Use a minimal kernel?
  minimal ? false,
  # Ignored
  config ? { },
  # !!! See comment about args in lib/modules.nix
  specialArgs ? throw "legacy - do not use, see error below",
  # Modules to add to each VM
  extraConfigurations ? [ ],
}:
let
  nixos-lib = import ./default.nix { inherit (pkgs) lib; };
in

pkgs.lib.throwIf (args ? specialArgs)
  ''
    testing-python.nix: `specialArgs` is not supported anymore. If you're looking
    for the public interface to the NixOS test framework, use `runTest`, and
    `node.specialArgs`.
    See https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
    and https://nixos.org/manual/nixos/unstable/index.html#test-opt-node.specialArgs
  ''
  rec {

    inherit pkgs;

    evalTest =
      module:
      nixos-lib.evalTest {
        imports = [
          extraTestModule
          module
        ];
      };
    runTest =
      module:
      nixos-lib.runTest {
        imports = [
          extraTestModule
          module
        ];
      };

    extraTestModule = {
      config = {
        hostPkgs = pkgs;
      };
    };

    # Make a full-blown test (legacy)
    # For an official public interface to the tests, see
    # https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
    makeTest =
      {
        machine ? null,
        nodes ? { },
        containers ? { },
        testScript,
        enableOCR ? false,
        globalTimeout ? (60 * 60),
        name ? "unnamed",
        skipTypeCheck ? false,
        # Skip linting (mainly intended for faster dev cycles)
        skipLint ? false,
        passthru ? { },
        meta ? { },
        # For meta.position
        pos ? # position used in error messages and for meta.position
          (
            if meta.description or null != null then
              builtins.unsafeGetAttrPos "description" meta
            else
              builtins.unsafeGetAttrPos "testScript" t
          ),
        extraPythonPackages ? (_: [ ]),
        interactive ? { },
        sshBackdoor ? { },
      }@t:
      let
        testConfig =
          (evalTest {
            imports = [
              {
                _file = "makeTest parameters";
                config = t;
              }
              {
                defaults = {
                  _file = "makeTest: extraConfigurations";
                  imports = extraConfigurations;
                };
              }
            ];
          }).config;
      in
      testConfig.test # For nix-build
      // testConfig; # For all-tests.nix

    simpleTest = as: (makeTest as).test;

  }