test: one command for every recovery property the room depends on
Run against the lab as the package built it, not a session edited by hand. The panel came back from eight SIGKILLs a second apart in about 2.2s each time, the compositor in 0.1s, the audio policy from three, and neither Parent Call nor the browser dying disturbed the panel. Co-Authored-By: Claude Opus 5 <[email protected]>
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 253 KiB After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 46 KiB |
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Every recovery property the classroom depends on, measured against the
|
||||||
|
# lab as the package built it. Run after tools/lab/from-package.
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
NAME="${LAB_NAME:-classroom-v2-lab}"
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
|
||||||
|
inlab() { docker exec "$NAME" "$@"; }
|
||||||
|
insession() {
|
||||||
|
docker exec -u classroom -e XDG_RUNTIME_DIR=/run/user/1000 \
|
||||||
|
-e DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
|
||||||
|
-e HOME=/home/classroom "$NAME" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
kill_and_wait() {
|
||||||
|
local proc="$1" rounds="${2:-1}" gap="${3:-1}"
|
||||||
|
for round in $(seq 1 "$rounds"); do
|
||||||
|
local old new started
|
||||||
|
old=$(inlab pgrep -x "$proc" | head -1)
|
||||||
|
[ -n "$old" ] || { echo " $proc was not running"; return 1; }
|
||||||
|
started=$(date +%s%N)
|
||||||
|
inlab kill -9 "$old" 2>/dev/null
|
||||||
|
new=""
|
||||||
|
while [ $(( ($(date +%s%N) - started) / 1000000000 )) -lt 60 ]; do
|
||||||
|
new=$(inlab pgrep -x "$proc" | head -1)
|
||||||
|
[ -n "$new" ] && [ "$new" != "$old" ] && break
|
||||||
|
sleep 0.25
|
||||||
|
done
|
||||||
|
if [ -n "$new" ] && [ "$new" != "$old" ]; then
|
||||||
|
printf " %-16s round %s: back in %ss\n" "$proc" "$round" \
|
||||||
|
"$(awk "BEGIN{printf \"%.1f\", ($(date +%s%N)-$started)/1000000000}")"
|
||||||
|
else
|
||||||
|
printf " %-16s round %s: DID NOT COME BACK\n" "$proc" "$round"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep "$gap"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "the panel, killed eight times a second apart"
|
||||||
|
kill_and_wait plasmashell 8 1
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "the compositor, killed twice"
|
||||||
|
kill_and_wait kwin_wayland 2 4
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "the audio policy, killed three times"
|
||||||
|
for round in 1 2 3; do
|
||||||
|
inlab pkill -9 -f "bin/classroom-audio" 2>/dev/null
|
||||||
|
sleep 6
|
||||||
|
printf " audio round %s: %s\n" "$round" \
|
||||||
|
"$(insession systemctl --user is-active ekklesia-classroom-audio.service)"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Parent Call, killed while the panel is watched"
|
||||||
|
insession sh -c 'setsid /usr/local/bin/classroom-parent-call >/dev/null 2>&1 &'
|
||||||
|
sleep 5
|
||||||
|
before=$(inlab pgrep -c -x plasmashell)
|
||||||
|
inlab pkill -9 -f "bin/classroom-parent-call" 2>/dev/null
|
||||||
|
sleep 3
|
||||||
|
printf " panel before %s, after %s\n" "$before" "$(inlab pgrep -c -x plasmashell)"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "the browser, killed while the panel is watched"
|
||||||
|
insession sh -c 'setsid /usr/local/bin/classroom-browser >/dev/null 2>&1 &'
|
||||||
|
sleep 18
|
||||||
|
before=$(inlab pgrep -c -x plasmashell)
|
||||||
|
inlab pkill -9 chrome 2>/dev/null
|
||||||
|
sleep 4
|
||||||
|
printf " panel before %s, after %s\n" "$before" "$(inlab pgrep -c -x plasmashell)"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "what is still standing"
|
||||||
|
printf " plasmashell=%s kwin=%s applets=%s audio=%s\n" \
|
||||||
|
"$(inlab pgrep -c -x plasmashell)" \
|
||||||
|
"$(inlab pgrep -c -x kwin_wayland)" \
|
||||||
|
"$(inlab sh -c 'grep -c "^plugin=" /home/classroom/.config/plasma-org.kde.plasma.desktop-appletsrc')" \
|
||||||
|
"$(insession systemctl --user is-active ekklesia-classroom-audio.service)"
|
||||||