diff options
author | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2015-02-23 12:12:01 -0800 |
---|---|---|
committer | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2015-02-23 12:12:01 -0800 |
commit | 7699f34c524a50959c475425587f6b07d443a9e9 (patch) | |
tree | e9b059645940b2f5d67830ddeacc7b971671d845 /lib | |
parent | 1cddb5be20bc52ec6b7d765bad177d19c3514833 (diff) | |
parent | de0f122b016c88ffdfa092a2acc0d6bd81e32613 (diff) | |
download | nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar.gz nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar.bz2 nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar.lz nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar.xz nixlib-7699f34c524a50959c475425587f6b07d443a9e9.tar.zst nixlib-7699f34c524a50959c475425587f6b07d443a9e9.zip |
Merge pull request #6242 from nbp/issue-6161
Issue #6161 - Add tests for NixOS modules.
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/tests/modules.sh | 94 | ||||
-rw-r--r-- | lib/tests/modules/declare-enable.nix | 14 | ||||
-rw-r--r-- | lib/tests/modules/declare-loaOfSub-any-enable.nix | 29 | ||||
-rw-r--r-- | lib/tests/modules/default.nix | 7 | ||||
-rw-r--r-- | lib/tests/modules/define-enable-force.nix | 5 | ||||
-rw-r--r-- | lib/tests/modules/define-enable.nix | 3 | ||||
-rw-r--r-- | lib/tests/modules/define-force-enable.nix | 5 | ||||
-rw-r--r-- | lib/tests/modules/define-force-loaOfSub-foo-enable.nix | 5 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-bar-enable.nix | 3 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-bar.nix | 3 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-foo-enable-force.nix | 5 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-foo-enable.nix | 3 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-foo-force-enable.nix | 7 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-foo.nix | 3 | ||||
-rw-r--r-- | lib/tests/modules/define-loaOfSub-force-foo-enable.nix | 7 | ||||
-rw-r--r-- | lib/tests/release.nix | 31 |
16 files changed, 224 insertions, 0 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh new file mode 100755 index 000000000000..58231a356369 --- /dev/null +++ b/lib/tests/modules.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# +# This script is used to test that the module system is working as expected. +# By default it test the version of nixpkgs which is defined in the NIX_PATH. + +cd ./modules + +pass=0 +fail=0 + +evalConfig() { + local attr=$1 + shift; + local script="import ./default.nix { modules = [ $@ ];}" + nix-instantiate --timeout 1 -E "$script" -A "$attr" --eval-only +} + +reportFailure() { + local attr=$1 + shift; + local script="import ./default.nix { modules = [ $@ ];}" + echo 2>&1 "$ nix-instantiate -E '$script' -A '$attr' --eval-only" + evalConfig "$attr" "$@" + fail=$((fail + 1)) +} + +checkConfigOutput() { + local outputContains=$1 + shift; + if evalConfig "$@" 2>/dev/null | grep --silent "$outputContains" ; then + pass=$((pass + 1)) + return 0; + else + echo 2>&1 "error: Expected result matching '$outputContains', while evaluating" + reportFailure "$@" + return 1 + fi +} + +checkConfigError() { + local errorContains=$1 + local err="" + shift; + if err==$(evalConfig "$@" 2>&1 >/dev/null); then + echo 2>&1 "error: Expected error code, got exit code 0, while evaluating" + reportFailure "$@" + return 1 + else + if echo "$err" | grep --silent "$errorContains" ; then + pass=$((pass + 1)) + return 0; + else + echo 2>&1 "error: Expected error matching '$errorContains', while evaluating" + reportFailure "$@" + return 1 + fi + fi +} + +checkConfigOutput "false" config.enable ./declare-enable.nix +checkConfigError 'The option .* defined in .* does not exist.' config.enable ./define-enable.nix +set -- config.enable ./declare-enable.nix ./define-enable.nix +checkConfigOutput "true" "$@" +checkConfigOutput "false" "$@" ./define-force-enable.nix +checkConfigOutput "false" "$@" ./define-enable-force.nix + +checkConfigError 'attribute .*foo.* .* not found' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix +checkConfigOutput 'false' config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix +set -- config.loaOfSub.foo.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo-enable.nix +checkConfigOutput 'true' "$@" +checkConfigOutput 'false' "$@" ./define-force-loaOfSub-foo-enable.nix +checkConfigOutput 'false' "$@" ./define-loaOfSub-force-foo-enable.nix +checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-force-enable.nix +checkConfigOutput 'false' "$@" ./define-loaOfSub-foo-enable-force.nix + +checkConfigError 'attribute .*bar.* .* not found' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix +checkConfigOutput 'false' config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar.nix +set -- config.loaOfSub.bar.enable ./declare-loaOfSub-any-enable.nix ./define-loaOfSub-foo.nix ./define-loaOfSub-bar-enable.nix +checkConfigOutput 'true' "$@" +checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-force-loaOfSub-foo-enable.nix +checkConfigError 'attribute .*bar.* .* not found' "$@" ./define-loaOfSub-force-foo-enable.nix +checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-force-enable.nix +checkConfigOutput 'true' "$@" ./define-loaOfSub-foo-enable-force.nix + +cat <<EOF +====== module tests ====== +$pass Pass +$fail Fail +EOF + +if test $fail -ne 0; then + exit 1 +fi +exit 0 diff --git a/lib/tests/modules/declare-enable.nix b/lib/tests/modules/declare-enable.nix new file mode 100644 index 000000000000..ebee243c7568 --- /dev/null +++ b/lib/tests/modules/declare-enable.nix @@ -0,0 +1,14 @@ +{ lib, ... }: + +{ + options = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Some descriptive text + ''; + }; + }; +} diff --git a/lib/tests/modules/declare-loaOfSub-any-enable.nix b/lib/tests/modules/declare-loaOfSub-any-enable.nix new file mode 100644 index 000000000000..71dad1c91359 --- /dev/null +++ b/lib/tests/modules/declare-loaOfSub-any-enable.nix @@ -0,0 +1,29 @@ +{ lib, ... }: + +let + submod = { ... }: { + options = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Some descriptive text + ''; + }; + }; + }; +in + +{ + options = { + loaOfSub = lib.mkOption { + default = {}; + example = {}; + type = lib.types.loaOf (lib.types.submodule [ submod ]); + description = '' + Some descriptive text + ''; + }; + }; +} diff --git a/lib/tests/modules/default.nix b/lib/tests/modules/default.nix new file mode 100644 index 000000000000..5df7d9751eab --- /dev/null +++ b/lib/tests/modules/default.nix @@ -0,0 +1,7 @@ +{ lib ? import <nixpkgs/lib>, modules ? [] }: + +{ + inherit (lib.evalModules { + inherit modules; + }) config options; +} diff --git a/lib/tests/modules/define-enable-force.nix b/lib/tests/modules/define-enable-force.nix new file mode 100644 index 000000000000..f4990a328631 --- /dev/null +++ b/lib/tests/modules/define-enable-force.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +{ + enable = lib.mkForce false; +} diff --git a/lib/tests/modules/define-enable.nix b/lib/tests/modules/define-enable.nix new file mode 100644 index 000000000000..7dc26010ae59 --- /dev/null +++ b/lib/tests/modules/define-enable.nix @@ -0,0 +1,3 @@ +{ + enable = true; +} diff --git a/lib/tests/modules/define-force-enable.nix b/lib/tests/modules/define-force-enable.nix new file mode 100644 index 000000000000..978caa2a8c07 --- /dev/null +++ b/lib/tests/modules/define-force-enable.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +lib.mkForce { + enable = false; +} diff --git a/lib/tests/modules/define-force-loaOfSub-foo-enable.nix b/lib/tests/modules/define-force-loaOfSub-foo-enable.nix new file mode 100644 index 000000000000..bfd8e084b590 --- /dev/null +++ b/lib/tests/modules/define-force-loaOfSub-foo-enable.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +lib.mkForce { + loaOfSub.foo.enable = false; +} diff --git a/lib/tests/modules/define-loaOfSub-bar-enable.nix b/lib/tests/modules/define-loaOfSub-bar-enable.nix new file mode 100644 index 000000000000..422bb0a600bf --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-bar-enable.nix @@ -0,0 +1,3 @@ +{ + loaOfSub.bar.enable = true; +} diff --git a/lib/tests/modules/define-loaOfSub-bar.nix b/lib/tests/modules/define-loaOfSub-bar.nix new file mode 100644 index 000000000000..c24315e09b6e --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-bar.nix @@ -0,0 +1,3 @@ +{ + loaOfSub.bar = {}; +} diff --git a/lib/tests/modules/define-loaOfSub-foo-enable-force.nix b/lib/tests/modules/define-loaOfSub-foo-enable-force.nix new file mode 100644 index 000000000000..c1d7b198be54 --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-foo-enable-force.nix @@ -0,0 +1,5 @@ +{ lib, ... }: + +{ + loaOfSub.foo.enable = lib.mkForce false; +} diff --git a/lib/tests/modules/define-loaOfSub-foo-enable.nix b/lib/tests/modules/define-loaOfSub-foo-enable.nix new file mode 100644 index 000000000000..822425c71bb9 --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-foo-enable.nix @@ -0,0 +1,3 @@ +{ + loaOfSub.foo.enable = true; +} diff --git a/lib/tests/modules/define-loaOfSub-foo-force-enable.nix b/lib/tests/modules/define-loaOfSub-foo-force-enable.nix new file mode 100644 index 000000000000..dce0ef547b31 --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-foo-force-enable.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + loaOfSub.foo = lib.mkForce { + enable = false; + }; +} diff --git a/lib/tests/modules/define-loaOfSub-foo.nix b/lib/tests/modules/define-loaOfSub-foo.nix new file mode 100644 index 000000000000..e9b2e631f2ec --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-foo.nix @@ -0,0 +1,3 @@ +{ + loaOfSub.foo = {}; +} diff --git a/lib/tests/modules/define-loaOfSub-force-foo-enable.nix b/lib/tests/modules/define-loaOfSub-force-foo-enable.nix new file mode 100644 index 000000000000..df5722274ee5 --- /dev/null +++ b/lib/tests/modules/define-loaOfSub-force-foo-enable.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + loaOfSub = lib.mkForce { + foo.enable = false; + }; +} diff --git a/lib/tests/release.nix b/lib/tests/release.nix new file mode 100644 index 000000000000..e7fb52f67665 --- /dev/null +++ b/lib/tests/release.nix @@ -0,0 +1,31 @@ +{ nixpkgs }: + +with import ./../.. { }; +with lib; + +stdenv.mkDerivation { + name = "nixpkgs-lib-tests"; + buildInputs = [ nix ]; + NIX_PATH="nixpkgs=${nixpkgs}"; + + buildCommand = '' + datadir="${nix}/share" + export TEST_ROOT=$(pwd)/test-tmp + export NIX_STORE_DIR=$TEST_ROOT/store + export NIX_LOCALSTATE_DIR=$TEST_ROOT/var + export NIX_LOG_DIR=$TEST_ROOT/var/log/nix + export NIX_STATE_DIR=$TEST_ROOT/var/nix + export NIX_DB_DIR=$TEST_ROOT/db + export NIX_CONF_DIR=$TEST_ROOT/etc + export NIX_MANIFESTS_DIR=$TEST_ROOT/var/nix/manifests + export NIX_BUILD_HOOK= + export PAGER=cat + cacheDir=$TEST_ROOT/binary-cache + nix-store --init + + cd ${nixpkgs}/lib/tests + ./modules.sh + + touch $out + ''; +} |