summaryrefslogtreecommitdiff
path: root/unittest/mytap
diff options
context:
space:
mode:
authormkindahl@production.mysql.com[mkindahl] <>2006-08-25 13:53:16 +0200
committermkindahl@production.mysql.com[mkindahl] <>2006-08-25 13:53:16 +0200
commit794dba439e6d4fe748e42457e9d5ab63807da81c (patch)
tree40f1768c74aae4d307ce161e2ecc33463c0a9f81 /unittest/mytap
parent317bc36fd991ddfab447917015af3a66105f9462 (diff)
downloadmariadb-git-794dba439e6d4fe748e42457e9d5ab63807da81c.tar.gz
mytap-changes.patch
Diffstat (limited to 'unittest/mytap')
-rw-r--r--unittest/mytap/tap.c50
-rw-r--r--unittest/mytap/tap.h27
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,