<p>George Joseph <strong>merged</strong> this change.</p><p><a href="https://gerrit.asterisk.org/10659">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins2: Verified
  Corey Farrell: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved; Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">CI: Allow runUnittests to use 'expect' to run the tests<br><br>There seems to be a race condition between starting the asterisk<br>daemon and attempting to use 'asterisk -r' that can cause the<br>control socket file to not be created.  Since all of the Jenkins<br>slaves have 'expect' installed, the runUnittests script can use<br>it to start asterisk in the forground and issue the commands<br>interactively.  This is much more reliable and it can also make<br>startup errors more visible since they'll be in the Jenkins console<br>output.<br><br>If 'expect' isn't installed, the original daemon/asterisk -r<br>process is used.<br><br>Also added a "core show settings" before running the tests<br>and added "notice,warning,error" to the console log.<br><br>Change-Id: Idd656085f854afede813ac241b9e312b31358160<br>---<br>M tests/CI/runUnittests.sh<br>1 file changed, 56 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/CI/runUnittests.sh b/tests/CI/runUnittests.sh</span><br><span>index 682c506..e2d7e45 100755</span><br><span>--- a/tests/CI/runUnittests.sh</span><br><span>+++ b/tests/CI/runUnittests.sh</span><br><span>@@ -1,5 +1,6 @@</span><br><span> #!/usr/bin/env bash</span><br><span> CIDIR=$(dirname $(readlink -fn $0))</span><br><span style="color: hsl(120, 100%, 40%);">+NO_EXPECT=0</span><br><span> source $CIDIR/ci.functions</span><br><span> ASTETCDIR=$DESTDIR/etc/asterisk</span><br><span> </span><br><span>@@ -14,9 +15,54 @@</span><br><span>        fi</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+run_tests_expect() {</span><br><span style="color: hsl(120, 100%, 40%);">+$EXPECT <<-EOF</span><br><span style="color: hsl(120, 100%, 40%);">+       spawn sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -fcng -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+      match_max 512</span><br><span style="color: hsl(120, 100%, 40%);">+ set timeout 600</span><br><span style="color: hsl(120, 100%, 40%);">+       expect -notransfer "Asterisk Ready."</span><br><span style="color: hsl(120, 100%, 40%);">+        send "core show settings\r"</span><br><span style="color: hsl(120, 100%, 40%);">+ expect -notransfer "CLI>"</span><br><span style="color: hsl(120, 100%, 40%);">+        send "${UNITTEST_COMMAND:-test execute all}\r"</span><br><span style="color: hsl(120, 100%, 40%);">+      expect -notransfer -ex "Test(s) Executed"</span><br><span style="color: hsl(120, 100%, 40%);">+   expect -notransfer "CLI>"</span><br><span style="color: hsl(120, 100%, 40%);">+        send "test show results failed\r"</span><br><span style="color: hsl(120, 100%, 40%);">+   expect -notransfer "CLI>"</span><br><span style="color: hsl(120, 100%, 40%);">+        send "test generate results xml ${OUTPUTFILE}\r"</span><br><span style="color: hsl(120, 100%, 40%);">+    expect -notransfer "CLI>"</span><br><span style="color: hsl(120, 100%, 40%);">+        send "core stop now\r"</span><br><span style="color: hsl(120, 100%, 40%);">+      expect -notransfer "Executing last minute cleanups"</span><br><span style="color: hsl(120, 100%, 40%);">+ wait</span><br><span style="color: hsl(120, 100%, 40%);">+EOF</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+run_tests_socket() {</span><br><span style="color: hsl(120, 100%, 40%);">+  sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -gn -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+      for n in {1..5} ; do</span><br><span style="color: hsl(120, 100%, 40%);">+          sleep 3</span><br><span style="color: hsl(120, 100%, 40%);">+               $ASTERISK -rx "core waitfullybooted" -C $CONFFILE && break</span><br><span style="color: hsl(120, 100%, 40%);">+  done</span><br><span style="color: hsl(120, 100%, 40%);">+  sleep 1</span><br><span style="color: hsl(120, 100%, 40%);">+       $ASTERISK -rx "core show settings" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+     $ASTERISK -rx "${UNITTEST_COMMAND:-test execute all}" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+  $ASTERISK -rx "test show results failed" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+       $ASTERISK -rx "test generate results xml $OUTPUTFILE" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+  $ASTERISK -rx "core stop now" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If DESTDIR is used to install and run asterisk from non standard locations,</span><br><span style="color: hsl(120, 100%, 40%);">+# the directory entries in asterisk.conf need to be munged to prepend DESTDIR.</span><br><span style="color: hsl(120, 100%, 40%);">+ALTERED=$(head -10 ../tmp/DESTDIR/etc/asterisk/asterisk.conf | grep -q "DESTDIR" && echo yes)</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$ALTERED" = x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+    # In the section that starts with [directories and ends with a blank line,</span><br><span style="color: hsl(120, 100%, 40%);">+    # replace "=> " with "=> ${DESTDIR}"</span><br><span style="color: hsl(120, 100%, 40%);">+        sed -i -r -e "/^\[directories/,/^$/ s@=>\s+@=> ${DESTDIR}@" "$ASTETCDIR/asterisk.conf"</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> cat <<-EOF > "$ASTETCDIR/logger.conf"</span><br><span>   [logfiles]</span><br><span>   full => notice,warning,error,debug,verbose</span><br><span style="color: hsl(120, 100%, 40%);">+ console => notice,warning,error</span><br><span> EOF</span><br><span> </span><br><span> echo "[default]" > "$ASTETCDIR/extensions.conf"</span><br><span>@@ -58,6 +104,7 @@</span><br><span> CONFFILE=$ASTETCDIR/asterisk.conf</span><br><span> OUTPUTDIR=${OUTPUT_DIR:-tests/CI/output/}</span><br><span> OUTPUTFILE=${OUTPUT_XML:-${OUTPUTDIR}/unittests-results.xml}</span><br><span style="color: hsl(120, 100%, 40%);">+EXPECT="$(which expect 2>/dev/null || : )"</span><br><span> </span><br><span> [ ! -d ${OUTPUTDIR} ] && mkdir -p $OUTPUTDIR</span><br><span> [ x"$USER_GROUP" != x ] && sudo chown -R $USER_GROUP $OUTPUTDIR</span><br><span>@@ -65,16 +112,14 @@</span><br><span> rm -rf $ASTETCDIR/extensions.{ael,lua} || :</span><br><span> </span><br><span> set -x</span><br><span style="color: hsl(0, 100%, 40%);">-sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -gn -C $CONFFILE</span><br><span style="color: hsl(0, 100%, 40%);">-for n in {1..5} ; do</span><br><span style="color: hsl(0, 100%, 40%);">-        sleep 3</span><br><span style="color: hsl(0, 100%, 40%);">- $ASTERISK -rx "core waitfullybooted" -C $CONFFILE && break</span><br><span style="color: hsl(0, 100%, 40%);">-done</span><br><span style="color: hsl(0, 100%, 40%);">-sleep 1</span><br><span style="color: hsl(0, 100%, 40%);">-$ASTERISK -rx "${UNITTEST_COMMAND:-test execute all}" -C $CONFFILE</span><br><span style="color: hsl(0, 100%, 40%);">-$ASTERISK -rx "test show results failed" -C $CONFFILE</span><br><span style="color: hsl(0, 100%, 40%);">-$ASTERISK -rx "test generate results xml $OUTPUTFILE" -C $CONFFILE</span><br><span style="color: hsl(0, 100%, 40%);">-$ASTERISK -rx "core stop now" -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$EXPECT" != x -a $NO_EXPECT -eq 0 ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+       run_tests_expect</span><br><span style="color: hsl(120, 100%, 40%);">+else</span><br><span style="color: hsl(120, 100%, 40%);">+        run_tests_socket</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Cleanup "just in case"</span><br><span style="color: hsl(120, 100%, 40%);">+sudo killall -qe -ABRT $ASTERISK </span><br><span> </span><br><span> runner rsync -vaH $DESTDIR/var/log/asterisk/. $OUTPUTDIR</span><br><span> set +x</span><br><span>@@ -86,6 +131,7 @@</span><br><span>         if [ -f $core ]</span><br><span>      then</span><br><span>                 echo "*** Found a core file ($core) after running unit tests ***"</span><br><span style="color: hsl(120, 100%, 40%);">+           set -x</span><br><span>               sudo OUTPUTDIR=$OUTPUTDIR $DESTDIR/var/lib/asterisk/scripts/ast_coredumper --no-default-search $core</span><br><span>         fi</span><br><span> done</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/10659">change 10659</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/10659"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Idd656085f854afede813ac241b9e312b31358160 </div>
<div style="display:none"> Gerrit-Change-Number: 10659 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Corey Farrell <git@cfware.com> </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins2 (1000185) </div>