@@ -94,9 +94,10 @@ function _link_test_keyboards() {
9494}
9595
9696function _setup_init() {
97- local ENV_FILE PID_FILE
97+ local ENV_FILE CLEANUP_FILE PID_FILE
9898 ENV_FILE=$1
99- PID_FILE=$2
99+ CLEANUP_FILE=$2
100+ PID_FILE=$3
100101
101102 if [ -z " ${TOP_SRCDIR:- } " ]; then
102103 TOP_SRCDIR=${G_TEST_SRCDIR:- $(realpath " $( dirname " $0 " ) /.." )} /..
@@ -107,14 +108,15 @@ function _setup_init() {
107108
108109 echo > " $ENV_FILE "
109110
110- if [ -f " $PID_FILE " ]; then
111+ if [ -f " $CLEANUP_FILE " ]; then
111112 # kill previous instances
112- " $( dirname " $0 " ) " /teardown-tests.sh " $PID_FILE " || true
113+ " $( dirname " $0 " ) " /teardown-tests.sh " $CLEANUP_FILE " || true
113114 fi
114115
116+ echo > " $CLEANUP_FILE "
115117 echo > " $PID_FILE "
116118 TEMP_DATA_DIR=$( mktemp --directory)
117- echo " rm -rf ${TEMP_DATA_DIR} || true" >> " $PID_FILE "
119+ echo " rm -rf ${TEMP_DATA_DIR} || true" >> " $CLEANUP_FILE "
118120
119121 COMMON_ARCH_DIR=
120122 [ -d " ${TOP_SRCDIR} " /../../core/build/arch ] && COMMON_ARCH_DIR=${TOP_SRCDIR} /../../core/build/arch
@@ -133,27 +135,28 @@ function _setup_init() {
133135}
134136
135137function _setup_test_dbus_server() {
136- local ENV_FILE PID_FILE
138+ local ENV_FILE CLEANUP_FILE
137139 ENV_FILE=$1
138- PID_FILE =$2
140+ CLEANUP_FILE =$2
139141
140142 # Start test dbus server. This will create `/tmp/km-test-server.env`.
141143 " ${TOP_BINDIR} /tests/km-dbus-test-server" & > /dev/null &
142144 sleep 1
143145
144146 cat /tmp/km-test-server.env >> " $ENV_FILE "
145- cat /tmp/km-test-server.env >> " $PID_FILE "
146- echo " ${TOP_BINDIR} /tests/stop-test-server" >> " $PID_FILE "
147+ cat /tmp/km-test-server.env >> " $CLEANUP_FILE "
148+ echo " ${TOP_BINDIR} /tests/stop-test-server" >> " $CLEANUP_FILE "
147149
148150 source /tmp/km-test-server.env
149151 echo " # DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS "
150152}
151153
152154function _setup_display_server() {
153- local DISPLAY_SERVER ENV_FILE PID_FILE
155+ local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE PID
154156 ENV_FILE=$1
155- PID_FILE=$2
156- DISPLAY_SERVER=$3
157+ CLEANUP_FILE=$2
158+ PID_FILE=$3
159+ DISPLAY_SERVER=$4
157160
158161 if [ " $DISPLAY_SERVER " == " --wayland" ]; then
159162 if ! can_run_wayland; then
@@ -166,7 +169,9 @@ function _setup_display_server() {
166169 TMPFILE=$( mktemp)
167170 # mutter-Message: 18:56:15.422: Using Wayland display name 'wayland-1'
168171 mutter --wayland --headless --no-x11 --virtual-monitor 1024x768 & > " $TMPFILE " &
169- echo " kill -9 $! || true" >> " $PID_FILE "
172+ PID=$!
173+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
174+ echo " ${PID} " >> " ${PID_FILE} "
170175 sleep 1s
171176 export WAYLAND_DISPLAY
172177 WAYLAND_DISPLAY=$( grep " Using Wayland display" " $TMPFILE " | cut -d" '" -f2)
@@ -176,25 +181,31 @@ function _setup_display_server() {
176181 echo " Running on X11:"
177182 echo " Starting Xvfb..."
178183 Xvfb -screen 0 1024x768x24 :33 & > /dev/null &
179- echo " kill -9 $! || true" >> " $PID_FILE "
184+ PID=$!
185+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
186+ echo " ${PID} " >> " ${PID_FILE} "
180187 sleep 1
181188 echo " Starting Xephyr..."
182189 DISPLAY=:33 Xephyr :32 -screen 1024x768 & > /dev/null &
183- echo " kill -9 $! || true" >> " $PID_FILE "
190+ PID=$!
191+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
192+ echo " ${PID} " >> " ${PID_FILE} "
184193 sleep 1
185194 echo " Starting metacity"
186195 metacity --display=:32 & > /dev/null &
187- echo " kill -9 $! || true" >> " $PID_FILE "
196+ PID=$!
197+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
198+ echo " ${PID} " >> " ${PID_FILE} "
188199
189200 export DISPLAY=:32
190201 echo " export DISPLAY=\" $DISPLAY \" " >> " $ENV_FILE "
191202 fi
192203}
193204
194205function _setup_schema_and_gsettings() {
195- local ENV_FILE PID_FILE
206+ local ENV_FILE CLEANUP_FILE
196207 ENV_FILE=$1
197- PID_FILE =$2
208+ CLEANUP_FILE =$2
198209
199210 # Install schema to temporary directory. This removes the build dependency on the keyman package.
200211 SCHEMA_DIR=$TEMP_DATA_DIR /glib-2.0/schemas
@@ -219,33 +230,41 @@ function _setup_schema_and_gsettings() {
219230}
220231
221232function _setup_ibus() {
222- local ENV_FILE PID_FILE
233+ local ENV_FILE CLEANUP_FILE PID_FILE PID
223234 ENV_FILE=$1
224- PID_FILE=$2
235+ CLEANUP_FILE=$2
236+ PID_FILE=$3
225237
238+ echo " Starting ibus-daemon..."
226239 # shellcheck disable=SC2086
227240 ibus-daemon ${ARG_VERBOSE-} --daemonize --panel=disable --address=unix:abstract=" ${TEMP_DATA_DIR} /test-ibus" ${IBUS_CONFIG-} & > /tmp/ibus-daemon.log
228- echo " kill -9 $! || true" >> " $PID_FILE "
241+ PID=$( pgrep -f " ${TEMP_DATA_DIR} /test-ibus" )
242+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
243+ echo " ${PID} " >> " ${PID_FILE} "
229244 sleep 1s
230245
231246 IBUS_ADDRESS=$( ibus address)
232247 export IBUS_ADDRESS
233248
234249 echo " export IBUS_ADDRESS=\" $IBUS_ADDRESS \" " >> " $ENV_FILE "
235250
251+ echo " Starting ibus-engine-keyman..."
236252 # shellcheck disable=SC2086
237253 " ${TOP_BINDIR} /src/ibus-engine-keyman" --testing ${ARG_VERBOSE-} & > /tmp/ibus-engine-keyman.log &
238- echo " kill -9 $! || true" >> " $PID_FILE "
254+ PID=$!
255+ echo " kill -9 ${PID} || true" >> " $CLEANUP_FILE "
256+ echo " ${PID} " >> " ${PID_FILE} "
239257 sleep 1s
240-
241258}
259+
242260function setup() {
243- local DISPLAY_SERVER ENV_FILE PID_FILE TESTBASEDIR TESTDIR
261+ local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE TESTBASEDIR TESTDIR
244262 DISPLAY_SERVER=$1
245263 ENV_FILE=$2
246- PID_FILE=$3
264+ CLEANUP_FILE=$3
265+ PID_FILE=$4
247266
248- _setup_init " ${ENV_FILE} " " ${PID_FILE} "
267+ _setup_init " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${ PID_FILE}"
249268
250269 TESTBASEDIR=${XDG_DATA_HOME:- $HOME / .local/ share} /keyman
251270 TESTDIR=${TESTBASEDIR} /test_kmx
@@ -254,32 +273,33 @@ function setup() {
254273
255274 _generate_kmpjson " $TESTDIR "
256275
257- _setup_test_dbus_server " ${ENV_FILE} " " ${PID_FILE } "
258- _setup_display_server " ${ENV_FILE} " " ${PID_FILE} " " ${DISPLAY_SERVER} "
259- _setup_schema_and_gsettings " ${ENV_FILE} " " ${PID_FILE } "
260- _setup_ibus " ${ENV_FILE} " " ${PID_FILE} "
276+ _setup_test_dbus_server " ${ENV_FILE} " " ${CLEANUP_FILE } "
277+ _setup_display_server " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${ PID_FILE}" " ${DISPLAY_SERVER} "
278+ _setup_schema_and_gsettings " ${ENV_FILE} " " ${CLEANUP_FILE } "
279+ _setup_ibus " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${ PID_FILE}"
261280}
262281
263282function setup_display_server_only() {
264- local DISPLAY_SERVER ENV_FILE PID_FILE TESTBASEDIR TESTDIR
283+ local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE TESTBASEDIR TESTDIR
265284 DISPLAY_SERVER=$1
266285 ENV_FILE=$2
267- PID_FILE=$3
286+ CLEANUP_FILE=$3
287+ PID_FILE=$4
268288
269- _setup_init " ${ENV_FILE} " " ${PID_FILE} "
270- _setup_display_server " ${ENV_FILE} " " ${PID_FILE} " " ${DISPLAY_SERVER} "
271- _setup_schema_and_gsettings " ${ENV_FILE} " " ${PID_FILE } "
289+ _setup_init " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${ PID_FILE}"
290+ _setup_display_server " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${ PID_FILE}" " ${DISPLAY_SERVER} "
291+ _setup_schema_and_gsettings " ${ENV_FILE} " " ${CLEANUP_FILE } "
272292}
273293
274294function cleanup() {
275- local PID_FILE
276- PID_FILE =$1
295+ local CLEANUP_FILE
296+ CLEANUP_FILE =$1
277297
278- if [ -f " $PID_FILE " ]; then
298+ if [ -f " $CLEANUP_FILE " ]; then
279299 echo
280300 echo " # Shutting down processes..."
281- bash " $PID_FILE " # > /dev/null 2>&1
282- rm " $PID_FILE "
301+ bash " $CLEANUP_FILE " # > /dev/null 2>&1
302+ rm " $CLEANUP_FILE "
283303 echo " # Finished shutdown of processes."
284304 fi
285305}
@@ -291,3 +311,28 @@ function exit_on_package_build() {
291311 exit 0
292312 fi
293313}
314+
315+ function check_processes_running() {
316+ local DISPLAY_SERVER ENV_FILE CLEANUP_FILE PID_FILE PID MISSING
317+ DISPLAY_SERVER=$1
318+ ENV_FILE=$2
319+ CLEANUP_FILE=$3
320+ PID_FILE=$4
321+ MISSING=false
322+
323+ while read -r PID; do
324+ if [ -z " $PID " ]; then
325+ continue
326+ elif ! ps --no-headers --pid=" $PID " > /dev/null; then
327+ MISSING=true
328+ break
329+ fi
330+ done < " ${PID_FILE} "
331+
332+ if $MISSING ; then
333+ echo " # Some background processes no longer running. Restarting..."
334+ echo " Some background processes no longer running. Restarting..." > /tmp/debug.output
335+ cleanup " ${CLEANUP_FILE} " > /dev/null 2>&1
336+ setup " ${DISPLAY_SERVER} " " ${ENV_FILE} " " ${CLEANUP_FILE} " " ${PID_FILE} " > /dev/null 2>&1
337+ fi
338+ }
0 commit comments