ci: add test for poll limit
This commit is contained in:
@@ -32,6 +32,8 @@ Alias=issue2730-alias.mount
|
||||
EOF
|
||||
"${SYSTEMCTL:?}" enable --root="$workspace" issue2730.mount
|
||||
ln -svrf "$workspace/etc/systemd/system/issue2730.mount" "$workspace/etc/systemd/system/issue2730-alias.mount"
|
||||
|
||||
image_install logger
|
||||
}
|
||||
|
||||
do_test "$@"
|
||||
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
set -eux
|
||||
set -o pipefail
|
||||
|
||||
systemd-analyze log-level debug
|
||||
|
||||
cat > /run/systemd/system/floodme@.service <<EOF
|
||||
[Service]
|
||||
ExecStart=/bin/true
|
||||
EOF
|
||||
|
||||
cat > /run/systemd/system/floodme.socket <<EOF
|
||||
[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
|
||||
for (( i=0 ; i < 100; i++ )) ; do
|
||||
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
|
||||
Reference in New Issue
Block a user