Esempio n. 1
0
static bool run_matching(struct torture_context *torture,
						 const char *prefix, 
						 const char *expr,
						 struct torture_suite *suite,
						 bool *matched)
{
	bool ret = true;

	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);
				ret &= torture_run_suite(torture, o);
				continue;
			}

			ret &= run_matching(torture, o->name, expr, 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, c, matched);

			free(name);
		}

		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);
		}
	}

	return ret;
}
Esempio n. 2
0
/**
 * Run a torture test suite.
 */
bool torture_run_suite(struct torture_context *context,
                       struct torture_suite *suite)
{
    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);

    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);
    }

    for (tsuite = suite->children; tsuite; tsuite = tsuite->next) {
        ret &= torture_run_suite(context, tsuite);
    }

    talloc_free(context->active_testname);
    context->active_testname = old_testname;

    if (context->results->ui_ops->suite_finish)
        context->results->ui_ops->suite_finish(context, suite);

    return ret;
}
Esempio n. 3
0
/****************************************************************************
run a specified test or "ALL"
****************************************************************************/
static bool run_test(struct torture_context *torture, const char *name)
{
	bool ret = true;
	bool matched = false;
	struct torture_suite *o;

	if (strequal(name, "ALL")) {
		for (o = torture_root->children; o; o = o->next) {
			ret &= torture_run_suite(torture, o);
		}
		return ret;
	}

	ret = run_matching(torture, NULL, name, NULL, &matched);

	if (!matched) {
		printf("Unknown torture operation '%s'\n", name);
		return false;
	}

	return ret;
}