about summary refs log tree commit diff
path: root/nixpkgs/pkgs/test/kernel.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/test/kernel.nix')
-rw-r--r--nixpkgs/pkgs/test/kernel.nix90
1 files changed, 58 insertions, 32 deletions
diff --git a/nixpkgs/pkgs/test/kernel.nix b/nixpkgs/pkgs/test/kernel.nix
index 86f1b8d8e9ac..a4da10030332 100644
--- a/nixpkgs/pkgs/test/kernel.nix
+++ b/nixpkgs/pkgs/test/kernel.nix
@@ -1,53 +1,79 @@
+# to run these tests:
+# nix-instantiate --eval --strict . -A tests.kernel-config
+#
+# make sure to use NON EXISTING kernel settings else they may conflict with
+# common-config.nix
 { lib, pkgs }:
 
-with lib.kernel;
-with lib.asserts;
-with lib.modules;
+with lib;
+with kernel;
 
-# To test nixos/modules/system/boot/kernel_config.nix;
 let
-  # copied from release-lib.nix
-  assertTrue = bool:
-    if bool
-    then pkgs.runCommand "evaluated-to-true" {} "touch $out"
-    else pkgs.runCommand "evaluated-to-false" {} "false";
-
   lts_kernel = pkgs.linuxPackages.kernel;
 
-  kernelTestConfig = structuredConfig: (lts_kernel.override {
-    structuredExtraConfig = structuredConfig;
-  }).configfile.structuredConfig;
+  # to see the result once the module transformed the lose structured config
+  getConfig = structuredConfig:
+    (lts_kernel.override {
+      structuredExtraConfig = structuredConfig;
+    }).configfile.structuredConfig;
 
   mandatoryVsOptionalConfig = mkMerge [
-    { USB_DEBUG = option yes;}
-    { USB_DEBUG = yes;}
+    { NIXOS_FAKE_USB_DEBUG = yes;}
+    { NIXOS_FAKE_USB_DEBUG = option yes; }
   ];
 
   freeformConfig = mkMerge [
-    { MMC_BLOCK_MINORS = freeform "32"; } # same as default, won't trigger any error
-    { MMC_BLOCK_MINORS = freeform "64"; } # will trigger an error but the message is not great:
+    { NIXOS_FAKE_MMC_BLOCK_MINORS = freeform "32"; } # same as default, won't trigger any error
+    { NIXOS_FAKE_MMC_BLOCK_MINORS = freeform "64"; } # will trigger an error but the message is not great:
   ];
 
   yesWinsOverNoConfig = mkMerge [
-    # default for "8139TOO_PIO" is no
-    { "8139TOO_PIO"  = yes; } # yes wins over no by default
-    { "8139TOO_PIO"  = no; }
+    # default for "NIXOS_TEST_BOOLEAN" is no
+    { "NIXOS_TEST_BOOLEAN"  = yes; } # yes wins over no by default
+    { "NIXOS_TEST_BOOLEAN"  = no; }
+  ];
+
+  optionalNoWins = mkMerge [
+    { NIXOS_FAKE_USB_DEBUG = option yes;}
+    { NIXOS_FAKE_USB_DEBUG = yes;}
+  ];
+
+  allOptionalRemainOptional = mkMerge [
+    { NIXOS_FAKE_USB_DEBUG = option yes;}
+    { NIXOS_FAKE_USB_DEBUG = option yes;}
   ];
+
 in
-{
+runTests {
+  testEasy = {
+    expr = (getConfig { NIXOS_FAKE_USB_DEBUG = yes;}).NIXOS_FAKE_USB_DEBUG;
+    expected = { tristate = "y"; optional = false; freeform = null; };
+  };
+
   # mandatory flag should win over optional
-  mandatoryCheck = (kernelTestConfig mandatoryVsOptionalConfig);
+  testMandatoryCheck = {
+    expr = (getConfig mandatoryVsOptionalConfig).NIXOS_FAKE_USB_DEBUG.optional;
+    expected = false;
+  };
+
+  testYesWinsOverNo = {
+    expr = (getConfig yesWinsOverNoConfig)."NIXOS_TEST_BOOLEAN".tristate;
+    expected = "y";
+  };
+
+  testAllOptionalRemainOptional = {
+    expr = (getConfig allOptionalRemainOptional)."NIXOS_FAKE_USB_DEBUG".optional;
+    expected = true;
+  };
 
   # check that freeform options are unique
   # Should trigger
-  # > The option `settings.MMC_BLOCK_MINORS.freeform' has conflicting definitions, in `<unknown-file>' and `<unknown-file>'
-  freeformCheck = let
-    res = builtins.tryEval ( (kernelTestConfig freeformConfig).MMC_BLOCK_MINORS.freeform);
-  in
-    assertTrue (res.success == false);
-
-  yesVsNoCheck = let
-    res = kernelTestConfig yesWinsOverNoConfig;
-  in
-    assertTrue (res."8139TOO_PIO".tristate == "y");
+  # > The option `settings.NIXOS_FAKE_MMC_BLOCK_MINORS.freeform' has conflicting definitions, in `<unknown-file>' and `<unknown-file>'
+  testTreeform = let
+    res = builtins.tryEval ( (getConfig freeformConfig).NIXOS_FAKE_MMC_BLOCK_MINORS.freeform);
+  in {
+    expr = res.success;
+    expected = false;
+  };
+
 }