[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] Command prefixes for the test suite (for valgrind et al)

From: Greg Hudson <ghudson_at_MIT.EDU>
Date: 2004-09-12 21:59:08 CEST

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

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.