diff options
Diffstat (limited to 'tests/rscript-parse.c')
-rw-r--r-- | tests/rscript-parse.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/rscript-parse.c b/tests/rscript-parse.c new file mode 100644 index 00000000..176f3f7e --- /dev/null +++ b/tests/rscript-parse.c @@ -0,0 +1,100 @@ +/* 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... + * + * rgerhards, 2008-07-01: we disable the check below, because I can not + * find the cause of the misalignment. The problem is that pToken structure has + * a different member alignment inside the runtime library then inside of + * this program. I checked compiler options, but could not find the cause. + * Should anyone have any insight, I'd really appreciate if you drop me + * a line. + */ +#if 0 + CHKiRet(ctok.GetToken(tok, &pToken)); + if(pToken->tok != ctok_THEN) { +//printf("invalid token, probably due to invalid alignment between runtime lib and this program\n"); + ctok_token.Destruct(&pToken); + ABORT_FINALIZE(RS_RET_SYNTAX_ERROR); + } + + ctok_token.Destruct(&pToken); /* no longer needed */ +#endif + + /* 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 |