Code

store: Let sdb_store_scan() support other object types besides hosts.
[sysdb.git] / t / unit / core / store_test.c
index f459b6e0afd461be0754fb64cd192928e8b3e2c9..d132508537a76789ca3e9effe2240473ff8f5e88 100644 (file)
@@ -55,6 +55,7 @@ populate(void)
 
        sdb_store_metric("h1", "m1", /* store */ NULL, 2);
        sdb_store_metric("h1", "m2", /* store */ NULL, 1);
+       sdb_store_metric("h2", "m1", /* store */ NULL, 1);
 
        sdb_store_service("h2", "s1", 1);
        sdb_store_service("h2", "s2", 2);
@@ -483,7 +484,12 @@ START_TEST(test_store_tojson)
                                "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
                                        "\"update_interval\": \"0s\", \"backends\": [], "
                                        "\"attributes\": [], "
-                                       "\"metrics\": [], "
+                                       "\"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\", "
@@ -534,7 +540,12 @@ START_TEST(test_store_tojson)
                                "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
                                        "\"update_interval\": \"0s\", \"backends\": [], "
                                        "\"attributes\": [], "
-                                       "\"metrics\": []}"
+                                       "\"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,
                        "["
@@ -588,7 +599,11 @@ START_TEST(test_store_tojson)
                                        "\"services\": []},"
                                "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:00 +0000\", "
                                        "\"update_interval\": \"0s\", \"backends\": [], "
-                                       "\"metrics\": [], "
+                                       "\"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\", "
@@ -852,64 +867,87 @@ START_TEST(test_interval)
 END_TEST
 
 static int
-iter_incr(sdb_store_obj_t *obj, void *user_data)
+scan_count(sdb_store_obj_t *obj, void *user_data)
 {
        intptr_t *i = user_data;
 
        fail_unless(obj != NULL,
-                       "sdb_store_iterate callback received NULL obj; expected: "
+                       "sdb_store_scan callback received NULL obj; expected: "
                        "<store base obj>");
        fail_unless(i != NULL,
-                       "sdb_store_iterate callback received NULL user_data; "
+                       "sdb_store_scan callback received NULL user_data; "
                        "expected: <pointer to data>");
 
        ++(*i);
        return 0;
-} /* iter_incr */
+} /* scan_count */
 
 static int
-iter_error(sdb_store_obj_t *obj, void *user_data)
+scan_error(sdb_store_obj_t *obj, void *user_data)
 {
        intptr_t *i = user_data;
 
        fail_unless(obj != NULL,
-                       "sdb_store_iterate callback received NULL obj; expected: "
+                       "sdb_store_scan callback received NULL obj; expected: "
                        "<store base obj>");
        fail_unless(i != NULL,
-                       "sdb_store_iterate callback received NULL user_data; "
+                       "sdb_store_scan callback received NULL user_data; "
                        "expected: <pointer to data>");
 
        ++(*i);
        return -1;
-} /* iter_error */
+} /* scan_error */
 
-START_TEST(test_iterate)
+START_TEST(test_scan)
 {
        intptr_t i = 0;
        int check;
 
        /* empty store */
-       check = sdb_store_iterate(iter_incr, &i);
+       check = sdb_store_scan(SDB_HOST, /* m, filter = */ NULL, NULL,
+                       scan_count, &i);
        fail_unless(check == -1,
-                       "sdb_store_iterate(), empty store = %d; expected: -1", check);
+                       "sdb_store_scan(HOST), empty store = %d; expected: -1", check);
        fail_unless(i == 0,
-                       "sdb_store_iterate called callback %d times; expected: 0", (int)i);
+                       "sdb_store_scan(HOST) called callback %d times; "
+                       "expected: 0", (int)i);
 
        populate();
 
-       check = sdb_store_iterate(iter_incr, &i);
+       check = sdb_store_scan(SDB_HOST, /* m, filter = */ NULL, NULL,
+                       scan_count, &i);
        fail_unless(check == 0,
-                       "sdb_store_iterate() = %d; expected: 0", check);
+                       "sdb_store_scan(HOST) = %d; expected: 0", check);
        fail_unless(i == 2,
-                       "sdb_store_iterate called callback %d times; expected: 1", (int)i);
+                       "sdb_store_scan(HOST) called callback %d times; "
+                       "expected: 1", (int)i);
 
        i = 0;
-       check = sdb_store_iterate(iter_error, &i);
+       check = sdb_store_scan(SDB_HOST, /* m, filter = */ NULL, NULL,
+                       scan_error, &i);
        fail_unless(check == -1,
-                       "sdb_store_iterate(), error callback = %d; expected: -1", check);
+                       "sdb_store_scan(HOST), error callback = %d; expected: -1", check);
        fail_unless(i == 1,
-                       "sdb_store_iterate called callback %d times "
+                       "sdb_store_scan(HOST) called callback %d times "
                        "(callback returned error); expected: 1", (int)i);
+
+       i = 0;
+       check = sdb_store_scan(SDB_SERVICE, /* m, filter = */ NULL, NULL,
+                       scan_count, &i);
+       fail_unless(check == 0,
+                       "sdb_store_scan(SERVICE) = %d; expected: 0", check);
+       fail_unless(i == 2,
+                       "sdb_store_scan(SERVICE) called callback %d times; "
+                       "expected: 2", (int)i);
+
+       i = 0;
+       check = sdb_store_scan(SDB_METRIC, /* m, filter = */ NULL, NULL,
+                       scan_count, &i);
+       fail_unless(check == 0,
+                       "sdb_store_scan(METRIC) = %d; expected: 0", check);
+       fail_unless(i == 3,
+                       "sdb_store_scan(METRIC) called callback %d times; "
+                       "expected: 3", (int)i);
 }
 END_TEST
 
@@ -930,7 +968,7 @@ core_store_suite(void)
        tcase_add_test(tc, test_store_service_attr);
        tcase_add_test(tc, test_get_field);
        tcase_add_test(tc, test_interval);
-       tcase_add_test(tc, test_iterate);
+       tcase_add_test(tc, test_scan);
        tcase_add_unchecked_fixture(tc, NULL, sdb_store_clear);
        suite_add_tcase(s, tc);