smbtorture: Report number of available tests in a testsuite using subunit.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 31 Mar 2010 00:57:47 +0000 (02:57 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 31 Mar 2010 00:57:47 +0000 (02:57 +0200)
lib/torture/subunit.c
lib/torture/torture.c
lib/torture/torture.h
selftest/selftest.pl
source4/torture/smbtorture.c

index 832f11fafc3dc6674dcb7d9ae300c16c3e7782e6..86b3dd0e60c460741d094996f223d073912a8da8 100644 (file)
@@ -81,10 +81,32 @@ static void subunit_warning(struct torture_context *test,
        fprintf(stderr, "WARNING!: %s\n", comment);
 }
 
+static void subunit_progress(struct torture_context *tctx, int offset, enum torture_progress_whence whence)
+{
+       switch (whence) {
+       case TORTURE_PROGRESS_SET:
+               printf("progress: %d\n", offset);
+               break;
+       case TORTURE_PROGRESS_CUR:
+               printf("progress: %+-d\n", offset);
+               break;
+       case TORTURE_PROGRESS_POP:
+               printf("progress: pop\n");
+               break;
+       case TORTURE_PROGRESS_PUSH:
+               printf("progress: push\n");
+               break;
+       default:
+               fprintf(stderr, "Invalid call to progress()\n");
+               break;
+       }
+}
+
 const struct torture_ui_ops torture_subunit_ui_ops = {
        .comment = subunit_comment,
        .warning = subunit_warning,
        .test_start = subunit_test_start,
        .test_result = subunit_test_result,
-       .suite_start = subunit_suite_start
+       .suite_start = subunit_suite_start,
+       .progress = subunit_progress,
 };
index 672726ebf2fce08b655aa25899d17d685d39c6cd..9adf6816b838628b9bce06c62128cb2be17ab200 100644 (file)
@@ -245,6 +245,23 @@ struct torture_tcase *torture_suite_add_tcase(struct torture_suite *suite,
        return tcase;
 }
 
+int torture_suite_children_count(const struct torture_suite *suite)
+{
+       int ret = 0;
+       struct torture_tcase *tcase;
+       struct torture_test *test;
+       struct torture_suite *tsuite;
+       for (tcase = suite->testcases; tcase; tcase = tcase->next) {
+               for (test = tcase->tests; test; test = test->next) {
+                       ret++;
+               }
+       }
+       for (tsuite = suite->children; tsuite; tsuite = tsuite->next) {
+               ret ++;
+       }
+       return ret;
+}
+
 /**
  * Run a torture test suite.
  */
@@ -259,6 +276,8 @@ bool torture_run_suite(struct torture_context *context,
        if (context->results->ui_ops->suite_start)
                context->results->ui_ops->suite_start(context, suite);
 
+       context->results->ui_ops->progress(context, 
+               torture_suite_children_count(suite), TORTURE_PROGRESS_SET); 
        old_testname = context->active_testname;
        if (old_testname != NULL)
                context->active_testname = talloc_asprintf(context, "%s-%s", 
@@ -271,7 +290,9 @@ bool torture_run_suite(struct torture_context *context,
        }
 
        for (tsuite = suite->children; tsuite; tsuite = tsuite->next) {
+               context->results->ui_ops->progress(context, 0, TORTURE_PROGRESS_PUSH);
                ret &= torture_run_suite(context, tsuite);
+               context->results->ui_ops->progress(context, 0, TORTURE_PROGRESS_POP);
        }
 
        talloc_free(context->active_testname);
index ad3668fbe87cebeff4a65090e473b6aae8c71a2a..cb2c02ba3e0e5de1ec86f8f4280be643e5243336 100644 (file)
@@ -34,6 +34,13 @@ enum torture_result {
        TORTURE_SKIP=3
 };
 
+enum torture_progress_whence {
+       TORTURE_PROGRESS_SET,
+       TORTURE_PROGRESS_CUR,
+       TORTURE_PROGRESS_POP,
+       TORTURE_PROGRESS_PUSH,
+};
+
 /* 
  * These callbacks should be implemented by any backend that wishes 
  * to listen to reports from the torture tests.
@@ -52,6 +59,7 @@ struct torture_ui_ops
                                                struct torture_test *);
        void (*test_result) (struct torture_context *, 
                                                 enum torture_result, const char *reason);
+       void (*progress) (struct torture_context *, int offset, enum torture_progress_whence whence);
 };
 
 void torture_ui_test_start(struct torture_context *context,
@@ -465,6 +473,7 @@ struct torture_test *torture_tcase_add_simple_test(struct torture_tcase *tcase,
 bool torture_suite_init_tcase(struct torture_suite *suite, 
                              struct torture_tcase *tcase, 
                              const char *name);
+int torture_suite_children_count(const struct torture_suite *suite);
 
 struct torture_context *torture_context_init(struct tevent_context *event_ctx, struct torture_results *results);
 
index 68a2b2d671bc1bdc54da0992917f0e1dd26fe949..634db92c9261b8154968bdac67b80f7143ea9900 100755 (executable)
@@ -274,7 +274,7 @@ sub run_testsuite($$$$$)
        my $exitcode = $ret >> 8;
 
        Subunit::report_time(time());
-       Subuit::progress_pop();
+       Subunit::progress_pop();
        if ($exitcode == 0) {
                Subunit::end_testsuite($name, "success");
        } else {
index 53e860a144cdd75dcbeb6db3b898226a1ae9c312..2aa340ee36988dc92fd4e4b767b72dd9a57f3d83 100644 (file)
@@ -354,12 +354,18 @@ static void simple_warning(struct torture_context *test,
        fprintf(stderr, "WARNING: %s\n", comment);
 }
 
+static void simple_progress(struct torture_context *test,
+       int offset, enum torture_progress_whence whence)
+{
+}
+
 const static struct torture_ui_ops std_ui_ops = {
        .comment = simple_comment,
        .warning = simple_warning,
        .suite_start = simple_suite_start,
        .suite_finish = simple_suite_finish,
-       .test_result = simple_test_result
+       .test_result = simple_test_result,
+       .progress = simple_progress,
 };