]> git.ipfire.org Git - thirdparty/systemd.git/blob - test/units/testsuite-60.sh
06526776fdbef21c96b5ed34a3370c86cab95c27
[thirdparty/systemd.git] / test / units / testsuite-60.sh
1 #!/usr/bin/env bash
2 set -eux
3 set -o pipefail
4
5 systemd-analyze log-level debug
6 systemd-analyze log-target journal
7
8 NUM_DIRS=20
9
10 # mount/unmount enough times to trigger the /proc/self/mountinfo parsing rate limiting
11
12 for ((i = 0; i < NUM_DIRS; i++)); do
13 mkdir "/tmp/meow${i}"
14 done
15
16 for ((i = 0; i < NUM_DIRS; i++)); do
17 mount -t tmpfs tmpfs "/tmp/meow${i}"
18 done
19
20 systemctl daemon-reload
21 systemctl list-units -t mount tmp-meow* | grep -q tmp-meow
22
23 for ((i = 0; i < NUM_DIRS; i++)); do
24 umount "/tmp/meow${i}"
25 done
26
27 # figure out if we have entered the rate limit state
28
29 entered_rl=0
30 exited_rl=0
31 timeout="$(date -ud "2 minutes" +%s)"
32 while [[ $(date -u +%s) -le ${timeout} ]]; do
33 if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) entered rate limit"; then
34 entered_rl=1
35 break
36 fi
37 sleep 5
38 done
39
40 # if the infra is slow we might not enter the rate limit state; in that case skip the exit check
41
42 if [ "${entered_rl}" = "1" ]; then
43 exited_rl=0
44 timeout="$(date -ud "2 minutes" +%s)"
45 while [[ $(date -u +%s) -le ${timeout} ]]; do
46 if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) left rate limit"; then
47 exited_rl=1
48 break
49 fi
50 sleep 5
51 done
52
53 if [ "${exited_rl}" = "0" ]; then
54 exit 24
55 fi
56 fi
57
58 # give some time for units to settle so we don't race between exiting the rate limit state and cleaning up the units
59
60 sleep 60
61 systemctl daemon-reload
62 sleep 60
63
64 # verify that the mount units are always cleaned up at the end
65
66 if systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; then
67 exit 42
68 fi
69
70 systemd-analyze log-level info
71
72 echo OK >/testok
73
74 exit 0