X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ffailtest%2Ffailtest.h;h=294c28b970066fda3b0e22fb3bf7ffe03140ad72;hp=0cc8f60c51ba15aa48e207c6088bfe4d39b70050;hb=9571a41e8494f3135557e3ec50c2de856392173e;hpb=6a906358d922800c7358c5c46c34bf4a5e6863ad diff --git a/ccan/failtest/failtest.h b/ccan/failtest/failtest.h index 0cc8f60c..294c28b9 100644 --- a/ccan/failtest/failtest.h +++ b/ccan/failtest/failtest.h @@ -9,6 +9,7 @@ #include #include #include +#include /** * failtest_init - initialize the failtest module @@ -124,6 +125,8 @@ struct fcntl_call { * failtest_hook, failtest_exit_check */ struct failtest_call { + /* We're in the history list. */ + struct list_node list; enum failtest_call_type type; /* Where we were called from. */ const char *file; @@ -148,6 +151,9 @@ struct failtest_call { } u; }; +/* This defines struct tlist_calls. */ +TLIST_TYPE(calls, struct failtest_call); + enum failtest_result { /* Yes try failing this call. */ FAIL_OK, @@ -160,7 +166,6 @@ enum failtest_result { /** * failtest_hook - whether a certain call should fail or not. * @history: the ordered history of all failtest calls. - * @num: the number of elements in @history (greater than 0) * * The default value of this hook is failtest_default_hook(), which returns * FAIL_OK (ie. yes, fail the call). @@ -170,25 +175,24 @@ enum failtest_result { * call. * * Example: - * static enum failtest_result dont_fail_alloc(struct failtest_call *hist, - * unsigned num) + * static enum failtest_result dont_fail_alloc(struct tlist_calls *history) * { - * if (hist[num-1].type == FAILTEST_MALLOC - * || hist[num-1].type == FAILTEST_CALLOC - * || hist[num-1].type == FAILTEST_REALLOC) + * struct failtest_call *call; + * call = tlist_tail(history, struct failtest_call, list); + * if (call->type == FAILTEST_MALLOC + * || call->type == FAILTEST_CALLOC + * || call->type == FAILTEST_REALLOC) * return FAIL_DONT_FAIL; * return FAIL_OK; * } * ... * failtest_hook = dont_fail_alloc; */ -extern enum failtest_result -(*failtest_hook)(struct failtest_call *history, unsigned num); +extern enum failtest_result (*failtest_hook)(struct tlist_calls *history); /** * failtest_exit_check - hook for additional checks on a failed child. * @history: the ordered history of all failtest calls. - * @num: the number of elements in @history (greater than 0) * * Your program might have additional checks to do on failure, such as * check that a file is not corrupted, or than an error message has been @@ -197,16 +201,15 @@ extern enum failtest_result * If this returns false, the path to this failure will be printed and the * overall test will fail. */ -extern bool (*failtest_exit_check)(struct failtest_call *history, - unsigned num); +extern bool (*failtest_exit_check)(struct tlist_calls *history); /** * failtest_has_failed - determine if a failure has occurred. * - * Sometimes you want to exit immediately if you've experienced a failure. - * This is useful when you have four separate tests in your test suite, - * and you don't want to do the next one if you've had a failure in a - * previous one. + * Sometimes you want to exit immediately if you've experienced an + * injected failure. This is useful when you have four separate tests + * in your test suite, and you don't want to do the next one if you've + * had a failure in a previous one. */ extern bool failtest_has_failed(void);