summaryrefslogtreecommitdiffstats
path: root/test/units/testsuite-07.poll-limit.sh
blob: 480d7ee8dffd6d0d9b00e189442d6004fc6c193f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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