diff options
Diffstat (limited to 'source4/torture')
-rw-r--r-- | source4/torture/ui.c | 23 | ||||
-rw-r--r-- | source4/torture/ui.h | 39 |
2 files changed, 56 insertions, 6 deletions
diff --git a/source4/torture/ui.c b/source4/torture/ui.c index 176f911845..35ff3cee7d 100644 --- a/source4/torture/ui.c +++ b/source4/torture/ui.c @@ -62,18 +62,31 @@ void torture_comment(struct torture_test *test, const char *comment, ...) _PRINT void torture_ok(struct torture_test *test) { - test->context->ui_ops->test_result(test, TORTURE_OK); + test->context->ui_ops->test_result(test, TORTURE_OK, NULL); test->context->success++; } -void torture_fail(struct torture_test *test) +void torture_fail(struct torture_test *test, const char *fmt, ...) _PRINTF_ATTRIBUTE(2,3) { - test->context->ui_ops->test_result(test, TORTURE_FAIL); + va_list ap; + char *reason; + va_start(ap, fmt); + reason = talloc_vasprintf(test, fmt, ap); + va_end(ap); + test->context->ui_ops->test_result(test, TORTURE_FAIL, reason); + talloc_free(reason); + test->context->failed++; } -void torture_skip(struct torture_test *test) +void torture_skip(struct torture_test *test, const char *fmt, ...) _PRINTF_ATTRIBUTE(2,3) { - test->context->ui_ops->test_result(test, TORTURE_SKIP); + va_list ap; + char *reason; + va_start(ap, fmt); + reason = talloc_vasprintf(test, fmt, ap); + va_end(ap); + test->context->ui_ops->test_result(test, TORTURE_SKIP, reason); + talloc_free(reason); test->context->skipped++; } diff --git a/source4/torture/ui.h b/source4/torture/ui.h index bf9ff80eb2..f115291bcd 100644 --- a/source4/torture/ui.h +++ b/source4/torture/ui.h @@ -32,7 +32,8 @@ struct torture_ui_ops { void (*comment) (struct torture_test *, const char *); void (*test_start) (struct torture_test *); - void (*test_result) (struct torture_test *, enum torture_result); + void (*test_result) (struct torture_test *, enum torture_result, + const char *reason); }; struct torture_test @@ -55,3 +56,39 @@ struct torture_context int success; int failed; }; + +#define torture_assert(ctx,expr,string) \ + if (!(expr)) { \ + torture_fail(ctx, "%s:%d (%s): %s", __FILE__, __LINE__, string, \ + __STRING(expr)); \ + return False; \ + } + +#define torture_assert_werr_equal(ctx,got,expected,string) \ + if (!W_ERROR_EQUAL(got, expected)) { \ + torture_fail(ctx, "%s:%d (%s): got %s, expected %s", __FILE__, \ + __LINE__, string, win_errstr(got), win_errstr(expected)); \ + return False; \ + } + +#define torture_assert_ntstatus_equal(ctx,got,expected,string) \ + if (!NT_STATUS_EQUAL(got, expected)) { \ + torture_fail(ctx, "%s:%d (%s): got %s, expected %s", __FILE__, \ + __LINE__, string, nt_errstr(got), nt_errstr(expected)); \ + return False; \ + } + +/* Convenience macros */ + +#define torture_assert_ntstatus_ok(ctx,expr,string) \ + torture_assert_ntstatus_equal(ctx,expr,NT_STATUS_OK,string) + +#define torture_assert_werr_ok(ctx,expr,string) \ + torture_assert_werr_equal(ctx,expr,WERR_OK,string) + +struct torture_test *torture_test(struct torture_context *ctx, const char *name, const char *description); +struct torture_test *torture_subtest(struct torture_test *parent, const char *name, const char *description); +void torture_comment(struct torture_test *test, const char *comment, ...) _PRINTF_ATTRIBUTE(2,3); +void torture_ok(struct torture_test *test); +void torture_fail(struct torture_test *test, const char *reason, ...) _PRINTF_ATTRIBUTE(2,3);; +void torture_skip(struct torture_test *test, const char *reason, ...) _PRINTF_ATTRIBUTE(2,3); |