tests: Store the correct PID in hostapd-test.pid file

The hwsim's start.sh script spawns hostapd process using "sudo".
Since sudo forks a child process, $! holds the pid of sudo itself.
Fix that by storing the PID of the child process instead.
Since in VM "sudo" is replaced with a dummy script, pass an additional
argument to run-all.sh and start.sh scripts to indicate that they are
running inside a VM.

This is needed to fix ap_config_reload and ap_config_reload_file test
cases on some platforms where sudo is apparently not relaying the
signals properly.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
This commit is contained in:
Andrei Otcheretianski 2018-10-23 14:07:05 +03:00 committed by Jouni Malinen
parent fcc65290d4
commit 79bbafd78c
3 changed files with 23 additions and 3 deletions

View file

@ -39,6 +39,7 @@ unset RUN_TEST_ARGS
unset BUILD unset BUILD
unset BUILD_ARGS unset BUILD_ARGS
unset CODECOV unset CODECOV
unset VM
while [ "$1" != "" ]; do while [ "$1" != "" ]; do
case $1 in case $1 in
-v | --valgrind | valgrind) -v | --valgrind | valgrind)
@ -71,6 +72,12 @@ while [ "$1" != "" ]; do
-h | --help) -h | --help)
usage usage
;; ;;
-V | --vm)
shift
echo "$0: running inside a VM"
VM=VM
;;
*) *)
RUN_TEST_ARGS="$RUN_TEST_ARGS$1 " RUN_TEST_ARGS="$RUN_TEST_ARGS$1 "
shift shift
@ -108,7 +115,7 @@ if [ ! -z "$BUILD" ]; then
fi fi
fi fi
if ! ./start.sh $VALGRIND $TRACE channels=$NUM_CH; then if ! ./start.sh $VM $VALGRIND $TRACE channels=$NUM_CH; then
if ! [ -z "$LOGBASEDIR" ] ; then if ! [ -z "$LOGBASEDIR" ] ; then
echo "Could not start test environment" > $LOGDIR/run echo "Could not start test environment" > $LOGDIR/run
fi fi

View file

@ -71,6 +71,12 @@ done
sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as.conf" > "$LOGDIR/as.conf" sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as.conf" > "$LOGDIR/as.conf"
sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as2.conf" > "$LOGDIR/as2.conf" sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as2.conf" > "$LOGDIR/as2.conf"
unset VM
if [ "$1" = "VM" ]; then
VM="y"
shift
fi
if [ "$1" = "valgrind" ]; then if [ "$1" = "valgrind" ]; then
VALGRIND=y VALGRIND=y
VALGRIND_WPAS="valgrind --log-file=$LOGDIR/valgrind-wlan%d" VALGRIND_WPAS="valgrind --log-file=$LOGDIR/valgrind-wlan%d"
@ -121,7 +127,14 @@ sudo $(printf -- "$VALGRIND_WPAS" 5) $WPAS -g /tmp/wpas-wlan5 -G$GROUP \
-ddKt$TRACE -f $LOGDIR/log5 & -ddKt$TRACE -f $LOGDIR/log5 &
sudo $VALGRIND_HAPD $HAPD -ddKt$TRACE -g /var/run/hostapd-global -G $GROUP -f $LOGDIR/hostapd & sudo $VALGRIND_HAPD $HAPD -ddKt$TRACE -g /var/run/hostapd-global -G $GROUP -f $LOGDIR/hostapd &
HPID=$! HPID=$!
echo $HPID > $LOGDIR/hostapd-test.pid
if [ -z "$VM" ]; then
# Sleep a bit, otherwise pgrep may run before the child is forked
sleep 0.1
pgrep -P $HPID > $LOGDIR/hostapd-test.pid
else
echo $HPID > $LOGDIR/hostapd-test.pid
fi
if [ -x $HLR_AUC_GW ]; then if [ -x $HLR_AUC_GW ]; then
cp $DIR/auth_serv/hlr_auc_gw.milenage_db $LOGDIR/hlr_auc_gw.milenage_db cp $DIR/auth_serv/hlr_auc_gw.milenage_db $LOGDIR/hlr_auc_gw.milenage_db

View file

@ -113,7 +113,7 @@ else
dbus-daemon --config-file=$TESTDIR/vm/dbus.conf --fork dbus-daemon --config-file=$TESTDIR/vm/dbus.conf --fork
cd $TESTDIR cd $TESTDIR
./run-all.sh $(cat /tmp/host$ARGS) </dev/ttyS0 >/dev/ttyS0 2>&1 ./run-all.sh --vm $(cat /tmp/host$ARGS) </dev/ttyS0 >/dev/ttyS0 2>&1
if test -d /sys/kernel/debug/gcov ; then if test -d /sys/kernel/debug/gcov ; then
cp -ar /sys/kernel/debug/gcov /tmp/logs/ cp -ar /sys/kernel/debug/gcov /tmp/logs/
# these are broken as they're updated while being read ... # these are broken as they're updated while being read ...