diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2008-06-13 17:21:03 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2008-06-13 17:21:03 +0200 |
commit | 4f32b629906f078ea81637829dde136a27b214e5 (patch) | |
tree | c6a4c2830c99575edf7b272a4517d89094bb66b0 /tests/rscript-parse.c | |
parent | fa3451aaa466ba7da28de6b324b4f90bab3ad4ef (diff) | |
download | rsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.gz rsyslog-4f32b629906f078ea81637829dde136a27b214e5.tar.bz2 rsyslog-4f32b629906f078ea81637829dde136a27b214e5.zip |
begun building a testbench
Diffstat (limited to 'tests/rscript-parse.c')
-rw-r--r-- | tests/rscript-parse.c | 90 |
1 files changed, 90 insertions, 0 deletions
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 |