Merge pull request #47684 from roberth/nixpkgs-nixosTest

Add pkgs.nixosTest
This commit is contained in:
Matthew Bauer 2018-11-14 11:20:46 -06:00 committed by GitHub
commit 0874ee8f05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 111 additions and 4 deletions

View File

@ -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; };
};

View File

@ -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

View File

@ -30,5 +30,7 @@ with pkgs;
cross = callPackage ./cross {};
nixos-functions = callPackage ./nixos-functions {};
patch-shebangs = callPackage ./patch-shebangs {};
}

View File

@ -0,0 +1,33 @@
/*
This file is a test that makes sure that the `pkgs.nixos` and
`pkgs.nixosTest` functions work. It's far from a perfect test suite,
but better than not checking them at all on hydra.
To run this test:
nixpkgs$ nix-build -A tests.nixos-functions
*/
{ pkgs, lib, stdenv, ... }:
lib.optionalAttrs stdenv.hostPlatform.isLinux (
pkgs.recurseIntoAttrs {
nixos-test = (pkgs.nixos {
boot.loader.grub.enable = false;
fileSystems."/".device = "/dev/null";
}).toplevel;
nixosTest-test = pkgs.nixosTest ({ lib, pkgs, ... }: {
name = "nixosTest-test";
machine = { pkgs, ... }: {
environment.systemPackages = [ pkgs.hello ];
};
testScript = ''
$machine->succeed("hello");
'';
});
}
)

View File

@ -22219,6 +22219,61 @@ with pkgs;
);
}).config.system.build;
/*
* Run a NixOS VM network test using this evaluation of Nixpkgs.
*
* It is mostly equivalent to `import ./make-test.nix` from the
* NixOS manual[1], except that your `pkgs` will be used instead of
* letting NixOS invoke Nixpkgs again. If a test machine needs to
* set NixOS options under `nixpkgs`, it must set only the
* `nixpkgs.pkgs` option. For the details, see the Nixpkgs
* `pkgs.nixos` documentation.
*
* 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.
*
* [1]: For writing NixOS tests, see
* https://nixos.org/nixos/manual/index.html#sec-nixos-tests
*/
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 {};