diff options
author | Silvan Mosberger <contact@infinisil.com> | 2020-09-02 22:34:13 +0200 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2020-11-30 23:51:23 +0100 |
commit | 3e39d6efdf65ce8fbf18471c0bb1062b28bfe984 (patch) | |
tree | aa417ae5b9d29712d12d6c24c296ed6e980b08df /lib | |
parent | 900c4a5abd1061db2390224849cbc5eb8eb07059 (diff) |
lib/tests: Add tests for module-builtin assertions
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/tests/modules.sh | 37 | ||||
-rw-r--r-- | lib/tests/modules/assertions/enable-false.nix | 8 | ||||
-rw-r--r-- | lib/tests/modules/assertions/enable-lazy.nix | 17 | ||||
-rw-r--r-- | lib/tests/modules/assertions/multi.nix | 23 | ||||
-rw-r--r-- | lib/tests/modules/assertions/non-cascading.nix | 17 | ||||
-rw-r--r-- | lib/tests/modules/assertions/simple.nix | 6 | ||||
-rw-r--r-- | lib/tests/modules/assertions/submodule-attrsOf-attrsOf.nix | 13 | ||||
-rw-r--r-- | lib/tests/modules/assertions/submodule-attrsOf.nix | 13 | ||||
-rw-r--r-- | lib/tests/modules/assertions/submodule.nix | 13 | ||||
-rw-r--r-- | lib/tests/modules/assertions/trigger-lazy.nix | 15 | ||||
-rw-r--r-- | lib/tests/modules/assertions/trigger-submodule.nix | 18 | ||||
-rw-r--r-- | lib/tests/modules/assertions/underscore-attributes.nix | 8 | ||||
-rw-r--r-- | lib/tests/modules/assertions/warning.nix | 9 |
13 files changed, 197 insertions, 0 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 012835e48c13..65eb91c99276 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -275,6 +275,43 @@ checkConfigOutput true config.value.mkbefore ./types-anything/mk-mods.nix checkConfigOutput 1 config.value.nested.foo ./types-anything/mk-mods.nix checkConfigOutput baz config.value.nested.bar.baz ./types-anything/mk-mods.nix +## Module assertions +# Check that assertions are triggered by default for just evaluating config +checkConfigError 'Failed assertions:\n- \[test\] Assertion failed' config ./assertions/simple.nix +# Check that assertions are only triggered if they have a triggerPath that's evaluated +checkConfigError 'Failed assertions:\n- \[test\] Assertion failed' config.foo ./assertions/trigger-lazy.nix +checkConfigOutput true config.bar ./assertions/trigger-lazy.nix + +# The assertions enable condition should only be evaluated if the trigger is evaluated +checkConfigError 'enable evaluated' config.foo ./assertions/enable-lazy.nix +checkConfigOutput true config.bar ./assertions/enable-lazy.nix + +# Assertion is not triggered when enable is false +checkConfigOutput '{ }' config ./assertions/enable-false.nix + +# Warnings should be displayed on standard error +checkConfigCodeOutErr 0 '{ }' 'warning: \[test\] Warning message' config ./assertions/warning.nix + +# A triggerPath can be set to a submodule path +checkConfigOutput '{ baz = <CODE>; }' config.foo.bar ./assertions/trigger-submodule.nix +checkConfigError 'Failed assertions:\n- \[test\] Assertion failed' config.foo.bar.baz ./assertions/trigger-submodule.nix + +# Check that multiple assertions and warnings can be triggered at once +checkConfigError 'Failed assertions:\n- \[test1\] Assertion 1 failed\n- \[test2\] Assertion 2 failed' config ./assertions/multi.nix +checkConfigError 'trace: warning: \[test3\] Warning 3 failed\ntrace: warning: \[test4\] Warning 4 failed' config ./assertions/multi.nix + +# Submodules should be able to trigger assertions and display the submodule prefix in their error +checkConfigError 'Failed assertions:\n- \[foo/test\] Assertion failed' config.foo ./assertions/submodule.nix +checkConfigError 'Failed assertions:\n- \[foo.bar/test\] Assertion failed' config.foo.bar ./assertions/submodule-attrsOf.nix +checkConfigError 'Failed assertions:\n- \[foo.bar.baz/test\] Assertion failed' config.foo.bar.baz ./assertions/submodule-attrsOf-attrsOf.nix + +# Assertions aren't triggered when the trigger path is only evaluated from within the same module evaluation +# This behavior is necessary to allow assertions to depend on config values. This could potentially be changed in the future if all of NixOS' assertions are rewritten to not depend on any config values +checkConfigOutput true config.bar ./assertions/non-cascading.nix + +# Assertions with an attribute starting with _ shouldn't have their name displayed +checkConfigError 'Failed assertions:\n- Assertion failed' config ./assertions/underscore-attributes.nix + cat <<EOF ====== module tests ====== $pass Pass diff --git a/lib/tests/modules/assertions/enable-false.nix b/lib/tests/modules/assertions/enable-false.nix new file mode 100644 index 000000000000..13b9d99ac701 --- /dev/null +++ b/lib/tests/modules/assertions/enable-false.nix @@ -0,0 +1,8 @@ +{ + + _module.assertions.test = { + enable = false; + message = "Assertion failed"; + }; + +} diff --git a/lib/tests/modules/assertions/enable-lazy.nix b/lib/tests/modules/assertions/enable-lazy.nix new file mode 100644 index 000000000000..24b4d15fb8f7 --- /dev/null +++ b/lib/tests/modules/assertions/enable-lazy.nix @@ -0,0 +1,17 @@ +{ lib, ... }: { + + options.foo = lib.mkOption { + default = true; + }; + + options.bar = lib.mkOption { + default = true; + }; + + config._module.assertions.test = { + enable = throw "enable evaluated"; + message = "Assertion failed"; + triggerPath = [ "foo" ]; + }; + +} diff --git a/lib/tests/modules/assertions/multi.nix b/lib/tests/modules/assertions/multi.nix new file mode 100644 index 000000000000..e2fe4ac1a2c5 --- /dev/null +++ b/lib/tests/modules/assertions/multi.nix @@ -0,0 +1,23 @@ +{ + + _module.assertions = { + test1 = { + enable = true; + message = "Assertion 1 failed"; + }; + test2 = { + enable = true; + message = "Assertion 2 failed"; + }; + test3 = { + enable = true; + message = "Warning 3 failed"; + type = "warning"; + }; + test4 = { + enable = true; + message = "Warning 4 failed"; + type = "warning"; + }; + }; +} diff --git a/lib/tests/modules/assertions/non-cascading.nix b/lib/tests/modules/assertions/non-cascading.nix new file mode 100644 index 000000000000..33ade1032a1f --- /dev/null +++ b/lib/tests/modules/assertions/non-cascading.nix @@ -0,0 +1,17 @@ +{ lib, config, ... }: { + + options.foo = lib.mkOption { + default = true; + }; + + options.bar = lib.mkOption { + default = config.foo; + }; + + config._module.assertions.foo = { + enable = true; + message = "Foo assertion"; + triggerPath = [ "foo" ]; + }; + +} diff --git a/lib/tests/modules/assertions/simple.nix b/lib/tests/modules/assertions/simple.nix new file mode 100644 index 000000000000..c5128586ec3a --- /dev/null +++ b/lib/tests/modules/assertions/simple.nix @@ -0,0 +1,6 @@ +{ + _module.assertions.test = { + enable = true; + message = "Assertion failed"; + }; +} diff --git a/lib/tests/modules/assertions/submodule-attrsOf-attrsOf.nix b/lib/tests/modules/assertions/submodule-attrsOf-attrsOf.nix new file mode 100644 index 000000000000..2c7db40dd5b3 --- /dev/null +++ b/lib/tests/modules/assertions/submodule-attrsOf-attrsOf.nix @@ -0,0 +1,13 @@ +{ lib, ... }: { + + options.foo = lib.mkOption { + default = { bar.baz = {}; }; + type = lib.types.attrsOf (lib.types.attrsOf (lib.types.submodule { + _module.assertions.test = { + enable = true; + message = "Assertion failed"; + }; + })); + }; + +} diff --git a/lib/tests/modules/assertions/submodule-attrsOf.nix b/lib/tests/modules/assertions/submodule-attrsOf.nix new file mode 100644 index 000000000000..78e106181d32 --- /dev/null +++ b/lib/tests/modules/assertions/submodule-attrsOf.nix @@ -0,0 +1,13 @@ +{ lib, ... }: { + + options.foo = lib.mkOption { + default = { bar = {}; }; + type = lib.types.attrsOf (lib.types.submodule { + _module.assertions.test = { + enable = true; + message = "Assertion failed"; + }; + }); + }; + +} diff --git a/lib/tests/modules/assertions/submodule.nix b/lib/tests/modules/assertions/submodule.nix new file mode 100644 index 000000000000..292593816d67 --- /dev/null +++ b/lib/tests/modules/assertions/submodule.nix @@ -0,0 +1,13 @@ +{ lib, ... }: { + + options.foo = lib.mkOption { + default = {}; + type = lib.types.submodule { + _module.assertions.test = { + enable = true; + message = "Assertion failed"; + }; + }; + }; + +} diff --git a/lib/tests/modules/assertions/trigger-lazy.nix b/lib/tests/modules/assertions/trigger-lazy.nix new file mode 100644 index 000000000000..812a9ffad07e --- /dev/null +++ b/lib/tests/modules/assertions/trigger-lazy.nix @@ -0,0 +1,15 @@ +{ lib, ... }: { + options.foo = lib.mkOption { + default = true; + }; + + options.bar = lib.mkOption { + default = true; + }; + + config._module.assertions.test = { + enable = true; + message = "Assertion failed"; + triggerPath = [ "foo" ]; + }; +} diff --git a/lib/tests/modules/assertions/trigger-submodule.nix b/lib/tests/modules/assertions/trigger-submodule.nix new file mode 100644 index 000000000000..b5c7821f00f5 --- /dev/null +++ b/lib/tests/modules/assertions/trigger-submodule.nix @@ -0,0 +1,18 @@ +{ lib, ... }: { + + options.foo = lib.mkOption { + default = { bar = {}; }; + type = lib.types.attrsOf (lib.types.submodule { + options.baz = lib.mkOption { + default = true; + }; + }); + }; + + config._module.assertions.test = { + enable = true; + message = "Assertion failed"; + triggerPath = [ "foo" "bar" "baz" ]; + }; + +} diff --git a/lib/tests/modules/assertions/underscore-attributes.nix b/lib/tests/modules/assertions/underscore-attributes.nix new file mode 100644 index 000000000000..a485cd2e1bd9 --- /dev/null +++ b/lib/tests/modules/assertions/underscore-attributes.nix @@ -0,0 +1,8 @@ +{ + + _module.assertions._test = { + enable = true; + message = "Assertion failed"; + }; + +} diff --git a/lib/tests/modules/assertions/warning.nix b/lib/tests/modules/assertions/warning.nix new file mode 100644 index 000000000000..6c1dd2c750e6 --- /dev/null +++ b/lib/tests/modules/assertions/warning.nix @@ -0,0 +1,9 @@ +{ + + _module.assertions.test = { + enable = true; + type = "warning"; + message = "Warning message"; + }; + +} |