I figured it might be nice if, every so often, one of us runs the test
suite through valgrind. Lacking any convenient way to do so, I hacked
up the following patch to allow command prefixes in the test suite.
Then, by specifying a prefix of "valgrind -q --tool=memcheck", I can
make each of the test suite commands run through valgrind. This is
rather slow (maybe 2-3 times slower than the regular test suite run),
but it works.
There's no way to put arguments with spaces into a multi-word shell
variable, so while I added a CMD_PREFIX variable for the "make check"
target, it only works if your command prefix is a single word, so to
use this convenience you'd have to make a script which runs valgrind
with the desired options.
I'm not sure what I think of this patch. It seems kind of hackish,
but I'm not sure if there's a better way to do what I want, and it's a
noble goal.
As a small aside, if you run build/run_tests.py with invalid
arguments, it just prints "None" and exits. It's trying to print
__doc__; I guess python (2.3.3) doesn't work that way?
* Makefile.in: Add CMD_PREFIX option to check target
* build/run_tests.py (__init__, _run_test, main): Add --cmd-prefix
support, similar to --fs-type and --url.
* subversion/tests/clients/cmdline/svntest/main.py
(cmd_prefix): New global containing the command prefix.
(run_command): If cmd_prefix is set, prepend it to command.
(main): Set cmd_prefix variable if --cmd-prefix option specified.
Index: Makefile.in
===================================================================
--- Makefile.in (revision 10923)
+++ Makefile.in (working copy)
@@ -348,6 +348,9 @@
if test "$(FS_TYPE)" != ""; then \
flags="--fs-type $(FS_TYPE) $$flags"; \
fi; \
+ if test "$(CMD_PREFIX)" != ""; then \
+ flags="--cmd-prefix $(CMD_PREFIX) $$flags"; \
+ fi; \
$(PYTHON) $(top_srcdir)/build/run_tests.py $$flags \
'$(abs_srcdir)' '$(abs_builddir)' '$(PYTHON)' '$(SHELL)' \
$(TESTS); \
Index: build/run_tests.py
===================================================================
--- build/run_tests.py (revision 10923)
+++ build/run_tests.py (working copy)
@@ -10,7 +10,8 @@
'''
def __init__(self, abs_srcdir, abs_builddir, python, shell, logfile,
- base_url=None, fs_type=None, verbose=None, cleanup=None):
+ base_url=None, fs_type=None, cmd_prefix=None, verbose=None,
+ cleanup=None):
'''Construct a TestHarness instance.
ABS_SRCDIR and ABS_BUILDDIR are the source and build directories.
@@ -19,6 +20,7 @@
LOGFILE is the name of the log file.
BASE_URL is the base url for DAV tests.
FS_TYPE is the FS type for repository creation.
+ CMD_PREFIX is the prefix for commands.
'''
self.srcdir = abs_srcdir
self.builddir = abs_builddir
@@ -27,6 +29,7 @@
self.logfile = logfile
self.base_url = base_url
self.fs_type = fs_type
+ self.cmd_prefix = cmd_prefix
self.verbose = verbose
self.cleanup = cleanup
self.log = None
@@ -87,6 +90,8 @@
cmdline.append(quote('--url=' + self.base_url))
if self.fs_type is not None:
cmdline.append(quote('--fs-type=' + self.fs_type))
+ if self.cmd_prefix is not None:
+ cmdline.append(quote('--cmd-prefix=' + self.cmd_prefix))
elif progbase[-3:] == '.sh':
progname = self.shell
cmdline = [quote(progname),
@@ -103,6 +108,8 @@
cmdline.append('--cleanup')
if self.fs_type is not None:
cmdline.append(quote('--fs-type=' + self.fs_type))
+ if self.cmd_prefix is not None:
+ cmdline.append(quote('--cmd-prefix=' + self.cmd_prefix))
else:
print 'Don\'t know what to do about ' + progbase
sys.exit(1)
@@ -151,7 +158,7 @@
def main():
'''Usage: run_tests.py [--url=<base-url>] [--fs-type=<fs-type>]
- [--verbose] [--cleanup]
+ [--cmd-prefix=<prefix>] [--verbose] [--cleanup]
<abs_srcdir> <abs_builddir> <python> <shell>
<prog ...>
@@ -162,7 +169,8 @@
try:
opts, args = getopt.getopt(sys.argv[1:], '',
- ['url=', 'fs-type=', 'verbose', 'cleanup'])
+ ['url=', 'fs-type=', 'cmd-prefix=', 'verbose',
+ 'cleanup'])
except getopt.GetoptError:
args = []
@@ -170,12 +178,15 @@
print __doc__
sys.exit(2)
- base_url, fs_type, verbose, cleanup = None, None, None, None
+ base_url, fs_type, cmd_prefix, verbose = None, None, None, None
+ cleanup = None
for opt, val in opts:
if opt == '--url':
base_url = val
elif opt == '--fs-type':
fs_type = val
+ elif opt == '--cmd-prefix':
+ cmd_prefix = val
elif opt == '--verbose':
verbose = 1
elif opt == '--cleanup':
@@ -185,7 +196,7 @@
th = TestHarness(args[0], args[1], args[2], args[3],
os.path.abspath('tests.log'),
- base_url, fs_type, verbose, cleanup)
+ base_url, fs_type, cmd_prefix, verbose, cleanup)
failed = th.run(args[4:])
if failed:
Index: subversion/tests/clients/cmdline/svntest/main.py
===================================================================
--- subversion/tests/clients/cmdline/svntest/main.py (revision 10923)
+++ subversion/tests/clients/cmdline/svntest/main.py (working copy)
@@ -113,6 +113,9 @@
# Global variable indicating the FS type for repository creations.
fs_type = None
+# Global variable to be used as a prefix for commands we run.
+cmd_prefix = None
+
# Where we want all the repositories and working copies to live.
# Each test will have its own!
general_repo_dir = "repositories"
@@ -212,6 +215,8 @@
else:
mode = 't'
+ if cmd_prefix is not None:
+ command = cmd_prefix + " " + command
start = time.time()
infile, outfile, errfile = os.popen3(command + args, mode)
@@ -546,6 +551,7 @@
global test_area_url
global fs_type
+ global cmd_prefix
global verbose_mode
global cleanup_mode
testnum = None
@@ -556,7 +562,8 @@
try:
opts, args = getopt.getopt(sys.argv[1:], 'v',
- ['url=', 'fs-type=', 'verbose', 'cleanup'])
+ ['url=', 'fs-type=', 'cmd-prefix=', 'verbose',
+ 'cleanup'])
except getopt.GetoptError:
args = []
@@ -587,6 +594,9 @@
elif opt == "--fs-type":
fs_type = val
+ elif opt == "--cmd-prefix":
+ cmd_prefix = val
+
elif opt == "-v" or opt == "--verbose":
verbose_mode = 1
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Sep 12 21:59:21 2004