summaryrefslogtreecommitdiffstats
path: root/tests
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
parentfa3451aaa466ba7da28de6b324b4f90bab3ad4ef (diff)
downloadrsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.gz
rsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.xz
rsyslog-4f32b629906f078ea81637829dde136a27b214e5.zip
begun building a testbench
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am14
-rw-r--r--tests/README9
-rw-r--r--tests/rscript-parse.c90
-rw-r--r--tests/rt-init.c44
-rw-r--r--tests/runtime-dummy.c41
-rw-r--r--tests/testbench.h102
6 files changed, 300 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 00000000..d85a56f8
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,14 @@
+check_PROGRAMS = rt_init rscript_parse
+TESTS = $(check_PROGRAMS)
+
+test_files = testbench.h runtime-dummy.c
+
+rt_init_SOURCES = rt-init.c $(test_files)
+rt_init_CPPFLAGS = -I$(top_srcdir) $(pthreads_cflags) $(rsrt_cflags)
+rt_init_LDADD = $(rsrt_libs) $(zlib_libs) $(pthreads_libs)
+rt_init_LDFLAGS = -export-dynamic
+
+rscript_parse_SOURCES = rscript-parse.c $(test_files)
+rscript_parse_CPPFLAGS = -I$(top_srcdir) $(pthreads_cflags) $(rsrt_cflags)
+rscript_parse_LDADD = $(rsrt_libs) $(zlib_libs) $(pthreads_libs)
+rscript_parse_LDFLAGS = -export-dynamic
diff --git a/tests/README b/tests/README
new file mode 100644
index 00000000..0ce79f63
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,9 @@
+This directory contains the rsyslog testbench. It is slowly
+evolving. New tests are always welcome. So far, most tests check
+out the functionality of a single module. More complex tests are
+welcome.
+
+For a simple sample, see rtinit.c, which does a simple
+init/deinit check of the runtime system.
+
+rgerhards, 2008-06-13
diff --git a/tests/rscript-parse.c b/tests/rscript-parse.c
new file mode 100644
index 00000000..e9c11a47
--- /dev/null
+++ b/tests/rscript-parse.c
@@ -0,0 +1,90 @@
+/* This test checks runtime initialization and exit. Other than that, it
+ * also serves as the most simplistic sample of how a test can be coded.
+ *
+ * Part of the testbench for rsyslog.
+ * 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 <stdio.h>
+
+#include "rsyslog.h"
+#include "testbench.h"
+#include "ctok.h"
+#include "expr.h"
+
+MODULE_TYPE_TESTBENCH
+/* define addtional objects we need for our tests */
+DEFobjCurrIf(expr)
+DEFobjCurrIf(ctok)
+DEFobjCurrIf(ctok_token)
+
+BEGINInit
+CODESTARTInit
+ pErrObj = "expr"; CHKiRet(objUse(expr, CORE_COMPONENT));
+ pErrObj = "ctok"; CHKiRet(objUse(ctok, CORE_COMPONENT));
+ pErrObj = "ctok_token"; CHKiRet(objUse(ctok_token, CORE_COMPONENT));
+ENDInit
+
+BEGINExit
+CODESTARTExit
+ENDExit
+
+BEGINTest
+ ctok_t *tok;
+ ctok_token_t *pToken;
+ expr_t *pExpr;
+ /* the string below is an expression as defined up to 3.19.x - note that the
+ * then and the space after it MUST be present!
+ */
+ uchar szExpr[] = "$msg contains 'test' then ";
+ /*uchar szSynErr[] = "$msg == 1 and syntaxerror ";*/
+CODESTARTTest
+ /* we first need a tokenizer... */
+ CHKiRet(ctok.Construct(&tok));
+ CHKiRet(ctok.Setpp(tok, szExpr));
+ CHKiRet(ctok.ConstructFinalize(tok));
+
+ /* now construct our expression */
+ CHKiRet(expr.Construct(&pExpr));
+ CHKiRet(expr.ConstructFinalize(pExpr));
+
+ /* ready to go... */
+ CHKiRet(expr.Parse(pExpr, tok));
+
+ /* we now need to parse off the "then" - and note an error if it is
+ * missing...
+ */
+ CHKiRet(ctok.GetToken(tok, &pToken));
+ if(pToken->tok != ctok_THEN) {
+ ctok_token.Destruct(&pToken);
+ ABORT_FINALIZE(RS_RET_SYNTAX_ERROR);
+ }
+
+ ctok_token.Destruct(&pToken); /* no longer needed */
+
+ /* we are done, so we now need to restore things */
+ CHKiRet(ctok.Destruct(&tok));
+finalize_it:
+ /* here we may do custom error reporting */
+ if(iRet != RS_RET_OK) {
+ uchar *pp;
+ ctok.Getpp(tok, &pp);
+ printf("error on or before '%s'\n", pp);
+ }
+ENDTest
diff --git a/tests/rt-init.c b/tests/rt-init.c
new file mode 100644
index 00000000..aaac7ed1
--- /dev/null
+++ b/tests/rt-init.c
@@ -0,0 +1,44 @@
+/* This test checks runtime initialization and exit. Other than that, it
+ * also serves as the most simplistic sample of how a test can be coded.
+ *
+ * Part of the testbench for rsyslog.
+ * 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 <stdio.h>
+
+#include "rsyslog.h"
+#include "testbench.h"
+
+MODULE_TYPE_TESTBENCH
+
+
+BEGINInit
+CODESTARTInit
+ENDInit
+
+BEGINExit
+CODESTARTExit
+ENDExit
+
+BEGINTest
+CODESTARTTest
+finalize_it:
+ /* room for custom error reporter, leave blank if not needed */
+ENDTest
diff --git a/tests/runtime-dummy.c b/tests/runtime-dummy.c
new file mode 100644
index 00000000..9cddd913
--- /dev/null
+++ b/tests/runtime-dummy.c
@@ -0,0 +1,41 @@
+/* Testbench for rsyslog
+ *
+ * This are dummy calls for "runtime" routines which are not yet properly
+ * abstracted and part of the actual runtime libraries. This module tries
+ * to make the linker happy. Please note that it does NOT provide anything
+ * more but the symbols. If a test requires these functions (or functions
+ * that depend on them), this dummy can not be used.
+ *
+ * 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>
+
+int bReduceRepeatMsgs = 0;
+int repeatinterval = 30;
+int bActExecWhenPrevSusp = 0;
+int iActExecOnceInterval = 1;
+int MarkInterval = 30;
+
+void cflineClassic(void) {};
+void selectorAddList(void) {};
+void selectorConstruct(void) {};
+void selectorDestruct(void) {};
+
+/* these are required by some dynamically loaded modules */
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; \
+}