Code

Merged branch 'master' of git://git.tokkee.org/sysdb.
[sysdb.git] / t / frontend / parser_test.c
index ffeca8f68b091d50e5c90c5d165edf2867986b1f..f64b9ebca95b05e66bb568a9c6535f72cc7f7462 100644 (file)
@@ -60,13 +60,22 @@ START_TEST(test_parse)
 
                { "LOOKUP hosts WHERE "
                  "host.name = 'host'",  -1,  1, CONNECTION_LOOKUP },
+               { "LOOKUP hosts WHERE NOT "
+                 "host.name = 'host'",  -1,  1, CONNECTION_LOOKUP },
                { "LOOKUP hosts WHERE "
                  "host.name =~ 'p' AND "
                  "service.name =~ 'p'", -1,  1, CONNECTION_LOOKUP },
+               { "LOOKUP hosts WHERE NOT "
+                 "host.name =~ 'p' AND "
+                 "service.name =~ 'p'", -1,  1, CONNECTION_LOOKUP },
                { "LOOKUP hosts WHERE "
                  "host.name =~ 'p' AND "
                  "service.name =~ 'p' OR "
                  "service.name =~ 'r'", -1,  1, CONNECTION_LOOKUP },
+               { "LOOKUP hosts WHERE NOT "
+                 "host.name =~ 'p' AND "
+                 "service.name =~ 'p' OR "
+                 "service.name =~ 'r'", -1,  1, CONNECTION_LOOKUP },
 
                /* comments */
                { "/* some comment */",  -1,  0, 0 },
@@ -133,12 +142,27 @@ START_TEST(test_parse_matcher)
 
                /* valid expressions */
                { "host.name = 'localhost'",        -1,  MATCHER_HOST },
+               { "host.name != 'localhost'",       -1,  MATCHER_NOT },
+               { "host.name =~ 'host'",            -1,  MATCHER_HOST },
+               { "host.name !~ 'host'",            -1,  MATCHER_NOT },
                { "host.name = 'localhost' -- foo", -1,  MATCHER_HOST },
                { "host.name = 'host' <garbage>",   18,  MATCHER_HOST },
+               /* match hosts by service */
+               { "service.name = 'name'",          -1,  MATCHER_HOST },
+               { "service.name != 'name'",         -1,  MATCHER_NOT },
+               { "service.name =~ 'pattern'",      -1,  MATCHER_HOST },
+               { "service.name !~ 'pattern'",      -1,  MATCHER_NOT },
+               /* match hosts by attribute */
+               { "attribute.name = 'name'",        -1,  MATCHER_HOST },
+               { "attribute.name != 'name'",       -1,  MATCHER_NOT },
+               { "attribute.name =~ 'pattern'",    -1,  MATCHER_HOST },
+               { "attribute.name !~ 'pattern'",    -1,  MATCHER_NOT },
+               /* composite expressions */
                { "host.name =~ 'pattern' AND "
                  "service.name =~ 'pattern'",      -1,  MATCHER_AND },
                { "host.name =~ 'pattern' OR "
                  "service.name =~ 'pattern'",      -1,  MATCHER_OR },
+               { "NOT host.name = 'host'",         -1,  MATCHER_NOT },
 
                /* check operator precedence */
                { "host.name = 'name' OR "
@@ -157,6 +181,12 @@ START_TEST(test_parse_matcher)
                  "service.name = 'name') AND "
                  "(attribute.name = 'name' OR "
                  "attribute.foo = 'bar')",         -1,  MATCHER_AND },
+               { "NOT host.name = 'name' OR "
+                 "service.name = 'name'",          -1,  MATCHER_OR },
+               { "NOT host.name = 'name' OR "
+                 "NOT service.name = 'name'",      -1,  MATCHER_OR },
+               { "NOT (host.name = 'name' OR "
+                 "NOT service.name = 'name')",     -1,  MATCHER_NOT },
 
                /* syntax errors */
                { "LIST",                           -1, -1 },