summary refs log tree commit diff
path: root/lib/tests/modules.sh
diff options
context:
space:
mode:
authorNicolas B. Pierron <nicolas.b.pierron@gmail.com>2015-02-08 21:48:38 +0100
committerNicolas B. Pierron <nicolas.b.pierron@gmail.com>2015-02-09 00:07:44 +0100
commit6d15e32536abbcef919b706f073c7fea46cf9229 (patch)
tree6c184b1cb051ddd2b155da740312e93d0d1df733 /lib/tests/modules.sh
parentd54611bde7468dafa9145335ed56504df4e10445 (diff)
downloadnixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar.gz
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar.bz2
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar.lz
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar.xz
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.tar.zst
nixpkgs-6d15e32536abbcef919b706f073c7fea46cf9229.zip
Issue #6161 - Add tests for NixOS modules.
Diffstat (limited to 'lib/tests/modules.sh')
-rwxr-xr-xlib/tests/modules.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
new file mode 100755
index 00000000000..9c69df2bd9b
--- /dev/null
+++ b/lib/tests/modules.sh
@@ -0,0 +1,93 @@
+#!/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 -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
+    shift;
+    if evalConfig "$@" 1>/dev/null 2>&1; then
+        echo 2>&1 "error: Expected error code, got exit code 0, while evaluating"
+        reportFailure "$@"
+        return 1
+    fi
+
+    if evalConfig "$@" 2>&1 >/dev/null | grep --silent "$errorContains" ; then
+        pass=$((pass + 1))
+        return 0;
+    else
+        echo 2>&1 "error: Expected error matching '$errorContains', while evaluating"
+        reportFailure "$@"
+        return 1
+    fi
+}
+
+checkConfigOutput "false" config.enable 
+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