smbtorture: Implement --list argument.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 11 Dec 2010 16:56:37 +0000 (17:56 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 11 Dec 2010 17:48:05 +0000 (18:48 +0100)
source4/torture/smbtorture.c

index 4244bfbc90646aa2b344363a42d636e867d6e1c4..49d9b1887d1a5f5bdde034d5dd9be9c47e1d1d30 100644 (file)
 #include <readline/history.h>
 #endif
 
+static char *prefix_name(TALLOC_CTX *mem_ctx, const char *prefix, const char *name)
+{
+       if (prefix == NULL)
+               return talloc_strdup(mem_ctx, name);
+       else
+               return talloc_asprintf(mem_ctx, "%s.%s", prefix, name);
+}
+
+static void print_test_list(const struct torture_suite *suite, const char *prefix, const char *expr)
+{
+       struct torture_suite *o;
+       struct torture_tcase *t;
+       struct torture_test *p;
+
+       for (o = suite->children; o; o = o->next) {
+               char *name = prefix_name(NULL, prefix, o->name);
+               print_test_list(o, name, expr);
+               talloc_free(name);
+       }
+
+       for (t = suite->testcases; t; t = t->next) {
+               for (p = t->tests; p; p = p->next) {
+                       char *name = talloc_asprintf(NULL, "%s.%s.%s", prefix, t->name, p->name);
+                       if (strncmp(name, expr, strlen(expr)) == 0) {
+                               printf("%s\n", name);
+                       }
+                       talloc_free(name);
+               }
+       }
+}
+
 static bool run_matching(struct torture_context *torture,
                                                 const char *prefix, 
                                                 const char *expr,
@@ -51,10 +82,7 @@ static bool run_matching(struct torture_context *torture,
 
        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);
+               name = prefix_name(torture, prefix, o->name);
                if (gen_fnmatch(expr, name) == 0) {
                        *matched = true;
                        reload_charcnv(torture->lp_ctx);
@@ -594,12 +622,6 @@ int main(int argc,char *argv[])
                return 0;
        }
 
-       if (torture_seed == 0) {
-               torture_seed = time(NULL);
-       } 
-       printf("Using seed %d\n", torture_seed);
-       srandom(torture_seed);
-
        argv_new = discard_const_p(char *, poptGetArgs(pc));
 
        argc_new = argc;
@@ -610,6 +632,19 @@ int main(int argc,char *argv[])
                }
        }
 
+       if (list_tests) {
+               for (i=1;i<argc_new;i++) {
+                       print_test_list(torture_root, NULL, argv_new[i]);
+               }
+               return 0;
+       }
+
+       if (torture_seed == 0) {
+               torture_seed = time(NULL);
+       } 
+       printf("Using seed %d\n", torture_seed);
+       srandom(torture_seed);
+
        if (!strcmp(ui_ops_name, "simple")) {
                ui_ops = &std_ui_ops;
        } else if (!strcmp(ui_ops_name, "subunit")) {