systemd/test/units/TEST-07-PID1.poll-limit.sh

49 lines
1 KiB
Bash
Raw Normal View History

2023-09-18 16:05:27 +00:00
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
systemd-analyze log-level debug
2024-01-09 09:59:31 +00:00
cat >/run/systemd/system/floodme@.service <<EOF
2023-09-18 16:05:27 +00:00
[Service]
ExecStart=true
2023-09-18 16:05:27 +00:00
EOF
2024-01-09 09:59:31 +00:00
cat >/run/systemd/system/floodme.socket <<EOF
2023-09-18 16:05:27 +00:00
[Socket]
ListenStream=/tmp/floodme
PollLimitIntervalSec=10s
Accept=yes
PollLimitBurst=3
EOF
systemctl daemon-reload
systemctl start floodme.socket
START=$(date +%s%N)
# Trigger this 100 times in a flood
2024-01-09 09:59:31 +00:00
for _ in {1..100}; do
2023-09-18 16:05:27 +00:00
logger -u /tmp/floodme foo &
done
# Let some time pass
sleep 5
END=$(date +%s%N)
PASSED=$((END-START))
# Calculate (round up) how many trigger events could have happened in the passed time
MAXCOUNT=$(((PASSED+10000000000)*3/10000000000))
# We started 100 connection attempts, but only 3 should have gone through, as per limit
test "$(systemctl show -P NAccepted floodme.socket)" -le "$MAXCOUNT"
systemctl stop floodme.socket floodme@*.service
rm /run/systemd/system/floodme@.service /run/systemd/system/floodme.socket /tmp/floodme
systemctl daemon-reload