1
0
mirror of https://github.com/samba-team/samba.git synced 2025-06-22 07:17:05 +03:00
Matthieu Patou 902e7288a7 selftest: use full path for selftest.pl instead of relative paths
FindBin on solaris8 with perl 5.04 has problem to get the path of the
called script if the script is called with a relative path.

Autobuild-User: Matthieu Patou <mat@samba.org>
Autobuild-Date: Mon Oct 18 19:50:03 UTC 2010 on sn-devel-104
2010-10-18 19:50:03 +00:00

180 lines
7.5 KiB
Python

#!/usr/bin/env python
# vim: expandtab ft=python
# selftest main code.
import Scripting, os, Options, Utils, Environment, optparse, sys
from samba_utils import *
from samba_autoconf import *
def set_options(opt):
opt.add_option('--enable-selftest',
help=("enable options necessary for selftest (default=no)"),
action="store_true", dest='enable_selftest', default=False)
opt.add_option('--with-selftest-prefix',
help=("specify location of selftest directory (default=./st)"),
action="store", dest='SELFTEST_PREFIX', default='./st')
opt.ADD_COMMAND('test', cmd_test)
opt.ADD_COMMAND('testonly', cmd_testonly)
gr = opt.add_option_group('test options')
gr.add_option('--load-list',
help=("Load a test id list from a text file"),
action="store", dest='LOAD_LIST', default=None)
gr.add_option('--tests',
help=("wildcard pattern of tests to run"),
action="store", dest='TESTS', default='')
gr.add_option('--filtered-subunit',
help=("output (xfail) filtered subunit"),
action="store_true", dest='FILTERED_SUBUNIT', default=False)
gr.add_option('--quick',
help=("enable only quick tests"),
action="store_true", dest='QUICKTEST', default=False)
gr.add_option('--slow',
help=("enable the really slow tests"),
action="store_true", dest='SLOWTEST', default=False)
gr.add_option('--testenv',
help=("start a terminal with the test environment setup"),
action="store_true", dest='TESTENV', default=False)
gr.add_option('--valgrind',
help=("use valgrind on client programs in the tests"),
action="store_true", dest='VALGRIND', default=False)
gr.add_option('--valgrind-log',
help=("where to put the valgrind log"),
action="store", dest='VALGRINDLOG', default=None)
gr.add_option('--valgrind-server',
help=("use valgrind on the server in the tests (opens an xterm)"),
action="store_true", dest='VALGRIND_SERVER', default=False)
gr.add_option('--screen',
help=("run the samba servers in screen sessions"),
action="store_true", dest='SCREEN', default=False)
gr.add_option('--gdbtest',
help=("run the servers within a gdb window"),
action="store_true", dest='GDBTEST', default=False)
gr.add_option('--fail-immediately',
help=("stop tests on first failure"),
action="store_true", dest='FAIL_IMMEDIATELY', default=False)
gr.add_option('--socket-wrapper-pcap',
help=("create a pcap file for each failing test"),
action="store_true", dest='SOCKET_WRAPPER_PCAP', default=False)
gr.add_option('--socket-wrapper-keep-pcap',
help=("create a pcap file for all individual test"),
action="store_true", dest='SOCKET_WRAPPER_KEEP_PCAP', default=False)
def configure(conf):
conf.env.SELFTEST_PREFIX = Options.options.SELFTEST_PREFIX
def cmd_testonly(opt):
'''run tests without doing a build first'''
env = LOAD_ENVIRONMENT()
opt.env = env
if (not CONFIG_SET(opt, 'NSS_WRAPPER') or
not CONFIG_SET(opt, 'UID_WRAPPER') or
not CONFIG_SET(opt, 'SOCKET_WRAPPER')):
print("ERROR: You must use --enable-selftest to enable selftest")
sys.exit(1)
os.environ['SAMBA_SELFTEST'] = '1'
env.TESTS = Options.options.TESTS
env.SUBUNIT_FORMATTER = '${PYTHON} -u ../selftest/format-subunit --prefix=${SELFTEST_PREFIX} --immediate'
env.FILTER_XFAIL = '${PYTHON} -u ../selftest/filter-subunit --expected-failures=./selftest/knownfail'
if Options.options.FAIL_IMMEDIATELY:
env.FILTER_XFAIL += ' --fail-immediately'
env.FORMAT_TEST_OUTPUT = '${SUBUNIT_FORMATTER}'
# clean any previous temporary files
os.system("rm -rf %s/tmp" % env.SELFTEST_PREFIX);
# put all command line options in the environment as TESTENV_*=*
for o in dir(Options.options):
if o[0:1] != '_':
os.environ['TESTENV_%s' % o.upper()] = str(getattr(Options.options, o, ''))
env.OPTIONS = ''
if not Options.options.SLOWTEST:
env.OPTIONS += ' --exclude=./selftest/slow'
if Options.options.QUICKTEST:
env.OPTIONS += ' --quick --include=./selftest/quick'
if Options.options.LOAD_LIST:
env.OPTIONS += ' --load-list=%s' % Options.options.LOAD_LIST
if Options.options.TESTENV:
env.OPTIONS += ' --testenv'
if Options.options.SOCKET_WRAPPER_PCAP:
env.OPTIONS += ' --socket-wrapper-pcap'
if Options.options.SOCKET_WRAPPER_KEEP_PCAP:
env.OPTIONS += ' --socket-wrapper-keep-pcap'
if os.environ.get('RUN_FROM_BUILD_FARM') is not None:
env.FILTER_OPTIONS = '${FILTER_XFAIL} --strip-passed-output'
else:
env.FILTER_OPTIONS = '${FILTER_XFAIL}'
if Options.options.VALGRIND:
os.environ['VALGRIND'] = 'valgrind -q --num-callers=30'
if Options.options.VALGRINDLOG is not None:
os.environ['VALGRIND'] += ' --log-file=%s' % Options.options.VALGRINDLOG
server_wrapper=''
if Options.options.VALGRIND_SERVER:
server_wrapper = '../selftest/valgrind_run _DUMMY=X'
elif Options.options.GDBTEST:
server_wrapper = '../selftest/gdb_run _DUMMY=X'
if Options.options.SCREEN:
server_wrapper = '%s/../selftest/in_screen %s' % (os.getcwd(), server_wrapper)
os.environ['TERMINAL'] = '%s/../selftest/in_screen' % os.getcwd()
elif server_wrapper != '':
server_wrapper = 'xterm -n server -l -e %s' % server_wrapper
if server_wrapper != '':
os.environ['SAMBA_VALGRIND'] = server_wrapper
# this is needed for systems without rpath, or with rpath disabled
ADD_LD_LIBRARY_PATH('bin/shared')
# tell build system where to find config.h
os.environ['CONFIG_H'] = 'bin/default/source4/include/config.h'
st_done = os.path.join(env.SELFTEST_PREFIX, 'st_done')
if os.path.exists(st_done):
os.unlink(st_done)
# We use the full path rather than relative path because it cause problems on some plateforms (ie. solaris 8).
cmd = '(${PERL} %s/../selftest/selftest.pl --prefix=${SELFTEST_PREFIX} --builddir=. --srcdir=. --exclude=./selftest/skip --testlist="${PYTHON} ./selftest/tests.py|" ${OPTIONS} --socket-wrapper ${TESTS} && touch ${SELFTEST_PREFIX}/st_done) | ${FILTER_OPTIONS} | tee ${SELFTEST_PREFIX}/subunit' % (os.getcwd())
if os.environ.get('RUN_FROM_BUILD_FARM') is None and not Options.options.FILTERED_SUBUNIT:
cmd += ' | ${FORMAT_TEST_OUTPUT}'
cmd = EXPAND_VARIABLES(opt, cmd)
print("test: running %s" % cmd)
ret = RUN_COMMAND(cmd, env=env)
if os.path.exists(".testrepository"):
# "testr load -q" isn't
cmd = 'testr load -q < ${SELFTEST_PREFIX}/subunit > /dev/null'
cmd = EXPAND_VARIABLES(opt, cmd)
RUN_COMMAND(cmd, env=env)
if ret != 0:
print("ERROR: test failed with exit code %d" % ret)
sys.exit(ret)
if not os.path.exists(st_done):
print("ERROR: test command failed to complete")
sys.exit(1)
########################################################################
# main test entry point
def cmd_test(opt):
'''Run the test suite (see test options below)'''
Scripting.commands.append('build')
Scripting.commands.append('testonly')