diff options
author | mkindahl@production.mysql.com[mkindahl] <> | 2006-08-25 13:53:16 +0200 |
---|---|---|
committer | mkindahl@production.mysql.com[mkindahl] <> | 2006-08-25 13:53:16 +0200 |
commit | 794dba439e6d4fe748e42457e9d5ab63807da81c (patch) | |
tree | 40f1768c74aae4d307ce161e2ecc33463c0a9f81 /unittest/mytap | |
parent | 317bc36fd991ddfab447917015af3a66105f9462 (diff) | |
download | mariadb-git-794dba439e6d4fe748e42457e9d5ab63807da81c.tar.gz |
mytap-changes.patch
Diffstat (limited to 'unittest/mytap')
-rw-r--r-- | unittest/mytap/tap.c | 50 | ||||
-rw-r--r-- | unittest/mytap/tap.h | 27 |
2 files changed, 71 insertions, 6 deletions
diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c index d3f5013b4c9..17ec51863d9 100644 --- a/unittest/mytap/tap.c +++ b/unittest/mytap/tap.c @@ -20,10 +20,13 @@ #include "tap.h" +#include "my_config.h" + #include <stdlib.h> #include <stdarg.h> #include <stdio.h> #include <string.h> +#include <signal.h> /** Test data structure. @@ -70,7 +73,7 @@ emit_tap(int pass, char const *fmt, va_list ap) /** Emit a TAP directive. - TAP directives are comments after a have the form + TAP directives are comments after that have the form: @code ok 1 # skip reason for skipping @@ -96,6 +99,25 @@ emit_endl() fprintf(tapout, "\n"); } +static void +handle_core_signal(int signo) +{ + BAIL_OUT("Signal %d thrown", signo); +} + +void +BAIL_OUT(char const *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(tapout, "Bail out! "); + vfprintf(tapout, fmt, ap); + emit_endl(); + va_end(ap); + exit(255); +} + + void diag(char const *fmt, ...) { @@ -103,14 +125,38 @@ diag(char const *fmt, ...) va_start(ap, fmt); fprintf(tapout, "# "); vfprintf(tapout, fmt, ap); - fprintf(tapout, "\n"); + emit_endl(); va_end(ap); } +typedef struct signal_entry { + int signo; + void (*handler)(int); +} signal_entry; + +static signal_entry install_signal[]= { + { SIGQUIT, handle_core_signal }, + { SIGILL, handle_core_signal }, + { SIGABRT, handle_core_signal }, + { SIGFPE, handle_core_signal }, + { SIGSEGV, handle_core_signal }, + { SIGBUS, handle_core_signal }, + { SIGXCPU, handle_core_signal }, + { SIGXFSZ, handle_core_signal }, + { SIGSYS, handle_core_signal }, + { SIGTRAP, handle_core_signal } +}; void plan(int const count) { + /* + Install signal handler + */ + size_t i; + for (i= 0; i < sizeof(install_signal)/sizeof(*install_signal); ++i) + signal(install_signal[i].signo, install_signal[i].handler); + g_test.plan= count; switch (count) { diff --git a/unittest/mytap/tap.h b/unittest/mytap/tap.h index cc1d0926012..5e24c1c8c99 100644 --- a/unittest/mytap/tap.h +++ b/unittest/mytap/tap.h @@ -21,8 +21,6 @@ #ifndef TAP_H #define TAP_H -#include "my_global.h" - /* @defgroup MyTAP MySQL support for performing unit tests according to TAP. @@ -67,6 +65,10 @@ extern "C" { it was called with <code>NO_PLAN</code>, i.e., the test plan will be printed after all the test lines. + The plan() function will install signal handlers for all signals + that generate a core, so if you want to override these signals, do + it <em>after</em> you have called the plan() function. + @param count The planned number of tests to run. */ void plan(int count); @@ -130,10 +132,9 @@ void skip(int how_many, char const *reason, ...) for (i = 0 ; i < 2 ; ++i) ok(duck[i] == paddling, "is duck %d paddling?", i); } + @endcode @see skip - - @endcode */ #define SKIP_BLOCK_IF(SKIP_IF_TRUE, COUNT, REASON) \ if (SKIP_IF_TRUE) skip((COUNT),(REASON)); else @@ -147,6 +148,24 @@ void diag(char const *fmt, ...) __attribute__((format(printf,1,2))); /** + Print a bail out message. + + A bail out message can be issued when no further testing can be + done, e.g., when there are missing dependencies. + + The test will exit with status 255. This function does not return. + + @note A bail out message is printed if a signal that generates a + core is raised. + + @param fmt Bail out message in printf() format. +*/ + +void BAIL_OUT(char const *fmt, ...) + __attribute__((noreturn, format(printf,1,2))); + + +/** Print summary report and return exit status. This function will print a summary report of how many tests passed, |