jetbrains: 2024.1 -> 2024.2.7 (#351041)
[NixPkgs.git] / nixos / tests / systemd-oomd.nix
blob55c4c13500005863dfa65ebefdc62a0c155847fe
1 import ./make-test-python.nix ({ pkgs, ... }:
4   name = "systemd-oomd";
6   # This test is a simplified version of systemd's testsuite-55.
7   # https://github.com/systemd/systemd/blob/v251/test/units/testsuite-55.sh
8   nodes.machine = { pkgs, ... }: {
9     # Limit VM resource usage.
10     virtualisation.memorySize = 1024;
11     systemd.oomd.extraConfig.DefaultMemoryPressureDurationSec = "1s";
13     systemd.slices.workload = {
14       description = "Test slice for memory pressure kills";
15       sliceConfig = {
16         MemoryAccounting = true;
17         ManagedOOMMemoryPressure = "kill";
18         ManagedOOMMemoryPressureLimit = "10%";
19       };
20     };
22     systemd.services.testbloat = {
23       description = "Create a lot of memory pressure";
24       serviceConfig = {
25         Slice = "workload.slice";
26         MemoryHigh = "5M";
27         ExecStart = "${pkgs.coreutils}/bin/tail /dev/zero";
28       };
29     };
31     systemd.services.testchill = {
32       description = "No memory pressure";
33       serviceConfig = {
34         Slice = "workload.slice";
35         MemoryHigh = "3M";
36         ExecStart = "${pkgs.coreutils}/bin/sleep infinity";
37       };
38     };
39   };
41   testScript = ''
42     # Start the system.
43     machine.wait_for_unit("multi-user.target")
44     machine.succeed("oomctl")
46     machine.succeed("systemctl start testchill.service")
47     with subtest("OOMd should kill the bad service"):
48         machine.fail("systemctl start --wait testbloat.service")
49         assert machine.get_unit_info("testbloat.service")["Result"] == "oom-kill"
51     with subtest("Service without memory pressure should be untouched"):
52         machine.require_unit_state("testchill.service", "active")
53   '';