Code

store: Fix execution of more complex iterators.
[sysdb.git] / t / unit / frontend / query_test.c
index 5330999c2d091e9828b00dc9d0c01fb1509b810a..8ac497c3ecc0a4901b4bd23834625d89221d3418 100644 (file)
@@ -124,7 +124,38 @@ turndown(void)
                                        "{\"name\": \"hostname\", \"value\": \"h1\", " \
                                                "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
                                                "\"update_interval\": \"0s\", \"backends\": []}]}]}"
+#define HOST_H2 \
+       "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:03 +0000\", " \
+                       "\"update_interval\": \"0s\", \"backends\": [], " \
+               "\"metrics\": [" \
+                       "{\"name\": \"m1\", \"timeseries\": false, " \
+                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                               "\"update_interval\": \"0s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}]}], " \
+               "\"services\": [" \
+                       "{\"name\": \"s1\", \"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                               "\"update_interval\": \"0s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}]}," \
+                       "{\"name\": \"s2\", \"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                               "\"update_interval\": \"0s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}," \
+                                       "{\"name\": \"k1\", \"value\": 123, " \
+                                               "\"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}," \
+                                       "{\"name\": \"k2\", \"value\": 4711, " \
+                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}]}]}"
 #define HOST_H1_ARRAY "["HOST_H1"]"
+#define HOST_H12_ARRAY "["HOST_H1","HOST_H2"]"
 #define HOST_H1_LISTING \
        "{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:01 +0000\", " \
                        "\"update_interval\": \"0s\", \"backends\": []}"
@@ -142,6 +173,28 @@ turndown(void)
                                        "{\"name\": \"hostname\", \"value\": \"h2\", " \
                                                "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
                                                "\"update_interval\": \"0s\", \"backends\": []}]}]}"
+#define SERVICE_H2_S12 \
+       "{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:03 +0000\", " \
+                       "\"update_interval\": \"0s\", \"backends\": [], " \
+               "\"services\": [" \
+                       "{\"name\": \"s1\", \"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                               "\"update_interval\": \"0s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}]}," \
+                       "{\"name\": \"s2\", \"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                               "\"update_interval\": \"0s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}," \
+                                       "{\"name\": \"k1\", \"value\": 123, " \
+                                               "\"last_update\": \"1970-01-01 00:00:02 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}," \
+                                       "{\"name\": \"k2\", \"value\": 4711, " \
+                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
+                                               "\"update_interval\": \"0s\", \"backends\": []}]}]}"
 #define SERVICE_H2_S1_ARRAY "["SERVICE_H2_S1"]"
 #define SERVICE_H2_S12_LISTING \
        "[{\"name\": \"h2\", \"last_update\": \"1970-01-01 00:00:03 +0000\", " \
@@ -371,6 +424,14 @@ static struct {
                SDB_CONNECTION_QUERY, "LOOKUP hosts MATCHING name = 'h1' FILTER age >= 0s", -1, /* always matches */
                0, SDB_CONNECTION_DATA, 1112, SDB_CONNECTION_LOOKUP, HOST_H1_ARRAY,
        },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP hosts MATCHING ANY backend = 'b'", -1,
