index 48a1a97856b0304e159d2c26bddbb5ad340f18c2..3f426cecde0a5d9d874446da80d03be2c5169f75 100644 (file)
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include "frontend/connection.h"
#include "frontend/parser.h"
#include "core/store-private.h"
#include "core/object.h"
-#include "libsysdb_test.h"
+#include "testutils.h"
#include <check.h>
#include <limits.h>
{ "LOOKUP hosts MATCHING "
"backend = ['a','b']", -1, 1, SDB_CONNECTION_LOOKUP },
+ /* array iteration */
+ { "LOOKUP hosts MATCHING "
+ "'foo' IN backend", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING 'foo' "
+ "NOT IN backend", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "['foo','bar'] "
+ "IN backend ", -1, 1, SDB_CONNECTION_LOOKUP },
+ /* attribute type is unknown */
+ { "LOOKUP hosts MATCHING "
+ "attribute['backend'] "
+ "IN backend ", -1, 1, SDB_CONNECTION_LOOKUP },
+ /* type mismatch */
+ { "LOOKUP hosts MATCHING "
+ "1 IN backend ", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "1 NOT IN backend ", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend < 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend <= 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend = 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend != 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend >= 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend > 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend =~ 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ANY backend !~ 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ /* right operand is an array */
+ { "LOOKUP hosts MATCHING "
+ "ANY backend !~ backend",
+ -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend < 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend <= 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend = 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend != 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend >= 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend > 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend =~ 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ { "LOOKUP hosts MATCHING "
+ "ALL backend !~ 'b'", -1, 1, SDB_CONNECTION_LOOKUP },
+ /* attribute type is unknown */
+ { "LOOKUP hosts MATCHING "
+ "ANY backend = attribute['backend']",
+ -1, 1, SDB_CONNECTION_LOOKUP },
+ /* type mismatch */
+ { "LOOKUP hosts MATCHING "
+ "ANY backend = 1", -1, -1, 0 },
+
/* valid operand types */
{ "LOOKUP hosts MATCHING "
"age * 1 > 0s", -1, 1, SDB_CONNECTION_LOOKUP },
/* type mismatches */
{ "LOOKUP hosts MATCHING "
"age > 0", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "NOT age > 0", -1, -1, 0 },
{ "LOOKUP hosts MATCHING "
"age >= 0", -1, -1, 0 },
{ "LOOKUP hosts MATCHING "
"name / 1 = ''", -1, -1, 0 },
{ "LOOKUP hosts MATCHING "
"name % 1 = ''", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "(name % 1) + 1 = ''", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "1 + (name % 1) = ''", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "'' = 1 + (name % 1)", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "age > 0 AND "
+ "age = 0s", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "age = 0s AND "
+ "age > 0", -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "host.name > 0", -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "backend > 'b'", -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "'b' > backend", -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "attribute['a'] > backend",
+ -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "backend > attribute['a']",
+ -1, -1, 0 },
+ { "LOOKUP services MATCHING "
+ "host.name + 1 = ''", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "'a' + 1 IN 'b'", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "'a' IN 'b' - 1", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name + 1 IN 'b'", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "'a' IN name - 1", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "'b' IN 'abc'", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "1 IN age", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name =~ 'a' + 1", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name =~ name + 1", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name + 1 =~ 'a'", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name =~ 1", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "name + 1 IS NULL", -1, -1, 0 },
+ { "LOOKUP hosts FILTER "
+ "name + 1 IS NULL", -1, -1, 0 },
/* comments */
{ "/* some comment */", -1, 0, 0 },
"'f' || oo", -1, -1, 0 },
{ "LOOKUP hosts MATCHING "
"ANY host = 'host'", -1, -1, 0 },
+ { "LOOKUP hosts MATCHING "
+ "ANY service > 1", -1, -1, 0 },
{ "LOOKUP hosts MATCHING "
"service.name = 's'", -1, -1, 0 },
{ "LOOKUP services MATCHING "
{ "interval >= 20s", -1, MATCHER_GE },
{ "interval > 20s", -1, MATCHER_GT },
{ "'be' IN backend", -1, MATCHER_IN },
+ { "'be' NOT IN backend", -1, MATCHER_NIN },
+ { "['a','b'] IN backend", -1, MATCHER_IN },
+ { "['a','b'] NOT IN backend", -1, MATCHER_NIN },
/* check operator precedence */
{ "name = 'name' OR "
}
END_TEST
-Suite *
-fe_parser_suite(void)
+TEST_MAIN("frontend::parser")
{
- Suite *s = suite_create("frontend::parser");
- TCase *tc;
-
- tc = tcase_create("core");
+ TCase *tc = tcase_create("core");
TC_ADD_LOOP_TEST(tc, parse);
TC_ADD_LOOP_TEST(tc, parse_matcher);
TC_ADD_LOOP_TEST(tc, parse_expr);
- suite_add_tcase(s, tc);
-
- return s;
-} /* util_parser_suite */
+ ADD_TCASE(tc);
+}
+TEST_MAIN_END
/* vim: set tw=78 sw=4 ts=4 noexpandtab : */