54 lines
1.6 KiB
Nix
54 lines
1.6 KiB
Nix
import ./make-test-python.nix ({ pkgs, ... }:
|
|
|
|
{
|
|
name = "systemd-oomd";
|
|
|
|
# This test is a simplified version of systemd's testsuite-55.
|
|
# https://github.com/systemd/systemd/blob/v251/test/units/testsuite-55.sh
|
|
nodes.machine = { pkgs, ... }: {
|
|
# Limit VM resource usage.
|
|
virtualisation.memorySize = 1024;
|
|
systemd.oomd.extraConfig.DefaultMemoryPressureDurationSec = "1s";
|
|
|
|
systemd.slices.workload = {
|
|
description = "Test slice for memory pressure kills";
|
|
sliceConfig = {
|
|
MemoryAccounting = true;
|
|
ManagedOOMMemoryPressure = "kill";
|
|
ManagedOOMMemoryPressureLimit = "10%";
|
|
};
|
|
};
|
|
|
|
systemd.services.testbloat = {
|
|
description = "Create a lot of memory pressure";
|
|
serviceConfig = {
|
|
Slice = "workload.slice";
|
|
MemoryHigh = "5M";
|
|
ExecStart = "${pkgs.coreutils}/bin/tail /dev/zero";
|
|
};
|
|
};
|
|
|
|
systemd.services.testchill = {
|
|
description = "No memory pressure";
|
|
serviceConfig = {
|
|
Slice = "workload.slice";
|
|
MemoryHigh = "3M";
|
|
ExecStart = "${pkgs.coreutils}/bin/sleep infinity";
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
# Start the system.
|
|
machine.wait_for_unit("multi-user.target")
|
|
machine.succeed("oomctl")
|
|
|
|
machine.succeed("systemctl start testchill.service")
|
|
with subtest("OOMd should kill the bad service"):
|
|
machine.fail("systemctl start --wait testbloat.service")
|
|
assert machine.get_unit_info("testbloat.service")["Result"] == "oom-kill"
|
|
|
|
with subtest("Service without memory pressure should be untouched"):
|
|
machine.require_unit_state("testchill.service", "active")
|
|
'';
|
|
})
|