selftest: Add separate command line for listing tests, allowing us of subunit-filter...
authorJelmer Vernooij <jelmer@samba.org>
Sat, 1 Nov 2014 22:13:18 +0000 (15:13 -0700)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 30 Nov 2014 13:22:05 +0000 (14:22 +0100)
Change-Id: Icb877214a422c63fd38ef92425c7b4fe7ee19ad5
Signed-Off-By: Jelmer Vernooij <jelmer@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
selftest/selftest.pl
selftest/selftesthelpers.py
selftest/testlist.py
selftest/tests/test_testlist.py
source4/scripting/bin/subunitrun
source4/selftest/tests.py

index 34ae6056efda87d21247813e64be4c54c64ec224..ea63ee528b5a242e2dea19a44c2809fd540bd6fd 100755 (executable)
@@ -574,10 +574,15 @@ sub read_testlist($)
                        $name =~ s/\n//g;
                        my $env = <IN>;
                        $env =~ s/\n//g;
+                       my $loadlist;
+                       if ($supports_loadlist) {
+                               $loadlist = <IN>;
+                               $loadlist =~ s/\n//g;
+                       }
                        my $cmdline = <IN>;
                        $cmdline =~ s/\n//g;
                        if (should_run_test($name) == 1) {
-                               push (@ret, [$name, $env, $cmdline, $supports_loadlist]);
+                               push (@ret, [$name, $env, $cmdline, $loadlist]);
                        }
                } else {
                        print;
@@ -937,11 +942,12 @@ $envvarstr
        teardown_env($testenv_name);
 } elsif ($opt_list) {
        foreach (@todo) {
-               my $cmd = $$_[2];
                my $name = $$_[0];
                my $envname = $$_[1];
+               my $cmd = $$_[2];
+               my $listcmd = $$_[3];
 
-               unless($cmd =~ /\$LISTOPT/) {
+               unless (defined($listcmd)) {
                        warn("Unable to list tests in $name");
                        # Rather than ignoring this testsuite altogether, just pretend the entire testsuite is
                        # a single "test".
@@ -949,14 +955,12 @@ $envvarstr
                        next;
                }
 
-               $cmd =~ s/\$LISTOPT/--list/g;
-
-               system($cmd);
+               system($listcmd);
 
                if ($? == -1) {
-                       die("Unable to run $cmd: $!");
+                       die("Unable to run $listcmd: $!");
                } elsif ($? & 127) {
-                       die(sprintf("%s died with signal %d, %s coredump\n", $cmd, ($? & 127),  ($? & 128) ? 'with' : 'without'));
+                       die(sprintf("%s died with signal %d, %s coredump\n", $listcmd, ($? & 127),  ($? & 128) ? 'with' : 'without'));
                }
 
                my $exitcode = $? >> 8;
index c66d92d4b3cab7f4c5a796fa6e85f553c47e1c0a..b2440054e605cd019c14eec33db6ab0277f508cb 100644 (file)
@@ -82,6 +82,12 @@ if sub.returncode == 0:
     if sub.returncode == 0:
         tap2subunit = "tap2subunit"
 
+def to_subunit1(subunit_version):
+    if subunit_version == 1:
+        return ""
+    return " | " + subunit2to1
+
+
 def valgrindify(cmdline):
     """Run a command under valgrind, if $VALGRIND was set."""
     valgrind = os.getenv("VALGRIND")
@@ -90,7 +96,7 @@ def valgrindify(cmdline):
     return valgrind + " " + cmdline
 
 
-def plantestsuite(name, env, cmdline):
+def plantestsuite(name, env, cmdline, subunit_version=1):
     """Plan a test suite.
 
     :param name: Testsuite name
@@ -102,7 +108,9 @@ def plantestsuite(name, env, cmdline):
     print env
     if isinstance(cmdline, list):
         cmdline = " ".join(cmdline)
-    print "%s 2>&1 | " + add_prefix(name, env, "$LISTOPT" in cmdline)
+    if "$LISTOPT" in cmdline:
+        raise AssertionError("test %s supports --list, but not --load-list" % name)
+    print cmdline + " 2>&1 " + to_subunit1(subunit_version) + " | " + add_prefix(name, env)
 
 
 def add_prefix(prefix, env, support_list=False):
@@ -113,7 +121,7 @@ def add_prefix(prefix, env, support_list=False):
     return "%s/selftest/filter-subunit %s--fail-on-empty --prefix=\"%s.\" --suffix=\"(%s)\"" % (srcdir(), listopt, prefix, env)
 
 
-def plantestsuite_loadlist(name, env, cmdline):
+def plantestsuite_loadlist(name, env, cmdline, subunit_version=1):
     print "-- TEST-LOADLIST --"
     if env == "none":
         fullname = name
@@ -124,7 +132,10 @@ def plantestsuite_loadlist(name, env, cmdline):
     if isinstance(cmdline, list):
         cmdline = " ".join(cmdline)
     support_list = ("$LISTOPT" in cmdline)
-    print "%s $LOADLIST 2>&1 | %s" % (cmdline, add_prefix(name, env, support_list))
+    if not "$LISTOPT" in cmdline:
+        raise AssertionError("test %s supports --load-list, but not --list" % name)
+    print ("%s | %s" % (cmdline, add_prefix(name, env, support_list))).replace("$LISTOPT", "--list")
+    print cmdline + " $LOADLIST 2>&1 " + to_subunit1(subunit_version) + "| " + add_prefix(name, env, support_list)
 
 
 def skiptestsuite(name, reason):
index 50ea31b62db0e8fdd5602e2123cc945fa079c51d..34c7a5d31c953b6ec2424c8e3c4aeeafd7b61b6e 100644 (file)
@@ -81,8 +81,12 @@ def read_testlist(inf, outf):
             supports_loadlist = l.startswith("-- TEST-LOADLIST")
             name = inf.readline().rstrip("\n")
             env = inf.readline().rstrip("\n")
+            if supports_loadlist:
+                loadlist = inf.readline().rstrip("\n")
+            else:
+                loadlist = None
             cmdline = inf.readline().rstrip("\n")
-            yield (name, env, cmdline, supports_loadlist)
+            yield (name, env, cmdline, loadlist)
         else:
             outf.write(l)
 
index 7846eb1eff2f2fb7570e778bf3e1cebcaebf5344..7007d6d35a2482e0df6ba4e67c1e56abfb0450b9 100644 (file)
@@ -67,14 +67,14 @@ class ReadTestlistTests(TestCase):
     def test_read_list(self):
         inf = StringIO("-- TEST --\nfoo\nbar\nbla\n")
         outf = StringIO()
-        self.assertEquals([('foo', 'bar', 'bla', False)],
+        self.assertEquals([('foo', 'bar', 'bla', None)],
                 list(read_testlist(inf, outf)))
         self.assertEquals("", outf.getvalue())
 
     def test_read_list_passes_through(self):
         inf = StringIO("MORENOISE\n-- TEST --\nfoo\nbar\nbla\nNOISE\n")
         outf = StringIO()
-        self.assertEquals([('foo', 'bar', 'bla', False)],
+        self.assertEquals([('foo', 'bar', 'bla', None)],
                 list(read_testlist(inf, outf)))
         self.assertEquals("MORENOISE\nNOISE\n", outf.getvalue())
 
@@ -143,6 +143,6 @@ class ReadTestListFileTests(TestCase):
             f.close()
         outf = StringIO()
         self.assertEquals(
-            [('data', 'env', 'cmd', False, False)],
+            [('data', 'env', 'cmd', None)],
             list(read_testlist_file(p, outf)))
         self.assertEquals("noise\n", outf.getvalue())
index 99d53196eea5114313719c217d3cd4ca1bdba3ae..8d43f259a8894ec32aad0a940efcb3a59c9b8089 100755 (executable)
@@ -81,5 +81,7 @@ opts, args = parser.parse_args()
 if not getattr(opts, "listtests", False):
     lp = sambaopts.get_loadparm()
     samba.tests.cmdline_credentials = credopts.get_credentials(lp)
+if getattr(opts, 'load_list', None):
+    args.insert(0, "--load-list=%s" % opts.load_list)
 
 TestProgram(module=None, args=args, opts=subunitopts)
index ef0d853584ead340fa20972752c1d527b95fd775..722e065fc30341d4b188683e31e8471075c9f1e5 100755 (executable)
@@ -436,7 +436,7 @@ def planoldpythontestsuite(env, module, name=None, extra_path=[], environ={}, ex
     args += extra_args
     if name is None:
         name = module
-    plantestsuite(name, env, args)
+    plantestsuite_loadlist(name, env, args)
 
 planoldpythontestsuite("dc:local", "samba.tests.gensec", extra_args=['-U"$USERNAME%$PASSWORD"'])
 planoldpythontestsuite("none", "simple", extra_path=["%s/lib/tdb/python/tests" % srcdir()], name="tdb.python")