Skip to content

Commit 650c04d

Browse files
committed
chore(linux): Dynamically choose display number
This improves reliability if some processes are still running from a previous run, which previously caused the tests to fail. Also in the case of failed processes, list which ones are missing.
1 parent 84e0371 commit 650c04d

File tree

1 file changed

+40
-22
lines changed

1 file changed

+40
-22
lines changed

linux/ibus-keyman/tests/scripts/test-helper.inc.sh

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ function _setup_test_dbus_server() {
152152
}
153153

154154
function _setup_display_server() {
155-
local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE PID
155+
local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE PID DISP_XVFB DISP_XEPHYR
156156
ENV_FILE=$1
157157
CLEANUP_FILE=$2
158158
PID_FILE=$3
@@ -171,33 +171,45 @@ function _setup_display_server() {
171171
mutter --wayland --headless --no-x11 --virtual-monitor 1024x768 &> "$TMPFILE" &
172172
PID=$!
173173
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
174-
echo "${PID}" >> "${PID_FILE}"
174+
echo "${PID} mutter" >> "${PID_FILE}"
175175
sleep 1s
176176
export WAYLAND_DISPLAY
177177
WAYLAND_DISPLAY=$(grep "Using Wayland display" "$TMPFILE" | cut -d"'" -f2)
178178
rm "$TMPFILE"
179179
echo "export WAYLAND_DISPLAY=\"$WAYLAND_DISPLAY\"" >> "$ENV_FILE"
180180
else
181181
echo "Running on X11:"
182-
echo "Starting Xvfb..."
183-
Xvfb -screen 0 1024x768x24 :33 &> /dev/null &
184-
PID=$!
182+
while true; do
183+
echo "Starting Xvfb..."
184+
DISP_XVFB=$RANDOM
185+
Xvfb -screen 0 1024x768x24 :${DISP_XVFB} &> /dev/null &
186+
PID=$!
187+
sleep 1
188+
if ps --no-headers --pid="$PID" > /dev/null; then
189+
break
190+
fi
191+
done
185192
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
186-
echo "${PID}" >> "${PID_FILE}"
187-
sleep 1
188-
echo "Starting Xephyr..."
189-
DISPLAY=:33 Xephyr :32 -screen 1024x768 &> /dev/null &
190-
PID=$!
193+
echo "${PID} Xvfb" >> "${PID_FILE}"
194+
while true; do
195+
echo "Starting Xephyr..."
196+
DISP_XEPHYR=$RANDOM
197+
DISPLAY=:${DISP_XVFB} Xephyr :${DISP_XEPHYR} -screen 1024x768 &> /dev/null &
198+
PID=$!
199+
sleep 1
200+
if ps --no-headers --pid="$PID" > /dev/null; then
201+
break
202+
fi
203+
done
191204
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
192-
echo "${PID}" >> "${PID_FILE}"
193-
sleep 1
205+
echo "${PID} Xephyr" >> "${PID_FILE}"
194206
echo "Starting metacity"
195-
metacity --display=:32 &> /dev/null &
207+
metacity --display=:${DISP_XEPHYR} &> /dev/null &
196208
PID=$!
197209
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
198-
echo "${PID}" >> "${PID_FILE}"
210+
echo "${PID} metacity" >> "${PID_FILE}"
199211

200-
export DISPLAY=:32
212+
export DISPLAY=:${DISP_XEPHYR}
201213
echo "export DISPLAY=\"$DISPLAY\"" >> "$ENV_FILE"
202214
fi
203215
}
@@ -239,7 +251,7 @@ function _setup_ibus() {
239251
ibus-daemon ${ARG_VERBOSE-} --daemonize --panel=disable --address=unix:abstract="${TEMP_DATA_DIR}/test-ibus" ${IBUS_CONFIG-} &> /tmp/ibus-daemon.log
240252
PID=$(pgrep -f "${TEMP_DATA_DIR}/test-ibus")
241253
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
242-
echo "${PID}" >> "${PID_FILE}"
254+
echo "${PID} ibus-daemon" >> "${PID_FILE}"
243255
sleep 1s
244256

245257
IBUS_ADDRESS=$(ibus address)
@@ -252,7 +264,7 @@ function _setup_ibus() {
252264
"${TOP_BINDIR}/src/ibus-engine-keyman" --testing ${ARG_VERBOSE-} &> /tmp/ibus-engine-keyman.log &
253265
PID=$!
254266
echo "kill -9 ${PID} || true" >> "$CLEANUP_FILE"
255-
echo "${PID}" >> "${PID_FILE}"
267+
echo "${PID} ibus-engine-keyman" >> "${PID_FILE}"
256268
sleep 1s
257269
}
258270

@@ -312,25 +324,31 @@ function exit_on_package_build() {
312324
}
313325

314326
function check_processes_running() {
315-
local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE PID MISSING
327+
local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE LINE PID MISSING MISSING_PROCS
316328
DISPLAY_SERVER=$1
317329
ENV_FILE=$2
318330
CLEANUP_FILE=$3
319331
PID_FILE=$4
320332
MISSING=false
333+
MISSING_PROCS=""
321334

322-
while read -r PID; do
323-
if [ -z "$PID" ]; then
335+
while read -r LINE; do
336+
if [ -z "$LINE" ]; then
324337
continue
325-
elif ! ps --no-headers --pid="$PID" > /dev/null; then
338+
fi
339+
PID=$(echo "$LINE" | cut -d' ' -f1)
340+
if ! ps --no-headers --pid="$PID" > /dev/null; then
326341
MISSING=true
342+
MISSING_PROCS="${MISSING_PROCS} $(echo "$LINE" | cut -d' ' -f2)\n"
327343
break
328344
fi
329345
done < "${PID_FILE}"
330346

331347
if $MISSING; then
332348
echo "# Some background processes no longer running. Restarting..."
333-
echo "Some background processes no longer running. Restarting..." > /tmp/debug.output
349+
echo "Some background processes no longer running:" > /tmp/debug.output
350+
echo "$MISSING_PROCS" >> /tmp/debug.output
351+
echo "Restarting..." >> /tmp/debug.output
334352
cleanup "${CLEANUP_FILE}" > /dev/null 2>&1
335353
setup "${DISPLAY_SERVER}" "${ENV_FILE}" "${CLEANUP_FILE}" "${PID_FILE}" > /dev/null 2>&1
336354
fi

0 commit comments

Comments
 (0)