4 * Unit tests for the map query API.
6 * Copyright (C) 2021 Francis Deslauriers <francis.deslauriers@efficios.com>
8 * SPDX-License-Identifier: GPL-2.0-only
20 #include <lttng/map/map-query-internal.h>
22 #include <common/dynamic-buffer.h>
23 #include <common/buffer-view.h>
24 #include <common/payload.h>
29 void test_map_query_key_filter_all_cpus_all_uids_64_no_sum(void)
32 struct lttng_payload buffer
;
33 struct lttng_map_query
*query
, *query_from_payload
= NULL
;
34 const char *filter
= "pitarifique_key";
35 const char *filter_from_payload
;
36 enum lttng_map_query_status status
;
38 enum lttng_map_query_config_cpu config_cpu
=
39 LTTNG_MAP_QUERY_CONFIG_CPU_ALL
;
40 enum lttng_map_query_config_buffer config_buffer
=
41 LTTNG_MAP_QUERY_CONFIG_BUFFER_UST_UID_ALL
;
42 enum lttng_map_query_config_app_bitness config_bitness
=
43 LTTNG_MAP_QUERY_CONFIG_APP_BITNESS_ALL
;
45 diag("Map query, all cpus, all uids, 64bits, no sum");
46 lttng_payload_init(&buffer
);
48 query
= lttng_map_query_create(config_cpu
, config_buffer
,
50 ok(query
, "Map query created succesfully");
52 status
= lttng_map_query_add_key_filter(query
, filter
);
53 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Key filter created succesfully");
55 /* Add a cpu manually with a _CONFIG_CPU_ALL should fail. */
56 status
= lttng_map_query_add_cpu(query
, 121);
57 ok(status
== LTTNG_MAP_QUERY_STATUS_INVALID
, "Adding a cpu failed as expected");
59 /* Add a pid manually with a _CONFIG_BUFFER_UST_UID_ should fail. */
60 status
= lttng_map_query_add_pid(query
, 931214);
61 ok(status
== LTTNG_MAP_QUERY_STATUS_INVALID
, "Adding a PID of uid map query failed as expected");
63 ret
= lttng_map_query_serialize(query
, &buffer
);
64 ok(ret
== 0, "Map query serialized");
67 struct lttng_payload_view view
=
68 lttng_payload_view_from_payload(&buffer
, 0, -1);
69 (void) lttng_map_query_create_from_payload(
70 &view
, &query_from_payload
);
73 ok(query_from_payload
, "Map query created from payload");
75 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
76 config_bitness
, "Getting app bitness config from payload");
78 ok(lttng_map_query_get_config_buffer(query_from_payload
) ==
79 config_buffer
, "Buffer config");
81 ok(lttng_map_query_get_config_cpu(query_from_payload
) ==
82 config_cpu
, "CPU config");
84 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
85 config_bitness
, "App bitness config");
87 status
= lttng_map_query_get_key_filter(query_from_payload
, &filter_from_payload
);
88 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Key filter");
89 ok(strcmp(filter_from_payload
, filter
) == 0, "Key filter");
91 lttng_map_query_destroy(query
);
92 lttng_map_query_destroy(query_from_payload
);
93 lttng_payload_reset(&buffer
);
97 void test_map_query_key_some_cpu_some_uid_summed_by_uid(void)
100 struct lttng_payload buffer
;
101 struct lttng_map_query
*query
, *query_from_payload
= NULL
;
102 unsigned int cpu_count
, uid_count
;
103 bool sum_by_cpu
= false, sum_by_uid
= true;
104 uid_t uid1
= 12131, uid1_from_payload
;
105 int cpu1
= 494581, cpu1_from_payload
;
106 enum lttng_map_query_status status
;
108 enum lttng_map_query_config_cpu config_cpu
=
109 LTTNG_MAP_QUERY_CONFIG_CPU_SUBSET
;
110 enum lttng_map_query_config_buffer config_buffer
=
111 LTTNG_MAP_QUERY_CONFIG_BUFFER_UST_UID_SUBSET
;
112 enum lttng_map_query_config_app_bitness config_bitness
=
113 LTTNG_MAP_QUERY_CONFIG_APP_BITNESS_ALL
;
115 diag("Map query some cpus, some uids, summed by uid");
116 lttng_payload_init(&buffer
);
118 query
= lttng_map_query_create(config_cpu
, config_buffer
,
120 ok(query
, "Map query created succesfully");
122 status
= lttng_map_query_set_sum_by_cpu(query
, sum_by_cpu
);
123 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Setting sum-by-cpu option");
125 status
= lttng_map_query_set_sum_by_uid(query
, sum_by_uid
);
126 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Setting sum-by-uid option");
128 status
= lttng_map_query_add_cpu(query
, cpu1
);
129 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Adding a cpu %d", cpu1
);
131 status
= lttng_map_query_add_uid(query
, uid1
);
132 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Adding a uid %d", uid1
);
134 /* Add a pid manually with a _CONFIG_BUFFER_UST_UID_ should fail. */
135 status
= lttng_map_query_add_pid(query
, 931214);
136 ok(status
== LTTNG_MAP_QUERY_STATUS_INVALID
, "Adding a PID of uid map query failed as expected");
138 ret
= lttng_map_query_serialize(query
, &buffer
);
139 ok(ret
== 0, "Map query serialized");
142 struct lttng_payload_view view
=
143 lttng_payload_view_from_payload(&buffer
, 0, -1);
144 (void) lttng_map_query_create_from_payload(
145 &view
, &query_from_payload
);
148 ok(query_from_payload
, "Map query created from payload");
150 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
151 config_bitness
, "Getting app bitness config from payload");
153 ok(lttng_map_query_get_config_sum_by_cpu(query_from_payload
) ==
154 sum_by_cpu
, "Getting sum-by-cpu config from payload");
156 ok(lttng_map_query_get_config_sum_by_uid(query_from_payload
) ==
157 sum_by_uid
, "Getting sum-by-uid config from payload");
159 ok(lttng_map_query_get_config_buffer(query_from_payload
) ==
160 config_buffer
, "Buffer config");
162 ok(lttng_map_query_get_config_cpu(query_from_payload
) ==
163 config_cpu
, "CPU config");
165 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
166 config_bitness
, "App bitness config");
168 status
= lttng_map_query_get_cpu_count(query
, &cpu_count
);
169 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting cpu count");
170 ok(cpu_count
== 1, "Getting cpu count");
172 status
= lttng_map_query_get_cpu_at_index(query
, 0, &cpu1_from_payload
);
173 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting cpu count");
174 ok(cpu1_from_payload
== cpu1
, "Getting cpu value");
176 status
= lttng_map_query_get_uid_count(query
, &uid_count
);
177 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting uid count");
178 ok(uid_count
== 1, "Getting uid count");
180 status
= lttng_map_query_get_uid_at_index(query
, 0, &uid1_from_payload
);
181 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting uid count");
182 ok(uid1_from_payload
== uid1
, "Getting uid value");
184 lttng_map_query_destroy(query
);
185 lttng_map_query_destroy(query_from_payload
);
186 lttng_payload_reset(&buffer
);
190 void test_map_query_key_one_cpu_some_pid_summed_by_cpu(void)
193 struct lttng_payload buffer
;
194 struct lttng_map_query
*query
, *query_from_payload
= NULL
;
195 unsigned int cpu_count
, pid_count
;
196 pid_t pid1
= 12131, pid1_from_payload
;
197 int cpu1
= 494581, cpu1_from_payload
;
198 bool sum_by_cpu
= true, sum_by_pid
= false;
199 enum lttng_map_query_status status
;
201 enum lttng_map_query_config_cpu config_cpu
=
202 LTTNG_MAP_QUERY_CONFIG_CPU_SUBSET
;
203 enum lttng_map_query_config_buffer config_buffer
=
204 LTTNG_MAP_QUERY_CONFIG_BUFFER_UST_PID_SUBSET
;
205 enum lttng_map_query_config_app_bitness config_bitness
=
206 LTTNG_MAP_QUERY_CONFIG_APP_BITNESS_ALL
;
208 diag("Map query one cpu, some pid, summed by cpu");
209 lttng_payload_init(&buffer
);
211 query
= lttng_map_query_create(config_cpu
, config_buffer
,
213 ok(query
, "Map query created succesfully");
215 status
= lttng_map_query_set_sum_by_cpu(query
, sum_by_cpu
);
216 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Setting sum-by-cpu option");
218 status
= lttng_map_query_set_sum_by_pid(query
, sum_by_pid
);
219 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Setting sum-by-pid option");
221 status
= lttng_map_query_add_cpu(query
, cpu1
);
222 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Adding a cpu %d", cpu1
);
224 status
= lttng_map_query_add_pid(query
, pid1
);
225 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Adding a pid %d", pid1
);
227 /* Add a pid manually with a _CONFIG_BUFFER_UST_PID_ should fail. */
228 status
= lttng_map_query_add_uid(query
, 931214);
229 ok(status
== LTTNG_MAP_QUERY_STATUS_INVALID
, "Adding a UID of pid map query failed as expected");
231 ret
= lttng_map_query_serialize(query
, &buffer
);
232 ok(ret
== 0, "Map query serialized");
235 struct lttng_payload_view view
=
236 lttng_payload_view_from_payload(&buffer
, 0, -1);
237 (void) lttng_map_query_create_from_payload(
238 &view
, &query_from_payload
);
241 ok(query_from_payload
, "Map query created from payload");
243 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
244 config_bitness
, "Getting app bitness config from payload");
246 ok(lttng_map_query_get_config_sum_by_cpu(query_from_payload
) ==
247 sum_by_cpu
, "Getting sum-by-cpu config from payload");
249 ok(lttng_map_query_get_config_sum_by_pid(query_from_payload
) ==
250 sum_by_pid
, "Getting sum-by-pid config from payload");
252 ok(lttng_map_query_get_config_buffer(query_from_payload
) ==
253 config_buffer
, "Getting buffer config from payload");
255 ok(lttng_map_query_get_config_cpu(query_from_payload
) ==
256 config_cpu
, "Getting CPU config from payload");
258 ok(lttng_map_query_get_config_app_bitness(query_from_payload
) ==
259 config_bitness
, "App bitness config from payload");
261 status
= lttng_map_query_get_cpu_count(query
, &cpu_count
);
262 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting cpu count from payload");
263 ok(cpu_count
== 1, "Getting cpu count from payload");
265 status
= lttng_map_query_get_cpu_at_index(query
, 0, &cpu1_from_payload
);
266 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting cpu count from payload");
267 ok(cpu1_from_payload
== cpu1
, "Getting cpu value from payload");
269 status
= lttng_map_query_get_pid_count(query
, &pid_count
);
270 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting pid count from payload");
271 ok(pid_count
== 1, "Getting pid count from payload");
273 status
= lttng_map_query_get_pid_at_index(query
, 0, &pid1_from_payload
);
274 ok(status
== LTTNG_MAP_QUERY_STATUS_OK
, "Getting pid count from payload");
275 ok(pid1_from_payload
== pid1
, "Getting pid value from payload");
277 lttng_map_query_destroy(query
);
278 lttng_map_query_destroy(query_from_payload
);
279 lttng_payload_reset(&buffer
);
282 int main(int argc
, const char *argv
[])
284 plan_tests(NUM_TESTS
);
286 test_map_query_key_filter_all_cpus_all_uids_64_no_sum();
287 test_map_query_key_some_cpu_some_uid_summed_by_uid();
288 test_map_query_key_one_cpu_some_pid_summed_by_cpu();
290 return exit_status();