Add valgrind support to integration tests
* tests/integration/saml2/__init__.py: if /usr/bin/valgrind exist, use script valgrind-wrapper.sh to launch tests, it stores log files in {authentic,lcs}_$ISODATE_pid$PID.log.
This commit is contained in:
parent
7e4a554d61
commit
a4e03e7626
|
@ -4,6 +4,7 @@ import signal
|
|||
import subprocess
|
||||
import time
|
||||
import twill
|
||||
import urllib2
|
||||
|
||||
AUTHENTIC_SRCDIR = '/usr/local/src/authentic'
|
||||
AUTHENTICCTL = '/usr/sbin/authenticctl.py'
|
||||
|
@ -18,6 +19,18 @@ except ImportError:
|
|||
|
||||
pids = []
|
||||
|
||||
def waitforport(port, start):
|
||||
while True:
|
||||
if time.time() - start > 90:
|
||||
raise Exception('Servers did not start in 90 seconds!!')
|
||||
time.sleep(5)
|
||||
try:
|
||||
urllib2.urlopen('http://localhost:%s' % port)
|
||||
except urllib2.URLError:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
|
||||
def setup():
|
||||
if not os.path.exists(AUTHENTIC_SRCDIR):
|
||||
print >> sys.stderr, 'Authentic source dir (%s) does not exist' % AUTHENTIC_SRCDIR
|
||||
|
@ -26,27 +39,39 @@ def setup():
|
|||
|
||||
twill.commands.reset_browser()
|
||||
twill.set_output(file('/dev/null', 'w'))
|
||||
base = []
|
||||
if os.path.exists('/usr/bin/valgrind'):
|
||||
base = ['./valgrind-wrapper.sh', 'python']
|
||||
|
||||
os.environ['PYTHONPATH'] = '../../bindings/python:../../bindings/python/.libs'
|
||||
os.mkdir('/tmp/.tests')
|
||||
sp = subprocess.Popen([AUTHENTICCTL, 'start',
|
||||
authentic_command = base + [AUTHENTICCTL, 'start',
|
||||
'--app-dir', '/tmp/.tests/authentictests',
|
||||
'--data-dir', AUTHENTIC_DATADIR,
|
||||
'--extra', os.path.join(AUTHENTIC_SRCDIR, 'extra', 'conformance'),
|
||||
'--port', '10001', '--http', '--silent'])
|
||||
'--port', '10001', '--http', '--silent']
|
||||
print authentic_command
|
||||
sp = subprocess.Popen(authentic_command)
|
||||
pids.append(sp.pid)
|
||||
sp = subprocess.Popen([LCSCTL, 'start',
|
||||
lcs_command = base + [LCSCTL, 'start',
|
||||
'--app-dir', '/tmp/.tests/lcstests',
|
||||
'--data-dir', LCS_DATADIR,
|
||||
'--port', '10002', '--http', '--silent'])
|
||||
'--port', '10002', '--http', '--silent']
|
||||
print lcs_command
|
||||
sp = subprocess.Popen(lcs_command)
|
||||
pids.append(sp.pid)
|
||||
|
||||
time.sleep(5) # let process bind ports
|
||||
# Wait for the daemons to load themselves
|
||||
starttime = time.time()
|
||||
waitforport(10001, starttime)
|
||||
waitforport(10002, starttime)
|
||||
|
||||
|
||||
def teardown():
|
||||
for pid in pids:
|
||||
try:
|
||||
os.kill(pid, signal.SIGTERM)
|
||||
# valgrind seems to prefer SIGINT to SIGTERM
|
||||
os.kill(pid, signal.SIGINT)
|
||||
except OSError:
|
||||
print >> sys.stderr, 'failed to kill pid %s' % pid
|
||||
os.system('rm -rf /tmp/.tests/')
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
DATE=`date +%FT%TZ`
|
||||
if [ $1 == 'python' ]; then
|
||||
NAME=`basename $2`
|
||||
else
|
||||
NAME=$1
|
||||
fi
|
||||
env MALLOC_CHECK_=2 G_SLICE=always-malloc PYTHONPATH=/home/bdauvergne/wd/lasso/git/bindings/python:/home/bdauvergne/wd/lasso/git/bindings/python/.libs LD_LIBRARY_PATH=/home/bdauvergne/wd/lasso/git/lasso/.libs valgrind --show-reachable=yes --suppressions=../valgrind/lasso.supp --suppressions=../valgrind/glib.supp --suppressions=../valgrind/openssl.supp --suppressions=/usr/lib/valgrind/python.supp --leak-check=full --log-file="${NAME}_${DATE}_pid-$$.log" --track-origins=yes "$@"
|
||||
|
||||
|
Loading…
Reference in New Issue