[asterisk-commits] coreyfarrell: testsuite/asterisk/trunk r5825 - in /asterisk/trunk: ./ contrib...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Oct 30 22:20:37 CDT 2014


Author: coreyfarrell
Date: Thu Oct 30 22:20:32 2014
New Revision: 5825

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=5825
Log:
Process REF_DEBUG logs, fail any test that leaks

* Fail any test that shows leaks in REF_DEBUG logs.
* Add script to view summary of objects leaked per instance
* Allow $MENUSELECT_OPTIONS environmental variable to be used with
  './run-local setup' to pass additional parameters to menuselect

ASTERISK-24379 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4038/

Added:
    asterisk/trunk/contrib/scripts/refleaks-summary   (with props)
Modified:
    asterisk/trunk/run-local
    asterisk/trunk/runtests.py

Added: asterisk/trunk/contrib/scripts/refleaks-summary
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/contrib/scripts/refleaks-summary?view=auto&rev=5825
==============================================================================
--- asterisk/trunk/contrib/scripts/refleaks-summary (added)
+++ asterisk/trunk/contrib/scripts/refleaks-summary Thu Oct 30 22:20:32 2014
@@ -1,0 +1,55 @@
+#!/bin/sh
+
+print_usage() {
+	echo "Usage:"
+	echo "$0 [-s] [-n] [-b logs/]"
+	echo "\t-s            Strip /var/log/asterisk/refs.txt from output"
+	echo "\t-n            Sort output by number of objects leaked"
+	echo "\t-r            Reverse sort output"
+	echo "\t-b BASEDIR    Search for logs from BASEDIR instead of logs/"
+	exit $1
+}
+
+SORTPARAMS="-k2"
+REVERSEPARAMS=""
+STRIPFILE=
+BASEPATH=logs/
+while getopts ":snrhb:" opt; do
+	case $opt in
+		s)
+			STRIPFILE=/var/log/asterisk/refs.txt
+			;;
+		r)
+			REVERSEPARAMS="-r"
+			;;
+		n)
+			SORTPARAMS="-n"
+			;;
+		b)
+			BASEPATH="$OPTARG"
+			;;
+		:)
+			echo "Option -$OPTARG requires an argument."
+			exit 1
+			;;
+		h)
+			print_usage 0
+			;;
+		\?)
+			print_usage 1 1>&2
+			;;
+	esac
+done
+
+if test $OPTIND -le $#; then
+	print_usage 1 1>&2
+fi
+
+REFS_FILES=$(find "${BASEPATH}" -name refs.txt 2>/dev/null)
+if test -z "$REFS_FILES"; then
+	echo "No refs.txt logs found in ${BASEPATH}"
+	exit
+fi
+
+echo "Leaked objects per instance of Asterisk:"
+grep -H $REFS_FILES -e '==== Leaked Object '|sed -e "s,$STRIPFILE:.*,,"|uniq -c|sort $SORTPARAMS $REVERSEPARAMS

Propchange: asterisk/trunk/contrib/scripts/refleaks-summary
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/contrib/scripts/refleaks-summary
------------------------------------------------------------------------------
    svn:executable = *

Propchange: asterisk/trunk/contrib/scripts/refleaks-summary
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/contrib/scripts/refleaks-summary
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: asterisk/trunk/run-local
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/run-local?view=diff&rev=5825&r1=5824&r2=5825
==============================================================================
--- asterisk/trunk/run-local (original)
+++ asterisk/trunk/run-local Thu Oct 30 22:20:32 2014
@@ -25,7 +25,7 @@
 		if [ ! -f config.status ]; then
 			./configure --enable-dev-mode
 			make menuselect.makeopts
-			menuselect/menuselect --enable DONT_OPTIMIZE --enable TEST_FRAMEWORK
+			menuselect/menuselect --enable DONT_OPTIMIZE --enable TEST_FRAMEWORK $MENUSELECT_OPTIONS
 		fi
 		make
 		make install samples DESTDIR="$HERE/astroot"

Modified: asterisk/trunk/runtests.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/runtests.py?view=diff&rev=5825&r1=5824&r2=5825
==============================================================================
--- asterisk/trunk/runtests.py (original)
+++ asterisk/trunk/runtests.py Thu Oct 30 22:20:32 2014
@@ -90,6 +90,8 @@
                 print "Core dumps detected; failing test"
                 self.passed = False
                 self._archive_core_dumps(core_dumps)
+
+            self._process_ref_debug()
 
             if not self.passed:
                 self._archive_logs()
@@ -137,7 +139,7 @@
                 except OSError, e:
                     print "Error removing core file: %s: Beware of the stale core file in CWD!" % (e,)
 
-    def _archive_logs(self):
+    def _find_run_dirs(self):
         test_run_dir = os.path.join(Asterisk.test_suite_root,
                                     self.test_relpath)
 
@@ -150,6 +152,53 @@
         archive_dir = os.path.join('./logs',
                                    self.test_relpath,
                                    'run_%d' % run_num)
+        return (run_num, run_dir, archive_dir)
+
+    def _process_ref_debug(self):
+        (run_num, run_dir, archive_dir) = self._find_run_dirs()
+        if (run_num == 0):
+            return
+
+        refcounter_py = os.path.join(run_dir, "ast1/var/lib/asterisk/scripts/refcounter.py")
+        if not os.path.exists(refcounter_py):
+            return
+
+        i = 1
+        while os.path.isdir(os.path.join(run_dir, 'ast%d/var/log/asterisk' % i)):
+            ast_dir = "%s/ast%d/var/log/asterisk" % (run_dir, i)
+            refs_in = os.path.join(ast_dir, "refs")
+            if os.path.exists(refs_in):
+                refs_txt = os.path.join(ast_dir, "refs.txt")
+                dest_file = open(refs_txt, "w")
+                refcounter = [
+                    refcounter_py,
+                    "-f", refs_in,
+                    "-sn"
+                ]
+                res = -1
+                try:
+                    res = subprocess.call(refcounter,
+                                          stdout=dest_file,
+                                          stderr=subprocess.STDOUT)
+                except Exception, e:
+                    print "Exception occurred while processing REF_DEBUG"
+                finally:
+                    dest_file.close()
+                if res != 0:
+                    dest_dir = os.path.join(archive_dir,
+                                            'ast%d/var/log/asterisk' % i)
+                    if not os.path.exists(dest_dir):
+                        os.makedirs(dest_dir)
+                    hardlink_or_copy(refs_txt,
+                        os.path.join(dest_dir, "refs.txt"))
+                    hardlink_or_copy(refs_in,
+                        os.path.join(dest_dir, "refs"))
+                    print "REF_DEBUG identified leaks, mark test as failure"
+                    self.passed = False
+            i += 1
+
+    def _archive_logs(self):
+        (run_num, run_dir, archive_dir) = self._find_run_dirs()
         self._archive_ast_logs(run_num, run_dir, archive_dir)
         self._archive_pcap_dump(run_dir, archive_dir)
         if os.path.exists(os.path.join(run_dir, 'messages.txt')):




More information about the asterisk-commits mailing list