1# make sure to use NON EXISTING kernel settings else they may conflict with 2# common-config.nix 3{ lib, pkgs }: 4 5let 6 lts_kernel = pkgs.linuxPackages.kernel; 7 8 # to see the result once the module transformed the lose structured config 9 getConfig = 10 structuredConfig: 11 (lts_kernel.override { 12 structuredExtraConfig = structuredConfig; 13 }).configfile.structuredConfig; 14 15 mandatoryVsOptionalConfig = lib.mkMerge [ 16 { NIXOS_FAKE_USB_DEBUG = lib.kernel.yes; } 17 { NIXOS_FAKE_USB_DEBUG = lib.kernel.option lib.kernel.yes; } 18 ]; 19 20 freeformConfig = lib.mkMerge [ 21 { NIXOS_FAKE_MMC_BLOCK_MINORS = lib.kernel.freeform "32"; } # same as default, won't trigger any error 22 { NIXOS_FAKE_MMC_BLOCK_MINORS = lib.kernel.freeform "64"; } # will trigger an error but the message is not great: 23 ]; 24 25 mkDefaultWorksConfig = lib.mkMerge [ 26 { "NIXOS_TEST_BOOLEAN" = lib.kernel.yes; } 27 { "NIXOS_TEST_BOOLEAN" = lib.mkDefault lib.kernel.no; } 28 ]; 29 30 allOptionalRemainOptional = lib.mkMerge [ 31 { NIXOS_FAKE_USB_DEBUG = lib.kernel.option lib.kernel.yes; } 32 { NIXOS_FAKE_USB_DEBUG = lib.kernel.option lib.kernel.yes; } 33 ]; 34 35 failures = lib.runTests { 36 testEasy = { 37 expr = (getConfig { NIXOS_FAKE_USB_DEBUG = lib.kernel.yes; }).NIXOS_FAKE_USB_DEBUG; 38 expected = { 39 tristate = "y"; 40 optional = false; 41 freeform = null; 42 }; 43 }; 44 45 # mandatory flag should win over optional 46 testMandatoryCheck = { 47 expr = (getConfig mandatoryVsOptionalConfig).NIXOS_FAKE_USB_DEBUG.optional; 48 expected = false; 49 }; 50 51 testYesWinsOverNo = { 52 expr = (getConfig mkDefaultWorksConfig)."NIXOS_TEST_BOOLEAN".tristate; 53 expected = "y"; 54 }; 55 56 testAllOptionalRemainOptional = { 57 expr = (getConfig allOptionalRemainOptional)."NIXOS_FAKE_USB_DEBUG".optional; 58 expected = true; 59 }; 60 61 # check that freeform options are unique 62 # Should trigger 63 # > The option `settings.NIXOS_FAKE_MMC_BLOCK_MINORS.freeform' has conflicting definitions, in `<unknown-file>' and `<unknown-file>' 64 testTreeform = 65 let 66 res = builtins.tryEval ((getConfig freeformConfig).NIXOS_FAKE_MMC_BLOCK_MINORS.freeform); 67 in 68 { 69 expr = res.success; 70 expected = false; 71 }; 72 73 }; 74in 75 76lib.optional (failures != [ ]) ( 77 throw "The following kernel unit tests failed: ${lib.generators.toPretty { } failures}" 78)