1{ pkgs, ... }:
2
3let
4
5 crasher = pkgs.writeCBin "crasher" "int main;";
6
7 commonConfig = {
8 systemd.services.crasher.serviceConfig = {
9 ExecStart = "${crasher}/bin/crasher";
10 StateDirectory = "crasher";
11 WorkingDirectory = "%S/crasher";
12 Restart = "no";
13 };
14 };
15
16in
17
18{
19 name = "systemd-coredump";
20 meta = with pkgs.lib.maintainers; {
21 maintainers = [ squalus ];
22 };
23
24 nodes.machine1 = { pkgs, lib, ... }: commonConfig;
25 nodes.machine2 =
26 { pkgs, lib, ... }:
27 lib.recursiveUpdate commonConfig {
28 systemd.coredump.enable = false;
29 systemd.package = pkgs.systemd.override {
30 withCoredump = false;
31 };
32 };
33
34 testScript = ''
35 with subtest("systemd-coredump enabled"):
36 machine1.wait_for_unit("multi-user.target")
37 machine1.wait_for_unit("systemd-coredump.socket")
38 machine1.systemctl("start crasher");
39 machine1.wait_until_succeeds("coredumpctl list | grep crasher", timeout=10)
40 machine1.fail("stat /var/lib/crasher/core")
41
42 with subtest("systemd-coredump disabled"):
43 machine2.systemctl("start crasher");
44 machine2.wait_until_succeeds("stat /var/lib/crasher/core", timeout=10)
45 '';
46}