blob: 42c7315a44196f1af92ef003aabb763cb8f1a7e5 [file] [log] [blame]
"""Driver for running the tests on Windows.
Usage: python win-tests.py [option] [test-path]
-r, --release test the Release configuration
-d, --debug test the Debug configuration (default)
-u URL, --url=URL run ra_dav or ra_svn tests against URL; will start
svnserve for ra_svn tests
-v, --verbose talk more
-f, --fs-type=type filesystem type to use (bdb is default)
--svnserve-args=list comma-separated list of arguments for svnserve;
default is '-d,-r,<test-path-root>'
"""
tests = ['subversion/tests/libsvn_subr/config-test.exe',
'subversion/tests/libsvn_subr/hashdump-test.exe',
'subversion/tests/libsvn_subr/string-test.exe',
'subversion/tests/libsvn_subr/path-test.exe',
'subversion/tests/libsvn_subr/stream-test.exe',
'subversion/tests/libsvn_subr/time-test.exe',
'subversion/tests/libsvn_subr/utf-test.exe',
'subversion/tests/libsvn_wc/translate-test.exe',
'subversion/tests/libsvn_diff/diff-diff3-test.exe',
'subversion/tests/libsvn_delta/random-test.exe',
'subversion/tests/libsvn_subr/target-test.py']
fs_tests = ['subversion/tests/libsvn_fs_base/run-fs-tests.py',
'subversion/tests/libsvn_repos/run-repos-tests.py']
client_tests = ['subversion/tests/clients/cmdline/getopt_tests.py',
'subversion/tests/clients/cmdline/basic_tests.py',
'subversion/tests/clients/cmdline/commit_tests.py',
'subversion/tests/clients/cmdline/update_tests.py',
'subversion/tests/clients/cmdline/switch_tests.py',
'subversion/tests/clients/cmdline/prop_tests.py',
'subversion/tests/clients/cmdline/schedule_tests.py',
'subversion/tests/clients/cmdline/log_tests.py',
'subversion/tests/clients/cmdline/copy_tests.py',
'subversion/tests/clients/cmdline/diff_tests.py',
'subversion/tests/clients/cmdline/export_tests.py',
'subversion/tests/clients/cmdline/externals_tests.py',
'subversion/tests/clients/cmdline/merge_tests.py',
'subversion/tests/clients/cmdline/stat_tests.py',
'subversion/tests/clients/cmdline/trans_tests.py',
'subversion/tests/clients/cmdline/autoprop_tests.py',
'subversion/tests/clients/cmdline/revert_tests.py',
'subversion/tests/clients/cmdline/blame_tests.py',
'subversion/tests/clients/cmdline/utf8_tests.py',
'subversion/tests/clients/cmdline/svnadmin_tests.py',
'subversion/tests/clients/cmdline/svnlook_tests.py',
'subversion/tests/clients/cmdline/svnversion_tests.py']
import os, sys, string, shutil, traceback
import getopt
import ConfigParser
opts, args = getopt.getopt(sys.argv[1:], 'rdvcu:f:sS:',
['release', 'debug', 'verbose', 'cleanup', 'url=',
'svnserve-args=', 'fs-type='])
if len(args) > 1:
print 'Warning: non-option arguments after the first one will be ignored'
# Interpret the options and set parameters
all_tests = tests + fs_tests + client_tests
repo_loc = 'local repository.'
base_url = None
verbose = 0
cleanup = None
objdir = 'Debug'
log = 'tests.log'
run_svnserve = None
svnserve_args = None
fs_type = None
for opt,arg in opts:
if opt in ['-r', '--release']:
objdir = 'Release'
elif opt in ['-d', '--debug']:
objdir = 'Debug'
elif opt in ['-v', '--verbose']:
verbose = 1
elif opt in ['-c', '--cleanup']:
cleanup = 1
elif opt in ['-u', '--url']:
all_tests = client_tests
repo_loc = 'remote repository ' + arg + '.'
base_url = arg
if arg[:4] == 'http':
log = 'dav-tests.log'
elif arg[:3] == 'svn':
log = 'svn-tests.log'
run_svnserve = 1
else:
# Don't know this schema, but who're we to judge whether it's
# correct or not?
log = 'url-tests.log'
elif opt == '--svnserve-args':
svnserve_args = string.split(arg, ',')
run_svnserve = 1
elif opt in ['-f', '--fs-type']:
fs_type = arg
# Calculate the source and test directory names
abs_srcdir = os.path.abspath("")
abs_objdir = os.path.join(abs_srcdir, objdir)
if len(args) == 0:
abs_builddir = abs_objdir
create_dirs = 0
else:
abs_builddir = os.path.abspath(args[0])
create_dirs = 1
# Have to move the executables where the tests expect them to be
copied_execs = [] # Store copied exec files to avoid the final dir scan
def create_target_dir(dirname):
if create_dirs:
tgt_dir = os.path.join(abs_builddir, dirname)
if not os.path.exists(tgt_dir):
if verbose:
print "mkdir:", tgt_dir
os.makedirs(tgt_dir)
def copy_execs(dummy, dirname, names):
global copied_execs
for name in names:
if os.path.splitext(name)[1] != ".exe":
continue
src = os.path.join(dirname, name)
tgt = os.path.join(abs_builddir, dirname, name)
create_target_dir(dirname)
try:
if verbose:
print "copy:", src
print " to:", tgt
shutil.copy(src, tgt)
copied_execs.append(tgt)
except:
traceback.print_exc(file=sys.stdout)
pass
def locate_libs():
"Move APR DLLs to a known location and set env vars"
def get(cp, section, option, default):
if cp.has_option(section, option):
return cp.get(section, option)
else:
return default
cp = ConfigParser.ConfigParser()
cp.read('gen-make.opts')
apr_path = get(cp, 'options', '--with-apr', 'apr')
apr_dll_path = os.path.join(apr_path, objdir, 'libapr.dll')
aprutil_path = get(cp, 'options', '--with-apr-util', 'apr-util')
aprutil_dll_path = os.path.join(aprutil_path, objdir, 'libaprutil.dll')
apriconv_path = get(cp, 'options', '--with-apr-iconv', 'apr-iconv')
apriconv_dll_path = os.path.join(apriconv_path, objdir, 'libapriconv.dll')
apriconv_so_path = os.path.join(apriconv_path, objdir, 'iconv')
shutil.copy(apr_dll_path, abs_objdir)
shutil.copy(aprutil_dll_path, abs_objdir)
shutil.copy(apriconv_dll_path, abs_objdir)
os.environ['APR_ICONV_PATH'] = apriconv_so_path
os.environ['PATH'] = abs_objdir + os.pathsep + os.environ['PATH']
def start_svnserve():
"Run svnserve for ra_svn tests"
global svnserve_args
svnserve_name = 'svnserve.exe'
svnserve_path = os.path.join(abs_objdir,
'subversion', 'svnserve', svnserve_name)
svnserve_root = os.path.join(abs_builddir,
'subversion', 'tests', 'clients', 'cmdline')
if not svnserve_args:
svnserve_args = [svnserve_name, '-d', '-r', svnserve_root]
else:
svnserve_args = [svnserve_name] + svnserve_args
os.spawnv(os.P_NOWAIT, svnserve_path, svnserve_args)
# Move the binaries to the test directory
locate_libs()
if create_dirs:
old_cwd = os.getcwd()
try:
os.chdir(abs_objdir)
os.path.walk('subversion', copy_execs, None)
create_target_dir('subversion/tests/clients/cmdline')
except:
os.chdir(old_cwd)
raise
else:
os.chdir(old_cwd)
# Run the tests
if run_svnserve:
print 'Starting', objdir, 'svnserve'
start_svnserve()
print 'Testing', objdir, 'configuration on', repo_loc
sys.path.insert(0, os.path.join(abs_srcdir, 'build'))
import run_tests
th = run_tests.TestHarness(abs_srcdir, abs_builddir, sys.executable, None,
os.path.join(abs_builddir, log),
base_url, fs_type, 1, cleanup)
old_cwd = os.getcwd()
try:
os.chdir(abs_builddir)
failed = th.run(all_tests)
except:
os.chdir(old_cwd)
raise
else:
os.chdir(old_cwd)
# Remove the execs again
for tgt in copied_execs:
try:
if os.path.isfile(tgt):
if verbose:
print "kill:", tgt
os.unlink(tgt)
except:
traceback.print_exc(file=sys.stdout)
pass
# Print final status
if failed:
print
print 'FAIL:', sys.argv[0]
sys.exit(1)