nixVersions.stable: 2.15 -> 2.17
[NixPkgs.git] / nixos / tests / ulogd.nix
blobd351fdae798363b79848107a0c36d2072c69aa52
1 import ./make-test-python.nix ({ pkgs, lib, ... }: {
2   name = "ulogd";
4   meta.maintainers = with lib.maintainers; [ p-h ];
6   nodes.machine = { ... }: {
7     networking.firewall.enable = false;
8     networking.nftables.enable = true;
9     networking.nftables.ruleset = ''
10       table inet filter {
11         chain input {
12           type filter hook input priority 0;
13           log group 2 accept
14         }
16         chain output {
17           type filter hook output priority 0; policy accept;
18           log group 2 accept
19         }
21         chain forward {
22           type filter hook forward priority 0; policy drop;
23           log group 2 accept
24         }
26       }
27     '';
28     services.ulogd = {
29       enable = true;
30       settings = {
31         global = {
32           logfile = "/var/log/ulogd.log";
33           stack = "log1:NFLOG,base1:BASE,pcap1:PCAP";
34         };
36         log1.group = 2;
38         pcap1 = {
39           file = "/var/log/ulogd.pcap";
40           sync = 1;
41         };
42       };
43     };
45     environment.systemPackages = with pkgs; [
46       tcpdump
47     ];
48   };
50   testScript = ''
51     start_all()
52     machine.wait_for_unit("ulogd.service")
53     machine.wait_for_unit("network-online.target")
55     with subtest("Ulogd is running"):
56         machine.succeed("pgrep ulogd >&2")
58     # All packets show up twice in the logs
59     with subtest("Logs are collected"):
60         machine.succeed("ping -f 127.0.0.1 -c 5 >&2")
61         machine.succeed("sleep 2")
62         machine.wait_until_succeeds("du /var/log/ulogd.pcap >&2")
63         _, echo_request_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 8 and host 127.0.0.1")
64         expected, actual = 5*2, len(echo_request_packets.splitlines())
65         assert expected == actual, f"Expected {expected} packets, got: {actual}"
66         _, echo_reply_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 0 and host 127.0.0.1")
67         expected, actual = 5*2, len(echo_reply_packets.splitlines())
68         assert expected == actual, f"Expected {expected} packets, got: {actual}"
70     with subtest("Reloading service reopens log file"):
71         machine.succeed("mv /var/log/ulogd.pcap /var/log/old_ulogd.pcap")
72         machine.succeed("systemctl reload ulogd.service")
73         machine.succeed("ping -f 127.0.0.1 -c 5 >&2")
74         machine.succeed("sleep 2")
75         _, echo_request_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 8 and host 127.0.0.1")
76         expected, actual = 5*2, len(echo_request_packets.splitlines())
77         assert expected == actual, f"Expected {expected} packets, got: {actual}"
78         _, echo_reply_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 0 and host 127.0.0.1")
79         expected, actual = 5*2, len(echo_reply_packets.splitlines())
80         assert expected == actual, f"Expected {expected} packets, got: {actual}"
81   '';