Code

Merged branch 'master' of git://git.tokkee.org/sysdb.
[sysdb.git] / t / core / store_lookup_test.c
index 3b9a6d0cc9c65dec37cdd9fe16a109a7d2e370f8..8ead947bfa5b600bd51409e24735d2e8d4c80030 100644 (file)
@@ -264,6 +264,8 @@ START_TEST(test_store_match)
 
                sdb_object_deref(SDB_OBJ(n));
        }
+
+       sdb_object_deref(SDB_OBJ(obj));
 }
 END_TEST
 
@@ -332,6 +334,8 @@ START_TEST(test_store_match_op)
 
        sdb_object_deref(SDB_OBJ(always));
        sdb_object_deref(SDB_OBJ(never));
+
+       sdb_object_deref(SDB_OBJ(obj));
 }
 END_TEST
 
@@ -420,39 +424,85 @@ lookup_cb(sdb_store_base_t *obj, void *user_data)
 
 START_TEST(test_lookup)
 {
+#define PTR_RE "0x[0-9a-f]+"
        struct {
                const char *query;
                int expected;
+               const char *tostring_re;
        } golden_data[] = {
-               { "host.name = 'a'",       1 },
-               { "host.name =~ 'a|b'",    2 },
-               { "host.name =~ 'host'",   0 },
-               { "host.name =~ '.'",      3 },
-               { "service.name = 's1'",   2 },
-               { "service.name =~ 's'",   2 },
-               { "service.name !~ 's'",   1 },
-               { "attribute.name = 'k1'", 1 },
-               { "attribute.name = 'x'",  0 },
-               { "attribute.k1 = 'v1'",   1 },
-               { "attribute.k1 != 'v1'",  2 },
-               { "attribute.k1 != 'v2'",  3 },
+               { "host.name = 'a'",       1,
+                       "HOST\\{ NAME\\{ 'a', \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{\\} \\}" },
+               { "host.name =~ 'a|b'",    2,
+                       "HOST\\{ NAME\\{ NULL, "PTR_RE" \\}, SERVICE\\{\\}, ATTR\\{\\} \\}" },
+               { "host.name =~ 'host'",   0,
+                       "HOST\\{ NAME\\{ NULL, "PTR_RE" \\}, SERVICE\\{\\}, ATTR\\{\\} \\}" },
+               { "host.name =~ '.'",      3,
+                       "HOST\\{ NAME\\{ NULL, "PTR_RE" \\}, SERVICE\\{\\}, ATTR\\{\\} \\}" },
+               { "service.name = 's1'",   2,
+                       "HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{ "
+                                       "NAME\\{ 's1', \\(nil\\) }, ATTR\\{\\} "
+                               "\\}, ATTR\\{\\} \\}" },
+               { "service.name =~ 's'",   2,
+                       "HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{ "
+                                       "NAME\\{ NULL, "PTR_RE" }, ATTR\\{\\} "
+                               "\\}, ATTR\\{\\} \\}" },
+               { "service.name !~ 's'",   1,
+                       "(NOT, HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{ "
+                                       "NAME\\{ NULL, "PTR_RE" }, ATTR\\{\\} "
+                               "\\}, ATTR\\{\\} \\})" },
+               { "attribute.name = 'k1'", 1,
+                       "HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'k1', \\(nil\\) }, VALUE\\{ NULL, \\(nil\\) \\} "
+                               "\\} \\}" },
+               { "attribute.name = 'x'",  0,
+                       "HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'x', \\(nil\\) }, VALUE\\{ NULL, \\(nil\\) \\} "
+                               "\\} \\}" },
+               { "attribute.k1 = 'v1'",   1,
+                       "HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'k1', \\(nil\\) }, VALUE\\{ 'v1', \\(nil\\) \\} "
+                               "\\} \\}" },
+               { "attribute.k1 != 'v1'",  2,
+                       "(NOT, HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'k1', \\(nil\\) }, VALUE\\{ 'v1', \\(nil\\) \\} "
+                               "\\} \\})" },
+               { "attribute.k1 != 'v2'",  3,
+                       "(NOT, HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'k1', \\(nil\\) }, VALUE\\{ 'v2', \\(nil\\) \\} "
+                               "\\} \\})" },
+               { "attribute.name != 'x' "
+                 "AND attribute.y !~ 'x'", 3,
+                       "\\(AND, \\(NOT, HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                       "NAME\\{ 'x', \\(nil\\) }, VALUE\\{ NULL, \\(nil\\) \\} "
+                               "\\} \\}\\), \\(NOT, HOST\\{ NAME\\{ NULL, \\(nil\\) \\}, SERVICE\\{\\}, ATTR\\{ "
+                                               "NAME\\{ 'y', \\(nil\\) }, VALUE\\{ NULL, "PTR_RE" \\} "
+                                       "\\} \\}\\)\\)" },
        };
 
-       size_t i;
        int check, n;
+       size_t i;
 
-       i = 0;
-       check = sdb_store_lookup(NULL, lookup_cb, &i);
+       n = 0;
+       check = sdb_store_lookup(NULL, lookup_cb, &n);
        fail_unless(check == 0,
                        "sdb_store_lookup() = %d; expected: 0", check);
-       fail_unless(i == 3,
-                       "sdb_store_lookup called callback %d times; expected: 3", (int)i);
+       fail_unless(n == 3,
+                       "sdb_store_lookup called callback %d times; expected: 3", (int)n);
 
        for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
-               sdb_store_matcher_t *m = sdb_fe_parse_matcher(golden_data[i].query, -1);
+               sdb_store_matcher_t *m;
+               char buf[4096];
+
+               m = sdb_fe_parse_matcher(golden_data[i].query, -1);
                fail_unless(m != NULL,
                                "sdb_fe_parse_matcher(%s, -1) = NULL; expected: <matcher>",
                                golden_data[i].query);
+               fail_unless(sdb_regmatches(golden_data[i].tostring_re,
+                                       sdb_store_matcher_tostring(m, buf, sizeof(buf))) == 0,
+                               "sdb_fe_parse_matcher(%s, -1) = %s; expected: %s",
+                               golden_data[i].query,
+                               sdb_store_matcher_tostring(m, buf, sizeof(buf)),
+                               golden_data[i].tostring_re);
 
                n = 0;
                sdb_store_lookup(m, lookup_cb, &n);