diff --git a/nixos/modules/services/system/earlyoom.nix b/nixos/modules/services/system/earlyoom.nix index 757d01cbf476f1..85f014ca5ccf2a 100644 --- a/nixos/modules/services/system/earlyoom.nix +++ b/nixos/modules/services/system/earlyoom.nix @@ -4,8 +4,6 @@ let cfg = config.services.earlyoom; inherit (lib) - concatStringsSep - escapeShellArg literalExpression mkDefault mkEnableOption diff --git a/nixos/tests/earlyoom.nix b/nixos/tests/earlyoom.nix index e381c8c2b564b1..e5ed46d00a9afb 100644 --- a/nixos/tests/earlyoom.nix +++ b/nixos/tests/earlyoom.nix @@ -1,16 +1,34 @@ import ./make-test-python.nix ({ lib, ... }: { name = "earlyoom"; meta = { - maintainers = with lib.maintainers; [ ncfavier AndersonTorres ]; + maintainers = with lib.maintainers; [ ncfavier AndersonTorres oxalica ]; }; - nodes.machine = { + nodes.machine = { pkgs, ... }: { + # Limit VM resource usage. + virtualisation.memorySize = 1024; + services.earlyoom = { enable = true; + # Use SIGKILL, or `tail` will catch SIGTERM and exit successfully. + freeMemKillThreshold = 90; + }; + + systemd.services.testbloat = { + description = "Create a lot of memory pressure"; + serviceConfig = { + ExecStart = "${pkgs.coreutils}/bin/tail /dev/zero"; + }; }; }; testScript = '' machine.wait_for_unit("earlyoom.service") + + with subtest("earlyoom should kill the bad service"): + machine.fail("systemctl start --wait testbloat.service") + assert machine.get_unit_info("testbloat.service")["Result"] == "signal" + output = machine.succeed('journalctl -u earlyoom.service -b0') + assert 'low memory! at or below SIGKILL limits' in output ''; })