SoW-2020-0002: Trace Hit Counters
[lttng-tools.git] / tests / unit / test_map_query.c
1 /*
2 * test_map_query.c
3 *
4 * Unit tests for the map query API.
5 *
6 * Copyright (C) 2021 Francis Deslauriers <francis.deslauriers@efficios.com>
7 *
8 * SPDX-License-Identifier: GPL-2.0-only
9 *
10 */
11
12 #include <assert.h>
13 #include <inttypes.h>
14 #include <stdio.h>
15 #include <string.h>
16 #include <unistd.h>
17
18 #include <tap/tap.h>
19
20 #include <lttng/map/map-query-internal.h>
21
22 #include <common/dynamic-buffer.h>
23 #include <common/buffer-view.h>
24 #include <common/payload.h>
25
26 #define NUM_TESTS 56
27
28 static
29 void test_map_query_key_filter_all_cpus_all_uids_64_no_sum(void)
30 {
31 int ret;
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;
37
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;
44
45 diag("Map query, all cpus, all uids, 64bits, no sum");
46 lttng_payload_init(&buffer);
47
48 query = lttng_map_query_create(config_cpu, config_buffer,
49 config_bitness);
50 ok(query, "Map query created succesfully");
51
52 status = lttng_map_query_add_key_filter(query, filter);
53 ok(status == LTTNG_MAP_QUERY_STATUS_OK, "Key filter created succesfully");
54
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");
58
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");
62
63 ret = lttng_map_query_serialize(query, &buffer);
64 ok(ret == 0, "Map query serialized");
65
66 {
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);
71 }
72
73 ok(query_from_payload, "Map query created from payload");
74
75 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
76 config_bitness, "Getting app bitness config from payload");
77
78 ok(lttng_map_query_get_config_buffer(query_from_payload) ==
79 config_buffer, "Buffer config");
80
81 ok(lttng_map_query_get_config_cpu(query_from_payload) ==
82 config_cpu, "CPU config");
83
84 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
85 config_bitness, "App bitness config");
86
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");
90
91 lttng_map_query_destroy(query);
92 lttng_map_query_destroy(query_from_payload);
93 lttng_payload_reset(&buffer);
94 }
95
96 static
97 void test_map_query_key_some_cpu_some_uid_summed_by_uid(void)
98 {
99 int ret;
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;
107
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;
114
115 diag("Map query some cpus, some uids, summed by uid");
116 lttng_payload_init(&buffer);
117
118 query = lttng_map_query_create(config_cpu, config_buffer,
119 config_bitness);
120 ok(query, "Map query created succesfully");
121
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");
124
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");
127
128 status = lttng_map_query_add_cpu(query, cpu1);
129 ok(status == LTTNG_MAP_QUERY_STATUS_OK, "Adding a cpu %d", cpu1);
130
131 status = lttng_map_query_add_uid(query, uid1);
132 ok(status == LTTNG_MAP_QUERY_STATUS_OK, "Adding a uid %d", uid1);
133
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");
137
138 ret = lttng_map_query_serialize(query, &buffer);
139 ok(ret == 0, "Map query serialized");
140
141 {
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);
146 }
147
148 ok(query_from_payload, "Map query created from payload");
149
150 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
151 config_bitness, "Getting app bitness config from payload");
152
153 ok(lttng_map_query_get_config_sum_by_cpu(query_from_payload) ==
154 sum_by_cpu, "Getting sum-by-cpu config from payload");
155
156 ok(lttng_map_query_get_config_sum_by_uid(query_from_payload) ==
157 sum_by_uid, "Getting sum-by-uid config from payload");
158
159 ok(lttng_map_query_get_config_buffer(query_from_payload) ==
160 config_buffer, "Buffer config");
161
162 ok(lttng_map_query_get_config_cpu(query_from_payload) ==
163 config_cpu, "CPU config");
164
165 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
166 config_bitness, "App bitness config");
167
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");
171
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");
175
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");
179
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");
183
184 lttng_map_query_destroy(query);
185 lttng_map_query_destroy(query_from_payload);
186 lttng_payload_reset(&buffer);
187 }
188
189 static
190 void test_map_query_key_one_cpu_some_pid_summed_by_cpu(void)
191 {
192 int ret;
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;
200
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;
207
208 diag("Map query one cpu, some pid, summed by cpu");
209 lttng_payload_init(&buffer);
210
211 query = lttng_map_query_create(config_cpu, config_buffer,
212 config_bitness);
213 ok(query, "Map query created succesfully");
214
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");
217
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");
220
221 status = lttng_map_query_add_cpu(query, cpu1);
222 ok(status == LTTNG_MAP_QUERY_STATUS_OK, "Adding a cpu %d", cpu1);
223
224 status = lttng_map_query_add_pid(query, pid1);
225 ok(status == LTTNG_MAP_QUERY_STATUS_OK, "Adding a pid %d", pid1);
226
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");
230
231 ret = lttng_map_query_serialize(query, &buffer);
232 ok(ret == 0, "Map query serialized");
233
234 {
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);
239 }
240
241 ok(query_from_payload, "Map query created from payload");
242
243 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
244 config_bitness, "Getting app bitness config from payload");
245
246 ok(lttng_map_query_get_config_sum_by_cpu(query_from_payload) ==
247 sum_by_cpu, "Getting sum-by-cpu config from payload");
248
249 ok(lttng_map_query_get_config_sum_by_pid(query_from_payload) ==
250 sum_by_pid, "Getting sum-by-pid config from payload");
251
252 ok(lttng_map_query_get_config_buffer(query_from_payload) ==
253 config_buffer, "Getting buffer config from payload");
254
255 ok(lttng_map_query_get_config_cpu(query_from_payload) ==
256 config_cpu, "Getting CPU config from payload");
257
258 ok(lttng_map_query_get_config_app_bitness(query_from_payload) ==
259 config_bitness, "App bitness config from payload");
260
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");
264
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");
268
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");
272
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");
276
277 lttng_map_query_destroy(query);
278 lttng_map_query_destroy(query_from_payload);
279 lttng_payload_reset(&buffer);
280 }
281
282 int main(int argc, const char *argv[])
283 {
284 plan_tests(NUM_TESTS);
285
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();
289
290 return exit_status();
291 }
This page took 0.036667 seconds and 5 git commands to generate.