Code

frontend/query_test: Test some weird, special cases.
[sysdb.git] / t / unit / frontend / query_test.c
index e36c302422089adbe740b9ecd2cdd5710bcda03a..de8ab806843a34be4942f78939864dc275d06f1c 100644 (file)
@@ -69,7 +69,8 @@ populate(void)
 
        sdb_plugin_store_metric("h1", "m1", /* store */ NULL, 2 * SDB_INTERVAL_SECOND);
        sdb_plugin_store_metric("h1", "m2", /* store */ NULL, 1 * SDB_INTERVAL_SECOND);
-       sdb_plugin_store_metric("h2", "m1", /* store */ NULL, 1 * SDB_INTERVAL_SECOND);
+       sdb_plugin_store_metric("h2", "m1", /* store */ NULL, 5 * SDB_INTERVAL_SECOND);
+       sdb_plugin_store_metric("h2", "m1", /* store */ NULL, 10 * SDB_INTERVAL_SECOND);
 
        datum.type = SDB_TYPE_INTEGER;
        datum.data.integer = 42;
@@ -124,7 +125,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:10 +0000\", " \
+                               "\"update_interval\": \"5s\", \"backends\": [], " \
+                               "\"attributes\": [" \
+                                       "{\"name\": \"hostname\", \"value\": \"h2\", " \
+                                               "\"last_update\": \"1970-01-01 00:00:10 +0000\", " \
+                                               "\"update_interval\": \"5s\", \"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 +174,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\", " \
@@ -166,18 +220,19 @@ turndown(void)
                                        "{\"name\": \"k3\", \"value\": 42, " \
                                                "\"last_update\": \"1970-01-01 00:00:02 +0000\", " \
                                                "\"update_interval\": \"0s\", \"backends\": []}]}]}"
-#define METRIC_H12_M1_ARRAY \
-       "["METRIC_H1_M1"," \
+#define METRIC_H2_M1 \
        "{\"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\": [], " \
+                               "\"last_update\": \"1970-01-01 00:00:10 +0000\", " \
+                               "\"update_interval\": \"5s\", \"backends\": [], " \
                                "\"attributes\": [" \
                                        "{\"name\": \"hostname\", \"value\": \"h2\", " \
-                                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
-                                               "\"update_interval\": \"0s\", \"backends\": []}]}]}]"
+                                               "\"last_update\": \"1970-01-01 00:00:10 +0000\", " \
+                                               "\"update_interval\": \"5s\", \"backends\": []}]}]}"
+#define METRIC_H12_M1_ARRAY \
+       "["METRIC_H1_M1","METRIC_H2_M1"]"
 #define METRIC_H12_M12_LISTING \
        "[{\"name\": \"h1\", \"last_update\": \"1970-01-01 00:00:01 +0000\", " \
                        "\"update_interval\": \"0s\", \"backends\": [], " \
@@ -192,8 +247,8 @@ turndown(void)
                        "\"update_interval\": \"0s\", \"backends\": [], " \
                "\"metrics\": [" \
                        "{\"name\": \"m1\", \"timeseries\": false, " \
-                               "\"last_update\": \"1970-01-01 00:00:01 +0000\", " \
-                               "\"update_interval\": \"0s\", \"backends\": []}]}]"
+                               "\"last_update\": \"1970-01-01 00:00:10 +0000\", " \
+                               "\"update_interval\": \"5s\", \"backends\": []}]}]"
 
 typedef struct {
        sdb_conn_t conn;
@@ -371,6 +426,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 +495,27 @@ 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 = 10s", -1,
+               0, SDB_CONNECTION_DATA, 825, SDB_CONNECTION_LOOKUP, "["SERVICE_H2_S12"]",
+       },
+       {
+               /* stupid but valid ;-) */
+               SDB_CONNECTION_QUERY, "LOOKUP services MATCHING ANY host.host.metric.metric.interval = 5s", -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,
@@ -506,6 +590,16 @@ static struct {
                SDB_CONNECTION_QUERY, "LOOKUP metrics MATCHING name = 'm1'", -1,
                0, SDB_CONNECTION_DATA, 864, SDB_CONNECTION_LOOKUP, METRIC_H12_M1_ARRAY,
        },
+       {
+               /* stupid but valid ;-) */
+               SDB_CONNECTION_QUERY, "LOOKUP metrics MATCHING metric.metric.name = 'm1'", -1,
+               0, SDB_CONNECTION_DATA, 864, SDB_CONNECTION_LOOKUP, METRIC_H12_M1_ARRAY,
+       },
+       {
+               /* also stupid but valid ;-) */
+               SDB_CONNECTION_QUERY, "LOOKUP metrics MATCHING metric.metric.host.host.last_update = 3s", -1,
+               0, SDB_CONNECTION_DATA, 378, SDB_CONNECTION_LOOKUP, "["METRIC_H2_M1"]",
+       },
        {
                SDB_CONNECTION_LOOKUP, "\0\0\0\3""name = 'm1'", 16,
                0, SDB_CONNECTION_DATA, 864, SDB_CONNECTION_LOOKUP, METRIC_H12_M1_ARRAY,