index 465bb08ca079004604ddc08d694d0192d509043c..15a67b10a7809ac5f92d4a534a99f3600fd1cf65 100644 (file)
*/
#include "core/store.h"
+#include "core/store-private.h"
#include "libsysdb_test.h"
#include <check.h>
{
/* host */ NULL, NULL,
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "a", NULL,
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "b", NULL,
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ NULL, "^a$",
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ NULL, "^b$",
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "a", "^b$",
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "b", "^a$",
/* svc */ NULL, NULL,
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ "s1", NULL,
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ NULL, "^s1$",
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ NULL, NULL, NULL, NULL, 0
+ /* attr */ NULL, NULL, NULL, NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ "x1", NULL,
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ NULL, "x",
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ "x1", "x",
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "x",
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ "x1", "s",
- /* attr */ NULL, NULL, NULL, NULL, -1
+ /* attr */ NULL, NULL, NULL, NULL, 0
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ "k1", NULL, NULL, NULL, 0
+ /* attr */ "k1", NULL, NULL, NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ NULL, "^k", NULL, NULL, 0
+ /* attr */ NULL, "^k", NULL, NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ NULL, NULL, "v1", NULL, 0
+ /* attr */ NULL, NULL, "v1", NULL, 1
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ NULL, NULL, NULL, "^v1$", 0
+ /* attr */ NULL, NULL, NULL, "^v1$", 1
},
{
/* host */ "a", "^a$",
/* svc */ "s1", "^s1$",
- /* attr */ "k1", "1", "v1", "1", 0
+ /* attr */ "k1", "1", "v1", "1", 1
},
};
sdb_store_matcher_t *right;
int expected;
} golden_data[] = {
- { "OR", always, always, 0 },
- { "OR", always, never, 0 },
- { "OR", never, always, 0 },
- { "OR", never, never, -1 },
- { "AND", always, always, 0 },
- { "AND", always, never, -1 },
- { "AND", never, always, -1 },
- { "AND", never, never, -1 },
+ { "OR", always, always, 1 },
+ { "OR", always, never, 1 },
+ { "OR", never, always, 1 },
+ { "OR", never, never, 0 },
+ { "AND", always, always, 1 },
+ { "AND", always, never, 0 },
+ { "AND", never, always, 0 },
+ { "AND", never, never, 0 },
};
int status;
obj = sdb_store_get_host("a");
status = sdb_store_matcher_matches(always, obj);
- fail_unless(status == 0,
+ fail_unless(status == 1,
"INTERNAL ERROR: 'always' did not match host");
status = sdb_store_matcher_matches(never, obj);
- fail_unless(status < 0,
+ fail_unless(status == 0,
"INTERNAL ERROR: 'never' matches host");
for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
}
END_TEST
+START_TEST(test_parse_cmp)
+{
+ sdb_store_matcher_t *check;
+
+ size_t i;
+
+ struct {
+ const char *obj_type;
+ const char *attr;
+ const char *op;
+ const char *value;
+ int expected;
+ } golden_data[] = {
+ { "host", "name", "=", "hostname", MATCHER_HOST },
+ { "host", "name", "=~", "hostname", MATCHER_HOST },
+ { "host", "attr", "=", "hostname", -1 },
+ { "host", "name", "&^", "hostname", -1 },
+ { "service", "name", "=", "srvname", MATCHER_SERVICE },
+ { "service", "name", "=", "srvname", MATCHER_SERVICE },
+ { "service", "attr", "=", "srvname", -1 },
+ { "service", "name", "&^", "srvname", -1 },
+ { "attribute", "name", "=", "attrname", MATCHER_ATTR },
+ { "attribute", "name", "=~", "attrname", MATCHER_ATTR },
+ { "attribute", "attr", "=", "attrname", MATCHER_ATTR },
+ { "attribute", "attr", "=~", "attrname", MATCHER_ATTR },
+ { "attribute", "attr", "&^", "attrname", -1 },
+ };
+
+ for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
+ check = sdb_store_matcher_parse_cmp(golden_data[i].obj_type,
+ golden_data[i].attr, golden_data[i].op, golden_data[i].value);
+
+ if (golden_data[i].expected == -1) {
+ fail_unless(check == NULL,
+ "sdb_store_matcher_parse_cmp(%s, %s, %s, %s) = %p; "
+ "expected: NULL", golden_data[i].obj_type,
+ golden_data[i].attr, golden_data[i].op,
+ golden_data[i].value, check);
+ continue;
+ }
+
+ fail_unless(check != NULL,
+ "sdb_store_matcher_parse_cmp(%s, %s, %s, %s) = %p; "
+ "expected: NULL", golden_data[i].obj_type,
+ golden_data[i].attr, golden_data[i].op,
+ golden_data[i].value, check);
+ fail_unless(M(check)->type == golden_data[i].expected,
+ "sdb_store_matcher_parse_cmp(%s, %s, %s, %s) returned matcher "
+ "of type %d; expected: %d", golden_data[i].obj_type,
+ golden_data[i].attr, golden_data[i].op, golden_data[i].value,
+ M(check)->type, golden_data[i].expected);
+
+ sdb_object_deref(SDB_OBJ(check));
+ }
+}
+END_TEST
+
static int
lookup_cb(sdb_store_base_t *obj, void *user_data)
{
tcase_add_checked_fixture(tc, populate, sdb_store_clear);
tcase_add_test(tc, test_store_match);
tcase_add_test(tc, test_store_match_op);
+ tcase_add_test(tc, test_parse_cmp);
tcase_add_test(tc, test_lookup);
suite_add_tcase(s, tc);