index 1c1eac440d6f7f4d63ebbe973f35beeae35c4227..ab3087acbc2cbe2101f1c877737048273e1c19b2 100644 (file)
--- a/t/unit/core/store_test.c
+++ b/t/unit/core/store_test.c
}
END_TEST
-static void
-verify_json_output(sdb_strbuf_t *buf, const char *expected,
- sdb_store_matcher_t *filter, int flags)
-{
- int pos;
- size_t len1, len2;
- size_t i;
-
- len1 = strlen(sdb_strbuf_string(buf));
- len2 = strlen(expected);
-
- pos = -1;
- if (len1 != len2)
- pos = (int)(len1 <= len2 ? len1 : len2);
-
- for (i = 0; i < (len1 <= len2 ? len1 : len2); ++i) {
- if (sdb_strbuf_string(buf)[i] != expected[i]) {
- pos = (int)i;
- break;
- }
- }
-
- fail_unless(pos == -1,
- "sdb_store_tojson(<buf>, %p, %x) returned unexpected result\n"
- " got: %s\n %*s\n expected: %s",
- filter, flags, sdb_strbuf_string(buf), pos + 1, "^",
- expected);
-} /* verify_json_output */
-
-START_TEST(test_store_tojson)
-{
- sdb_strbuf_t *buf;
- size_t i;
-
- struct {
- struct {
- sdb_store_matcher_t *(*m)(sdb_store_expr_t *,
- sdb_store_expr_t *);
- int field;
- sdb_data_t value;
- } filter;
- int flags;
- const char *expected;
- } golden_data[] = {
- { { NULL, 0, SDB_DATA_INIT }, 0,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": \"v1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k2\", \"value\": \"v2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k3\", \"value\": \"v3\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k3\", \"value\": 42, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]},"
- "{\"name\": \"m2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []}"
- "], "
- "\"services\": []},"
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []}"
- "], "
- "\"services\": ["
- "{\"name\": \"s1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []},"
- "{\"name\": \"s2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": 123, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k2\", \"value\": 4711, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]}"
- "]}"
- "]" },
- { { NULL, 0, SDB_DATA_INIT }, SDB_SKIP_SERVICES,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": \"v1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k2\", \"value\": \"v2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k3\", \"value\": \"v3\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k3\", \"value\": 42, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]},"
- "{\"name\": \"m2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []}"
- "]},"
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []}"
- "]}"
- "]" },
- { { NULL, 0, SDB_DATA_INIT }, SDB_SKIP_METRICS,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": \"v1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k2\", \"value\": \"v2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k3\", \"value\": \"v3\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "], "
- "\"services\": []},"
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], "
- "\"services\": ["
- "{\"name\": \"s1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []},"
- "{\"name\": \"s2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": 123, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"k2\", \"value\": 4711, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]}"
- "]}"
- "]" },
- { { NULL, 0, SDB_DATA_INIT }, SDB_SKIP_ATTRIBUTES,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"m2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "], "
- "\"services\": []},"
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"metrics\": ["
- "{\"name\": \"m1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "], "
- "\"services\": ["
- "{\"name\": \"s1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"s2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]}"
- "]" },
- { { NULL, 0, SDB_DATA_INIT }, SDB_SKIP_ALL,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []}"
- "]" },
- { { sdb_store_eq_matcher, SDB_FIELD_NAME,
- { SDB_TYPE_STRING, { .string = "h1" } } }, 0,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], \"metrics\": [], \"services\": []}"
- "]" },
- { { sdb_store_gt_matcher, SDB_FIELD_LAST_UPDATE,
- { SDB_TYPE_DATETIME, { .datetime = 1 } } }, 0,
- "["
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], "
- "\"metrics\": [], "
- "\"services\": ["
- "{\"name\": \"s2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": 123, "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "]}"
- "]}"
- "]" },
- { { sdb_store_le_matcher, SDB_FIELD_LAST_UPDATE,
- { SDB_TYPE_DATETIME, { .datetime = 1 } } }, 0,
- "["
- "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": ["
- "{\"name\": \"k1\", \"value\": \"v1\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": []},"
- "], "
- "\"metrics\": ["
- "{\"name\": \"m2\", "
- "\"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": []}"
- "], "
- "\"services\": []}"
- "]" },
- { { sdb_store_ge_matcher, SDB_FIELD_LAST_UPDATE,
- { SDB_TYPE_DATETIME, { .datetime = 3 } } }, 0,
- "["
- "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
- "\"update_interval\": \"0s\", \"backends\": [], "
- "\"attributes\": [], "
- "\"metrics\": [], "
- "\"services\": []}"
- "]" },
- };
-
- buf = sdb_strbuf_create(0);
- fail_unless(buf != NULL, "INTERNAL ERROR: failed to create string buffer");
- populate();
-
- for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) {
- sdb_store_matcher_t *filter = NULL;
- int status;
-
- sdb_strbuf_clear(buf);
-
- if (golden_data[i].filter.m) {
- sdb_store_expr_t *field;
- sdb_store_expr_t *value;
-
- field = sdb_store_expr_fieldvalue(golden_data[i].filter.field);
- fail_unless(field != NULL,
- "INTERNAL ERROR: sdb_store_expr_fieldvalue() = NULL");
- value = sdb_store_expr_constvalue(&golden_data[i].filter.value);
- fail_unless(value != NULL,
- "INTERNAL ERROR: sdb_store_expr_constvalue() = NULL");
-
- filter = golden_data[i].filter.m(field, value);
- fail_unless(filter != NULL,
- "INTERNAL ERROR: sdb_store_*_matcher() = NULL");
-
- sdb_object_deref(SDB_OBJ(field));
- sdb_object_deref(SDB_OBJ(value));
- }
-
- status = sdb_store_tojson(buf, filter, golden_data[i].flags);
- fail_unless(status == 0,
- "sdb_store_tojson(<buf>, %p, %x) = %d; expected: 0",
- filter, golden_data[i].flags, status);
-
- verify_json_output(buf, golden_data[i].expected,
- filter, golden_data[i].flags);
- sdb_object_deref(SDB_OBJ(filter));
- }
- sdb_strbuf_destroy(buf);
-}
-END_TEST
-
START_TEST(test_get_field)
{
sdb_store_obj_t *host;
TCase *tc;
tc = tcase_create("core");
- tcase_add_test(tc, test_store_tojson);
tcase_add_test(tc, test_store_host);
tcase_add_test(tc, test_store_get_host);
tcase_add_test(tc, test_store_attr);