torture: Simplify torture suite running, call restricted test suite runner.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 10 Apr 2010 19:24:33 +0000 (21:24 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 10 Apr 2010 20:38:32 +0000 (22:38 +0200)
lib/torture/torture.c
lib/torture/torture.h
source4/torture/smbtorture.c

index 9adf6816b838628b9bce06c62128cb2be17ab200..dcb28eefb024a66ce63d0821350b695993ab3902 100644 (file)
@@ -304,6 +304,13 @@ bool torture_run_suite(struct torture_context *context,
        return ret;
 }
 
+bool torture_run_suite_restricted(struct torture_context *context, 
+                      struct torture_suite *suite, char **restricted)
+{
+       /* FIXME */
+       return false;
+}
+
 void torture_ui_test_start(struct torture_context *context, 
                           struct torture_tcase *tcase, 
                           struct torture_test *test)
index 6eb2c1593d2a0e3806a58db18adb8c379bfa27a9..931937c1182b7e27a2b4e92ca9a9679fdbc4607c 100644 (file)
@@ -218,6 +218,11 @@ bool torture_suite_add_suite(struct torture_suite *suite,
 bool torture_run_suite(struct torture_context *context,
                                           struct torture_suite *suite);
 
+/* Run the specified testsuite recursively, but only the specified 
+ * tests */
+bool torture_run_suite_restricted(struct torture_context *context, 
+                      struct torture_suite *suite, char **restricted);
+
 /* Run the specified testcase */
 bool torture_run_tcase(struct torture_context *context,
                                           struct torture_tcase *tcase);
index 02a912619a266328f6a4de6b3eca64a4169a286b..baa9afebb6567b7010cb7f5aea789e1cd070c252 100644 (file)
@@ -42,52 +42,34 @@ static bool run_matching(struct torture_context *torture,
                                                 bool *matched)
 {
        bool ret = true;
+       struct torture_suite *o;
+       struct torture_tcase *t;
 
-       if (suite == NULL) {
-               struct torture_suite *o;
-
-               for (o = (torture_root == NULL?NULL:torture_root->children); o; o = o->next) {
-                       if (gen_fnmatch(expr, o->name) == 0) {
-                               *matched = true;
-                               reload_charcnv(torture->lp_ctx);
+       for (o = suite->children; o; o = o->next) {
+               char *name = NULL;
+               if (prefix == NULL)
+                       name = talloc_strdup(torture, o->name);
+               else
+                       name = talloc_asprintf(torture, "%s-%s", prefix, o->name);
+               if (gen_fnmatch(expr, name) == 0) {
+                       *matched = true;
+                       reload_charcnv(torture->lp_ctx);
+                       torture->active_testname = name;
+                       if (restricted != NULL)
+                               ret &= torture_run_suite_restricted(torture, o, restricted);
+                       else
                                ret &= torture_run_suite(torture, o);
-                               continue;
-                       }
-
-                       ret &= run_matching(torture, o->name, expr, restricted, o, matched);
-               }
-       } else {
-               char *name;
-               struct torture_suite *c;
-               struct torture_tcase *t;
-
-               for (c = suite->children; c; c = c->next) {
-                       asprintf(&name, "%s-%s", prefix, c->name);
-
-                       if (gen_fnmatch(expr, name) == 0) {
-                               *matched = true;
-                               reload_charcnv(torture->lp_ctx);
-                               torture->active_testname = talloc_strdup(torture, prefix);
-                               ret &= torture_run_suite(torture, c);
-                               free(name);
-                               continue;
-                       }
-                       
-                       ret &= run_matching(torture, name, expr, restricted, c, matched);
-
-                       free(name);
                }
+               ret &= run_matching(torture, name, expr, restricted, o, matched);
+       }
 
-               for (t = suite->testcases; t; t = t->next) {
-                       asprintf(&name, "%s-%s", prefix, t->name);
-                       if (gen_fnmatch(expr, name) == 0) {
-                               *matched = true;
-                               reload_charcnv(torture->lp_ctx);
-                               torture->active_testname = talloc_strdup(torture, prefix);
-                               ret &= torture_run_tcase(torture, t);
-                               talloc_free(torture->active_testname);
-                       }
-                       free(name);
+       for (t = suite->testcases; t; t = t->next) {
+               char *name = talloc_asprintf(torture, "%s-%s", prefix, t->name);
+               if (gen_fnmatch(expr, name) == 0) {
+                       *matched = true;
+                       reload_charcnv(torture->lp_ctx);
+                       torture->active_testname = name;
+                       ret &= torture_run_tcase(torture, t);
                }
        }
 
@@ -107,13 +89,17 @@ static bool run_test(struct torture_context *torture, const char *name,
        struct torture_suite *o;
 
        if (strequal(name, "ALL")) {
+               if (restricted != NULL) {
+                       printf("--load-list and ALL are incompatible\n");
+                       return false;
+               }
                for (o = torture_root->children; o; o = o->next) {
                        ret &= torture_run_suite(torture, o);
                }
                return ret;
        }
 
-       ret = run_matching(torture, NULL, name, restricted, NULL, &matched);
+       ret = run_matching(torture, NULL, name, restricted, torture_root, &matched);
 
        if (!matched) {
                printf("Unknown torture operation '%s'\n", name);