+               0, SDB_CONNECTION_DATA, 6, SDB_CONNECTION_LOOKUP, "[]",
+       },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP hosts MATCHING ANY backend || 'b' = 'b'", -1,
+               0, SDB_CONNECTION_DATA, 2205, SDB_CONNECTION_LOOKUP, HOST_H12_ARRAY,
+       },
        {
                SDB_CONNECTION_QUERY, "FETCH host 'h1' FILTER age < 0s", -1, /* never matches */
                -1, UINT32_MAX, 0, 0, NULL, /* FETCH fails if the object doesn't exist */
@@ -432,6 +493,22 @@ static struct {
                SDB_CONNECTION_QUERY, "LOOKUP services MATCHING name = 's1'", -1,
                0, SDB_CONNECTION_DATA, 358, SDB_CONNECTION_LOOKUP, SERVICE_H2_S1_ARRAY,
        },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP services MATCHING host.name = 'h2'", -1,
+               0, SDB_CONNECTION_DATA, 825, SDB_CONNECTION_LOOKUP, "["SERVICE_H2_S12"]",
+       },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP services MATCHING ANY host.metric.name = 'm1'", -1,
+               0, SDB_CONNECTION_DATA, 825, SDB_CONNECTION_LOOKUP, "["SERVICE_H2_S12"]",
+       },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP services MATCHING ANY host.metric.last_update = 1s", -1,
+               0, SDB_CONNECTION_DATA, 825, SDB_CONNECTION_LOOKUP, "["SERVICE_H2_S12"]",
+       },
+       {
+               SDB_CONNECTION_QUERY, "LOOKUP services MATCHING ANY host.metric.name = 'mX'", -1,
+               0, SDB_CONNECTION_DATA, 6, SDB_CONNECTION_LOOKUP, "[]",
+       },
        {
                SDB_CONNECTION_LOOKUP, "\0\0\0\2""name = 's1'", 16,
                0, SDB_CONNECTION_DATA, 358, SDB_CONNECTION_LOOKUP, SERVICE_H2_S1_ARRAY,
@@ -680,27 +757,27 @@ START_TEST(test_query)
 
        switch (conn->cmd) {
        case SDB_CONNECTION_QUERY:
-               check = sdb_fe_query(conn);
+               check = sdb_conn_query(conn);
                break;
        case SDB_CONNECTION_FETCH:
-               check = sdb_fe_fetch(conn);
+               check = sdb_conn_fetch(conn);
                break;
        case SDB_CONNECTION_LIST:
-               check = sdb_fe_list(conn);
+               check = sdb_conn_list(conn);
                break;
        case SDB_CONNECTION_LOOKUP:
-               check = sdb_fe_lookup(conn);
+               check = sdb_conn_lookup(conn);
                break;
        /* SDB_CONNECTION_TIMESERIES not supported yet */
        case SDB_CONNECTION_STORE:
-               check = sdb_fe_store(conn);
+               check = sdb_conn_store(conn);
                break;
        default:
                fail("Invalid command %#x", conn->cmd);
        }
 
        fail_unless(check == query_data[_i].expected,
-                       "sdb_fe_query(%s) = %d; expected: %d (err: %s)",
+                       "sdb_conn_query(%s) = %d; expected: %d (err: %s)",
                        query_data[_i].query, check, query_data[_i].expected,
                        sdb_strbuf_string(conn->errbuf));
 
@@ -709,7 +786,7 @@ START_TEST(test_query)
 
        if (query_data[_i].code == UINT32_MAX) {
                fail_unless(len == 0,
-                               "sdb_fe_query(%s) returned data on error: '%s'",
+                               "sdb_conn_query(%s) returned data on error: '%s'",
                        query_data[_i].query, data);
                mock_conn_destroy(conn);
                return;
@@ -722,14 +799,14 @@ START_TEST(test_query)
 
        fail_unless((code == query_data[_i].code)
                                && ((size_t)msg_len == query_data[_i].len),
-                       "sdb_fe_query(%s) returned %u, %u; expected: %u, %zu",
+                       "sdb_conn_query(%s) returned %u, %u; expected: %u, %zu",
                        query_data[_i].query, code, msg_len,
                        query_data[_i].code, query_data[_i].len);
 
        if (code == SDB_CONNECTION_DATA) {
                tmp = sdb_proto_unmarshal_int32(data, len, &code);
                fail_unless(code == query_data[_i].type,
-                               "sdb_fe_query(%s) returned %s object; expected: %s",
+                               "sdb_conn_query(%s) returned %s object; expected: %s",
                                query_data[_i].query, SDB_CONN_MSGTYPE_TO_STRING((int)code),
                                SDB_CONN_MSGTYPE_TO_STRING((int)query_data[_i].type));
                data += tmp;
@@ -737,7 +814,7 @@ START_TEST(test_query)
        }
 
        fail_if_strneq(data, query_data[_i].data, (size_t)msg_len,
-                       "sdb_fe_query(%s) returned unexpected data",
+                       "sdb_conn_query(%s) returned unexpected data",
                        query_data[_i].query, data, query_data[_i].data);
 
        mock_conn_destroy(conn);