smbtorture: Report times.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 23 Sep 2010 04:03:05 +0000 (21:03 -0700)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 23 Sep 2010 05:29:09 +0000 (22:29 -0700)
lib/torture/subunit.c
lib/torture/torture.c
lib/torture/torture.h
source4/torture/smbtorture.c

index 0b63cca0536ac1bf1af8cec593d43cb5077bd14a..a190975a083e2be6e8857f32c01235ac4f337004 100644 (file)
@@ -37,12 +37,37 @@ static char *torture_subunit_test_name(struct torture_context *ctx,
        }
 }
 
-static void torture_subunit_test_start(struct torture_context *ctx, 
+static void torture_subunit_report_time(struct torture_context *tctx)
+{
+       struct timespec tp;
+       struct tm *tmp;
+       char timestr[200];
+       if (clock_gettime(CLOCK_REALTIME, &tp) != 0) {
+               perror("clock_gettime");
+               return;
+       }
+
+       tmp = localtime(&tp.tv_sec);
+       if (!tmp) {
+               perror("localtime");
+               return;
+       }
+
+       if (strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", tmp) <= 0) {
+               perror("strftime");
+               return;
+       }
+
+       printf("time: %s.%06ld\n", timestr, tp.tv_nsec / 1000);
+}
+
+static void torture_subunit_test_start(struct torture_context *context, 
                               struct torture_tcase *tcase,
                               struct torture_test *test)
 {
-       char *fullname = torture_subunit_test_name(ctx, ctx->active_tcase, ctx->active_test);
+       char *fullname = torture_subunit_test_name(context, context->active_tcase, context->active_test);
        subunit_test_start(fullname);
+       torture_subunit_report_time(context);
        talloc_free(fullname);
 }
 
@@ -50,6 +75,7 @@ static void torture_subunit_test_result(struct torture_context *context,
                                enum torture_result res, const char *reason)
 {
        char *fullname = torture_subunit_test_name(context, context->active_tcase, context->active_test);
+       torture_subunit_report_time(context);
        switch (res) {
        case TORTURE_OK:
                subunit_test_pass(fullname);
@@ -107,4 +133,5 @@ const struct torture_ui_ops torture_subunit_ui_ops = {
        .test_result = torture_subunit_test_result,
        .suite_start = torture_subunit_suite_start,
        .progress = torture_subunit_progress,
+       .report_time = torture_subunit_report_time,
 };
index d6f893eb0fc20c62feb63e2500c4979bee8c2ee7..379f1dd9548e2bbe9eb02fea629b6c16f089baee 100644 (file)
@@ -277,7 +277,6 @@ bool torture_run_suite_restricted(struct torture_context *context,
        bool ret = true;
        struct torture_tcase *tcase;
        struct torture_suite *tsuite;
-       char *old_testname;
 
        if (context->results->ui_ops->suite_start)
                context->results->ui_ops->suite_start(context, suite);
@@ -346,7 +345,7 @@ static bool internal_torture_run_test(struct torture_context *context,
        if (tcase == NULL || strcmp(test->name, tcase->name) != 0) { 
                subunit_testname = talloc_asprintf(context, "%s.%s", tcase->name, test->name);
        } else {
-               subunit_testname = test->name;
+               subunit_testname = talloc_strdup(context, test->name);
        }
 
        if (!test_needs_running(subunit_testname, restricted))
@@ -410,7 +409,6 @@ bool torture_run_tcase_restricted(struct torture_context *context,
                       struct torture_tcase *tcase, const char **restricted)
 {
        bool ret = true;
-       char *old_testname;
        struct torture_test *test;
        bool setup_succeeded = true;
        const char * setup_reason = "Setup failed";
@@ -684,3 +682,9 @@ struct torture_test *torture_tcase_add_simple_test(struct torture_tcase *tcase,
 
        return test;
 }
+
+void torture_ui_report_time(struct torture_context *context)
+{
+       if (context->results->ui_ops->report_time)
+               context->results->ui_ops->report_time(context);
+}
index 90513b723df343acb0201cd04d1993e9e39826a8..01947e773db67fff72701c3a7598f33ecd3e4733 100644 (file)
@@ -60,6 +60,7 @@ struct torture_ui_ops
        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 (*report_time) (struct torture_context *);
 };
 
 void torture_ui_test_start(struct torture_context *context,
@@ -70,6 +71,8 @@ void torture_ui_test_result(struct torture_context *context,
                                                                enum torture_result result,
                                                                const char *comment);
 
+void torture_ui_report_time(struct torture_context *context);
+
 /*
  * Holds information about a specific run of the testsuite. 
  * The data in this structure should be considered private to 
index 0f2ca2fcbe5ddf69f8e13259443cb5b220f02970..940ce85c740643afd9286686b3891ecf8a5821e4 100644 (file)
@@ -98,6 +98,8 @@ bool torture_run_named_tests(struct torture_context *torture, const char *name,
        bool matched = false;
        struct torture_suite *o;
 
+       torture_ui_report_time(torture);
+
        if (strequal(name, "ALL")) {
                if (restricted != NULL) {
                        printf("--load-list and ALL are incompatible\n");