r23792: convert Samba4 to GPLv3
[samba.git] / source4 / torture / ui.c
index beb0e8fa9c898c707d101c9113e589c38dbd69c4..aa0e06d40166641d704d03604ff33d6bd778ee0f 100644 (file)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,8 +15,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -24,8 +23,7 @@
 #include "torture/torture.h"
 #include "lib/util/dlinklist.h"
 
-void torture_comment(struct torture_context *context, 
-                                                const char *comment, ...)
+void torture_comment(struct torture_context *context, const char *comment, ...)
 {
        va_list ap;
        char *tmp;
@@ -41,28 +39,30 @@ void torture_comment(struct torture_context *context,
        talloc_free(tmp);
 }
 
-void _torture_fail_ext(struct torture_context *context, 
-                                         const char *fmt, ...)
+void torture_warning(struct torture_context *context, const char *comment, ...)
 {
        va_list ap;
+       char *tmp;
 
-       va_start(ap, fmt);
-       context->last_reason = talloc_vasprintf(context, fmt, ap);
-       /* make sure the reason for the failure is displayed */
-       if (context->ui_ops->comment)
-               context->ui_ops->comment(context, context->last_reason);
-       va_end(ap);
-       context->last_result = TORTURE_FAIL;
+       if (!context->ui_ops->warning)
+               return;
+
+       va_start(ap, comment);
+       tmp = talloc_vasprintf(context, comment, ap);
+
+       context->ui_ops->warning(context, tmp);
+
+       talloc_free(tmp);
 }
 
-void _torture_skip_ext(struct torture_context *context, 
-                                         const char *fmt, ...)
+void torture_result(struct torture_context *context, 
+                                       enum torture_result result, const char *fmt, ...)
 {
        va_list ap;
-       context->skipped++;
 
        va_start(ap, fmt);
-       context->last_result = TORTURE_SKIP;
+
+       context->last_result = result;
        context->last_reason = talloc_vasprintf(context, fmt, ap);
        va_end(ap);
 }
@@ -143,13 +143,18 @@ BOOL torture_run_suite(struct torture_context *context,
        BOOL ret = True;
        struct torture_tcase *tcase;
        struct torture_suite *tsuite;
+       char *old_testname;
 
        context->level++;
        if (context->ui_ops->suite_start)
                context->ui_ops->suite_start(context, suite);
 
-       if (suite->path)
-               torture_subunit_run_suite(context, suite);
+       old_testname = context->active_testname;
+       if (old_testname != NULL)
+               context->active_testname = talloc_asprintf(context, "%s-%s", 
+                                                                                          old_testname, suite->name);
+       else
+               context->active_testname = talloc_strdup(context, suite->name);
 
        for (tcase = suite->testcases; tcase; tcase = tcase->next) {
                ret &= torture_run_tcase(context, tcase);
@@ -159,6 +164,9 @@ BOOL torture_run_suite(struct torture_context *context,
                ret &= torture_run_suite(context, tsuite);
        }
 
+       talloc_free(context->active_testname);
+       context->active_testname = old_testname;
+
        if (context->ui_ops->suite_finish)
                context->ui_ops->suite_finish(context, suite);
 
@@ -175,6 +183,19 @@ void torture_ui_test_start(struct torture_context *context,
                context->ui_ops->test_start(context, tcase, test);
 }
 
+int str_list_match(const char *name, char **list)
+{
+       int i, ret = 0;
+       if (list == NULL)
+               return 0;
+
+       for (i = 0; list[i]; i++) {
+               if (gen_fnmatch(list[i], name) == 0)
+                       ret++;
+       }
+       return ret;
+}
+
 void torture_ui_test_result(struct torture_context *context,
                                                                enum torture_result result,
                                                                const char *comment)
@@ -182,13 +203,8 @@ void torture_ui_test_result(struct torture_context *context,
        if (context->ui_ops->test_result)
                context->ui_ops->test_result(context, result, comment);
 
-
-       switch (result) {
-               case TORTURE_SKIP: context->success++; break;
-               case TORTURE_FAIL: context->failed++; break;
-               case TORTURE_TODO: context->todo++; break;
-               case TORTURE_OK: context->success++; break;
-       }
+       if (result == TORTURE_ERROR || result == TORTURE_FAIL)
+               context->returncode = false;
 }
 
 static BOOL internal_torture_run_test(struct torture_context *context, 
@@ -197,9 +213,10 @@ static BOOL internal_torture_run_test(struct torture_context *context,
                                          BOOL already_setup)
 {
        BOOL ret;
+       char *old_testname;
 
        if (test->dangerous && !torture_setting_bool(context, "dangerous", False)) {
-               _torture_skip_ext(context, 
+               torture_result(context, TORTURE_SKIP,
                                "disabled %s - enable dangerous tests to use", test->name);
                return True;
        }
@@ -208,25 +225,35 @@ static BOOL internal_torture_run_test(struct torture_context *context,
                !tcase->setup(context, &(tcase->data)))
                return False;
 
+       if (tcase == NULL || strcmp(test->name, tcase->name) != 0) { 
+               old_testname = context->active_testname;
+               context->active_testname = talloc_asprintf(context, "%s-%s", 
+                                                                                          old_testname, test->name);
+       }
        context->active_tcase = tcase;
        context->active_test = test;
 
        torture_ui_test_start(context, tcase, test);
 
+
        context->last_reason = NULL;
        context->last_result = TORTURE_OK;
 
        ret = test->run(context, tcase, test);
-       if (!ret) {
+       if (!ret && context->last_result == TORTURE_OK) {
                if (context->last_reason == NULL)
-                       context->last_reason = talloc_strdup(context, "...");
-               context->last_result = TORTURE_FAIL;
+                       context->last_reason = talloc_strdup(context, "Unknown error/failure");
+               context->last_result = TORTURE_ERROR;
        }
 
        torture_ui_test_result(context, context->last_result, context->last_reason);
        
        talloc_free(context->last_reason);
 
+       if (tcase == NULL || strcmp(test->name, tcase->name) != 0) { 
+               talloc_free(context->active_testname);
+               context->active_testname = old_testname;
+       }
        context->active_test = NULL;
        context->active_tcase = NULL;
 
@@ -240,6 +267,7 @@ BOOL torture_run_tcase(struct torture_context *context,
                                           struct torture_tcase *tcase)
 {
        BOOL ret = True;
+       char *old_testname;
        struct torture_test *test;
 
        context->level++;
@@ -254,10 +282,15 @@ BOOL torture_run_tcase(struct torture_context *context,
                goto done;
        }
 
+       old_testname = context->active_testname;
+       context->active_testname = talloc_asprintf(context, "%s-%s", 
+                                                                                          old_testname, tcase->name);
        for (test = tcase->tests; test; test = test->next) {
                ret &= internal_torture_run_test(context, tcase, test, 
                                tcase->fixture_persistent);
        }
+       talloc_free(context->active_testname);
+       context->active_testname = old_testname;
 
        if (tcase->fixture_persistent && tcase->teardown &&
                !tcase->teardown(context, tcase->data))
@@ -374,12 +407,6 @@ struct torture_tcase *torture_suite_add_simple_test(
        return tcase;
 }
 
-BOOL torture_teardown_free(struct torture_context *torture, void *data)
-{
-       return talloc_free(data);
-}
-
-
 bool torture_suite_add_suite(struct torture_suite *suite, 
                                                         struct torture_suite *child)
 {