summaryrefslogtreecommitdiffstats
path: root/tests/testbench.h
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-06-13 17:21:03 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2008-06-13 17:21:03 +0200
commit4f32b629906f078ea81637829dde136a27b214e5 (patch)
treec6a4c2830c99575edf7b272a4517d89094bb66b0 /tests/testbench.h
parentfa3451aaa466ba7da28de6b324b4f90bab3ad4ef (diff)
downloadrsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.gz
rsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.xz
rsyslog-4f32b629906f078ea81637829dde136a27b214e5.zip
begun building a testbench
Diffstat (limited to 'tests/testbench.h')
-rw-r--r--tests/testbench.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/tests/testbench.h b/tests/testbench.h
new file mode 100644
index 00000000..6f26724a
--- /dev/null
+++ b/tests/testbench.h
@@ -0,0 +1,102 @@
+/* Defines for a rsyslog standard testbench application.
+ *
+ * Work begun 2008-06-13 by Rainer Gerhards (written from scratch)
+ *
+ * Copyright 2008 Rainer Gerhards and Adiscon GmbH.
+ *
+ * This file is part of rsyslog.
+ *
+ * Rsyslog is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Rsyslog is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Rsyslog. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * A copy of the GPL can be found in the file "COPYING" in this distribution.
+ */
+#include <stdlib.h>
+
+/* everything we need to begin a testbench */
+#define MODULE_TYPE_TESTBENCH \
+/* definitions for objects we access */ \
+DEFobjCurrIf(obj) \
+\
+static rsRetVal doInit(void); \
+static rsRetVal doTest(void); \
+static rsRetVal doExit(void); \
+\
+/* Below is the driver, which is always the same */ \
+int main(int __attribute__((unused)) argc, char __attribute__((unused)) *argv[]) \
+{ \
+ DEFiRet; \
+ CHKiRet(doInit()); \
+ CHKiRet(doTest()); \
+ CHKiRet(doExit()); \
+finalize_it: \
+ printf("test returns iRet %d\n", iRet); \
+ RETiRet; \
+}
+
+
+/* Initialize everything (most importantly the runtime objects) for the test. The framework
+ * initializes the global runtime, user must add those objects that it needs additionally.
+ */
+#define BEGINInit \
+static rsRetVal doInit(void) \
+{ \
+ DEFiRet; \
+ char *pErrObj; /* tells us which object failed if that happens */ \
+ putenv("RSYSLOG_MODDIR=../runtime/.libs/"); /* this is a bit hackish... */ \
+ \
+ dbgClassInit(); \
+ /* Intialize the runtime system */ \
+ pErrObj = "rsyslog runtime"; /* set in case the runtime errors before setting an object */ \
+ CHKiRet(rsrtInit(&pErrObj, &obj)); \
+
+#define CODESTARTInit
+
+#define ENDInit \
+finalize_it: \
+ if(iRet != RS_RET_OK) { \
+ printf("failure occured during init of object '%s'\n", pErrObj); \
+ } \
+ \
+ RETiRet; \
+}
+
+
+
+/* Carry out the actual test...
+ */
+#define BEGINTest \
+rsRetVal doTest(void) \
+{ \
+ DEFiRet;
+
+#define CODESTARTTest
+
+#define ENDTest \
+ RETiRet; \
+}
+
+
+/* De-init everything (most importantly the runtime objects) for the test. */
+#define BEGINExit \
+rsRetVal doExit(void) \
+{ \
+ DEFiRet; \
+ CHKiRet(rsrtExit());
+
+#define CODESTARTExit
+
+#define ENDExit \
+finalize_it: \
+ RETiRet; \
+}