diff --git a/nixos/lib/build-vms.nix b/nixos/lib/build-vms.nix index 933f8139249..024f4414ebe 100644 --- a/nixos/lib/build-vms.nix +++ b/nixos/lib/build-vms.nix @@ -1,4 +1,13 @@ -{ system, pkgs, minimal ? false, config ? {} }: +{ system +, # Use a minimal kernel? + minimal ? false +, # Ignored + config ? null + # Nixpkgs, for qemu, lib and more +, pkgs +, # NixOS configuration to add to the VMs + extraConfigurations ? [] +}: with pkgs.lib; with import ../lib/qemu-flags.nix { inherit pkgs; }; @@ -28,7 +37,8 @@ rec { ../modules/testing/test-instrumentation.nix # !!! should only get added for automated test runs { key = "no-manual"; documentation.nixos.enable = false; } { key = "qemu"; system.build.qemu = qemu; } - ] ++ optional minimal ../modules/testing/minimal-kernel.nix; + ] ++ optional minimal ../modules/testing/minimal-kernel.nix + ++ extraConfigurations; extraArgs = { inherit nodes; }; }; diff --git a/nixos/lib/testing.nix b/nixos/lib/testing.nix index f90fc9f7df0..690f7dfd5fa 100644 --- a/nixos/lib/testing.nix +++ b/nixos/lib/testing.nix @@ -1,6 +1,13 @@ -{ system, pkgs, minimal ? false, config ? {} }: +{ system +, pkgs + # Use a minimal kernel? +, minimal ? false + # Ignored +, config ? null + # Modules to add to each VM +, extraConfigurations ? [] }: -with import ./build-vms.nix { inherit system pkgs minimal config; }; +with import ./build-vms.nix { inherit system pkgs minimal extraConfigurations; }; with pkgs; let diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ad68a42f3f2..0a86c8ba516 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22243,6 +22243,57 @@ with pkgs; ); }).config.system.build; + + /* + * Run a NixOS VM network test. + * + * This is equivalent to import ./make-test.nix from the NixOS manual + * For details see https://nixos.org/nixos/manual/index.html#sec-nixos-tests + * + * Parameter: + * A NixOS VM test network, or path to it. Example: + * + * { lib, ... }: + * { name = "my-test"; + * nodes = { + * machine-1 = someNixOSConfiguration; + * machine-2 = ...; + * } + * } + * + * Result: + * A derivation that runs the VM test. + * + * For the interaction between Nixpkgs and NixOS configuration + * consult the pkgs.nixos function documentation. + */ + nixosTest = + let + /* The nixos/lib/testing.nix module, preapplied with arguments that + * make sense for this evaluation of Nixpkgs. + */ + nixosTesting = + (import ../../nixos/lib/testing.nix { + inherit (pkgs.stdenv.hostPlatform) system; + inherit pkgs; + extraConfigurations = [( + { lib, ... }: { + config.nixpkgs.pkgs = lib.mkDefault pkgs; + } + )]; + }); + in + test: + let + loadedTest = if builtins.typeOf test == "path" + then import test + else test; + calledTest = if pkgs.lib.isFunction loadedTest + then callPackage loadedTest {} + else loadedTest; + in + nixosTesting.makeTest calledTest; + nixui = callPackage ../tools/package-management/nixui { node_webkit = nwjs_0_12; }; nixdoc = callPackage ../tools/nix/nixdoc {};