diff --git a/tests/CI/runUnittests.sh b/tests/CI/runUnittests.sh
index 682c5064fbfb3ee0b2e6ae9d2174e2dbd120170c..e2d7e45a7ed959adbefeb2b76da62f95087194cd 100755
--- a/tests/CI/runUnittests.sh
+++ b/tests/CI/runUnittests.sh
@@ -1,5 +1,6 @@
 #!/usr/bin/env bash
 CIDIR=$(dirname $(readlink -fn $0))
+NO_EXPECT=0
 source $CIDIR/ci.functions
 ASTETCDIR=$DESTDIR/etc/asterisk
 
@@ -14,9 +15,54 @@ asterisk_corefile_glob() {
 	fi
 }
 
+run_tests_expect() {
+$EXPECT <<-EOF
+	spawn sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -fcng -C $CONFFILE
+	match_max 512
+	set timeout 600
+	expect -notransfer "Asterisk Ready."
+	send "core show settings\r"
+	expect -notransfer "CLI>"
+	send "${UNITTEST_COMMAND:-test execute all}\r"
+	expect -notransfer -ex "Test(s) Executed"
+	expect -notransfer "CLI>"
+	send "test show results failed\r"
+	expect -notransfer "CLI>"
+	send "test generate results xml ${OUTPUTFILE}\r"
+	expect -notransfer "CLI>"
+	send "core stop now\r"
+	expect -notransfer "Executing last minute cleanups"
+	wait
+EOF
+}
+
+run_tests_socket() {
+	sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -gn -C $CONFFILE
+	for n in {1..5} ; do
+		sleep 3
+		$ASTERISK -rx "core waitfullybooted" -C $CONFFILE && break
+	done
+	sleep 1
+	$ASTERISK -rx "core show settings" -C $CONFFILE
+	$ASTERISK -rx "${UNITTEST_COMMAND:-test execute all}" -C $CONFFILE
+	$ASTERISK -rx "test show results failed" -C $CONFFILE
+	$ASTERISK -rx "test generate results xml $OUTPUTFILE" -C $CONFFILE
+	$ASTERISK -rx "core stop now" -C $CONFFILE
+}
+
+# If DESTDIR is used to install and run asterisk from non standard locations,
+# the directory entries in asterisk.conf need to be munged to prepend DESTDIR.
+ALTERED=$(head -10 ../tmp/DESTDIR/etc/asterisk/asterisk.conf | grep -q "DESTDIR" && echo yes)
+if [ x"$ALTERED" = x ] ; then
+	# In the section that starts with [directories and ends with a blank line,
+	# replace "=> " with "=> ${DESTDIR}"
+	sed -i -r -e "/^\[directories/,/^$/ s@=>\s+@=> ${DESTDIR}@" "$ASTETCDIR/asterisk.conf"
+fi
+
 cat <<-EOF > "$ASTETCDIR/logger.conf"
 	[logfiles]
 	full => notice,warning,error,debug,verbose
+	console => notice,warning,error
 EOF
 
 echo "[default]" > "$ASTETCDIR/extensions.conf"
@@ -58,6 +104,7 @@ ASTERISK="$DESTDIR/usr/sbin/asterisk"
 CONFFILE=$ASTETCDIR/asterisk.conf
 OUTPUTDIR=${OUTPUT_DIR:-tests/CI/output/}
 OUTPUTFILE=${OUTPUT_XML:-${OUTPUTDIR}/unittests-results.xml}
+EXPECT="$(which expect 2>/dev/null || : )"
 
 [ ! -d ${OUTPUTDIR} ] && mkdir -p $OUTPUTDIR
 [ x"$USER_GROUP" != x ] && sudo chown -R $USER_GROUP $OUTPUTDIR
@@ -65,16 +112,14 @@ OUTPUTFILE=${OUTPUT_XML:-${OUTPUTDIR}/unittests-results.xml}
 rm -rf $ASTETCDIR/extensions.{ael,lua} || :
 
 set -x
-sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -gn -C $CONFFILE
-for n in {1..5} ; do
-	sleep 3
-	$ASTERISK -rx "core waitfullybooted" -C $CONFFILE && break
-done
-sleep 1
-$ASTERISK -rx "${UNITTEST_COMMAND:-test execute all}" -C $CONFFILE
-$ASTERISK -rx "test show results failed" -C $CONFFILE
-$ASTERISK -rx "test generate results xml $OUTPUTFILE" -C $CONFFILE
-$ASTERISK -rx "core stop now" -C $CONFFILE
+if [ x"$EXPECT" != x -a $NO_EXPECT -eq 0 ] ; then
+	run_tests_expect
+else
+	run_tests_socket
+fi
+
+# Cleanup "just in case"
+sudo killall -qe -ABRT $ASTERISK 
 
 runner rsync -vaH $DESTDIR/var/log/asterisk/. $OUTPUTDIR
 set +x
@@ -86,6 +131,7 @@ do
 	if [ -f $core ]
 	then
 		echo "*** Found a core file ($core) after running unit tests ***"
+		set -x
 		sudo OUTPUTDIR=$OUTPUTDIR $DESTDIR/var/lib/asterisk/scripts/ast_coredumper --no-default-search $core
 	fi
 done