X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=t%2Funit%2Ffrontend%2Fparser_test.c;h=a10185469f2397accd253425025dbf9fe097c62c;hp=3ca27ba19ffb47ec637575469b398c7d85d10961;hb=3f0db5bd32f136de9e7cfa8250f0c20469261241;hpb=b9bc76b71c4e4e1174ba1a8af3e13d53840b7e16 diff --git a/t/unit/frontend/parser_test.c b/t/unit/frontend/parser_test.c index 3ca27ba..a101854 100644 --- a/t/unit/frontend/parser_test.c +++ b/t/unit/frontend/parser_test.c @@ -76,6 +76,16 @@ START_TEST(test_parse) "host =~ 'p' AND " "service =~ 'p' OR " "service =~ 'r'", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP hosts MATCHING " + "host =~ 'p' " + "FILTER :age > 1D", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP hosts MATCHING " + "host =~ 'p' " + "FILTER :age > 1D AND " + ":interval < 240s" , -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP hosts MATCHING " + "host =~ 'p' " + "FILTER NOT :age>1D", -1, 1, CONNECTION_LOOKUP }, /* numeric constants */ { "LOOKUP hosts MATCHING " @@ -92,7 +102,7 @@ START_TEST(test_parse) "12.4", -1, 1, CONNECTION_LOOKUP }, { "LOOKUP hosts MATCHING " "attribute.foo <= " - "12.", -1, 1, CONNECTION_LOOKUP }, + "12. + .3", -1, 1, CONNECTION_LOOKUP }, { "LOOKUP hosts MATCHING " "attribute.foo >= " ".4", -1, 1, CONNECTION_LOOKUP }, @@ -106,6 +116,22 @@ START_TEST(test_parse) "attribute.foo = " "-12e+3", -1, 1, CONNECTION_LOOKUP }, + /* date, time, interval constants */ + { "LOOKUP hosts MATCHING " + "attribute.foo = " + "1 Y 42D", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP hosts MATCHING " + "attribute.foo = " + "1s 42D", -1, 1, CONNECTION_LOOKUP }, + /* + * TODO: Something like 1Y42D should work as well but it doesn't since + * the scanner will tokenize it into {digit}{identifier} :-/ + * + { "LOOKUP hosts MATCHING " + "attribute.foo = " + "1Y42D", -1, 1, CONNECTION_LOOKUP }, + */ + /* NULL */ { "LOOKUP hosts MATCHING " "attribute.foo " @@ -139,6 +165,11 @@ START_TEST(test_parse) "attribute.foo = " "0x12", -1, -1, 0 }, + /* invalid expressions */ + { "LOOKUP hosts MATCHING " + "attribute.foo = " + "1.23 + 'foo'", -1, -1, 0 }, + /* comments */ { "/* some comment */", -1, 0, 0 }, { "-- another comment", -1, 0, 0 }, @@ -236,6 +267,15 @@ START_TEST(test_parse_matcher) { "attribute.foo IS NULL", -1, MATCHER_ISNULL }, { "attribute.foo IS NOT NULL", -1, MATCHER_NOT }, + /* object field matchers */ + { ":last_update < 10s", -1, MATCHER_LT }, + { ":AGE <= 1m", -1, MATCHER_LE }, + { ":interval = 10h", -1, MATCHER_EQ }, + { ":Last_Update >= 24D", -1, MATCHER_GE }, + { ":age > 1M", -1, MATCHER_GT }, + { ":age != 20Y", -1, MATCHER_NOT }, + { ":backend != 'be'", -1, MATCHER_NOT }, + /* check operator precedence */ { "host = 'name' OR " "service = 'name' AND "