xref: /dpdk/app/test/test_telemetry_data.c (revision 987d40a0)
1bd78cf69SLouise Kilheeney /* SPDX-License-Identifier: BSD-3-Clause
2bd78cf69SLouise Kilheeney  * Copyright 2020 Intel Corporation
3bd78cf69SLouise Kilheeney  */
4bd78cf69SLouise Kilheeney 
5bd78cf69SLouise Kilheeney #include <string.h>
6bd78cf69SLouise Kilheeney #include <sys/socket.h>
7*987d40a0SJie Zhou #ifndef RTE_EXEC_ENV_WINDOWS
8bd78cf69SLouise Kilheeney #include <sys/un.h>
9*987d40a0SJie Zhou #endif
10bd78cf69SLouise Kilheeney #include <unistd.h>
11bd78cf69SLouise Kilheeney #include <limits.h>
12bd78cf69SLouise Kilheeney 
13bd78cf69SLouise Kilheeney #include <rte_eal.h>
14bd78cf69SLouise Kilheeney #include <rte_common.h>
15bd78cf69SLouise Kilheeney #include <rte_telemetry.h>
16bd78cf69SLouise Kilheeney #include <rte_string_fns.h>
17bd78cf69SLouise Kilheeney 
18bd78cf69SLouise Kilheeney #include "test.h"
19bd78cf69SLouise Kilheeney #include "telemetry_data.h"
20bd78cf69SLouise Kilheeney 
21bd78cf69SLouise Kilheeney #define TELEMETRY_VERSION "v2"
22bd78cf69SLouise Kilheeney #define REQUEST_CMD "/test"
23bd78cf69SLouise Kilheeney #define BUF_SIZE 1024
24bd78cf69SLouise Kilheeney #define TEST_OUTPUT(exp) test_output(__func__, exp)
25bd78cf69SLouise Kilheeney 
26bd78cf69SLouise Kilheeney static struct rte_tel_data response_data;
27bd78cf69SLouise Kilheeney static int sock;
28bd78cf69SLouise Kilheeney 
29bd78cf69SLouise Kilheeney /*
30bd78cf69SLouise Kilheeney  * This function is the callback registered with Telemetry to be used when
31bd78cf69SLouise Kilheeney  * the /test command is requested. This callback returns the global data built
32bd78cf69SLouise Kilheeney  * up by the individual test cases.
33bd78cf69SLouise Kilheeney  */
34bd78cf69SLouise Kilheeney static int
test_cb(const char * cmd __rte_unused,const char * params __rte_unused,struct rte_tel_data * d)35bd78cf69SLouise Kilheeney test_cb(const char *cmd __rte_unused, const char *params __rte_unused,
36bd78cf69SLouise Kilheeney 		struct rte_tel_data *d)
37bd78cf69SLouise Kilheeney {
38bd78cf69SLouise Kilheeney 	*d = response_data;
39bd78cf69SLouise Kilheeney 	return 0;
40bd78cf69SLouise Kilheeney }
41bd78cf69SLouise Kilheeney 
42bd78cf69SLouise Kilheeney /*
43bd78cf69SLouise Kilheeney  * This function is called by each test case function. It communicates with
44bd78cf69SLouise Kilheeney  * the telemetry socket by requesting the /test command, and reading the
45bd78cf69SLouise Kilheeney  * response. The expected response is passed in by the test case function,
46bd78cf69SLouise Kilheeney  * and is compared to the actual response received from Telemetry.
47bd78cf69SLouise Kilheeney  */
48bd78cf69SLouise Kilheeney static int
test_output(const char * func_name,const char * expected)49bd78cf69SLouise Kilheeney test_output(const char *func_name, const char *expected)
50bd78cf69SLouise Kilheeney {
51bd78cf69SLouise Kilheeney 	int bytes;
52bd78cf69SLouise Kilheeney 	char buf[BUF_SIZE * 16];
53bd78cf69SLouise Kilheeney 	if (write(sock, REQUEST_CMD, strlen(REQUEST_CMD)) < 0) {
54bd78cf69SLouise Kilheeney 		printf("%s: Error with socket write - %s\n", __func__,
55bd78cf69SLouise Kilheeney 				strerror(errno));
56bd78cf69SLouise Kilheeney 		return -1;
57bd78cf69SLouise Kilheeney 	}
58bd78cf69SLouise Kilheeney 	bytes = read(sock, buf, sizeof(buf) - 1);
59bd78cf69SLouise Kilheeney 	if (bytes < 0) {
60bd78cf69SLouise Kilheeney 		printf("%s: Error with socket read - %s\n", __func__,
61bd78cf69SLouise Kilheeney 				strerror(errno));
62bd78cf69SLouise Kilheeney 		return -1;
63bd78cf69SLouise Kilheeney 	}
64bd78cf69SLouise Kilheeney 	buf[bytes] = '\0';
65bd78cf69SLouise Kilheeney 	printf("%s: buf = '%s', expected = '%s'\n", func_name, buf, expected);
66bd78cf69SLouise Kilheeney 	return strncmp(expected, buf, sizeof(buf));
67bd78cf69SLouise Kilheeney }
68bd78cf69SLouise Kilheeney 
69bd78cf69SLouise Kilheeney static int
test_dict_with_array_int_values(void)70bd78cf69SLouise Kilheeney test_dict_with_array_int_values(void)
71bd78cf69SLouise Kilheeney {
72bd78cf69SLouise Kilheeney 	int i;
73bd78cf69SLouise Kilheeney 
74bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
75bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_INT_VAL);
76bd78cf69SLouise Kilheeney 
77bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
78bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_INT_VAL);
79bd78cf69SLouise Kilheeney 
80bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
81bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
82bd78cf69SLouise Kilheeney 
83bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++) {
84bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_int(child_data, i);
85bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_int(child_data2, i);
86bd78cf69SLouise Kilheeney 	}
87bd78cf69SLouise Kilheeney 
88bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_0",
89bd78cf69SLouise Kilheeney 	 child_data, 0);
90bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_1",
91bd78cf69SLouise Kilheeney 	 child_data2, 0);
92bd78cf69SLouise Kilheeney 
93bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":[0,1,2,3,4],"
94bd78cf69SLouise Kilheeney 			"\"dict_1\":[0,1,2,3,4]}}");
95bd78cf69SLouise Kilheeney }
96bd78cf69SLouise Kilheeney 
97bd78cf69SLouise Kilheeney static int
test_array_with_array_int_values(void)98bd78cf69SLouise Kilheeney test_array_with_array_int_values(void)
99bd78cf69SLouise Kilheeney {
100bd78cf69SLouise Kilheeney 	int i;
101bd78cf69SLouise Kilheeney 
102bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
103bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_INT_VAL);
104bd78cf69SLouise Kilheeney 
105bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
106bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_INT_VAL);
107bd78cf69SLouise Kilheeney 
108bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
109bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER);
110bd78cf69SLouise Kilheeney 
111bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++) {
112bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_int(child_data, i);
113bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_int(child_data2, i);
114bd78cf69SLouise Kilheeney 	}
115bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data, 0);
116bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data2, 0);
117bd78cf69SLouise Kilheeney 
118bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[[0,1,2,3,4],[0,1,2,3,4]]}");
119bd78cf69SLouise Kilheeney }
120bd78cf69SLouise Kilheeney 
121bd78cf69SLouise Kilheeney static int
test_case_array_int(void)122bd78cf69SLouise Kilheeney test_case_array_int(void)
123bd78cf69SLouise Kilheeney {
124bd78cf69SLouise Kilheeney 	int i;
125bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
126bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_INT_VAL);
127bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++)
128bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_int(&response_data, i);
129bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[0,1,2,3,4]}");
130bd78cf69SLouise Kilheeney }
131bd78cf69SLouise Kilheeney 
132bd78cf69SLouise Kilheeney static int
test_case_add_dict_int(void)133bd78cf69SLouise Kilheeney test_case_add_dict_int(void)
134bd78cf69SLouise Kilheeney {
135bd78cf69SLouise Kilheeney 	int i = 0;
136bd78cf69SLouise Kilheeney 	char name_of_value[8];
137bd78cf69SLouise Kilheeney 
138bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
139bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
140bd78cf69SLouise Kilheeney 
141bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++) {
142bd78cf69SLouise Kilheeney 		sprintf(name_of_value, "dict_%d", i);
143bd78cf69SLouise Kilheeney 		rte_tel_data_add_dict_int(&response_data, name_of_value, i);
144bd78cf69SLouise Kilheeney 	}
145bd78cf69SLouise Kilheeney 
146bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":0,\"dict_1\":1,\"dict_2\":2,"
147bd78cf69SLouise Kilheeney 			"\"dict_3\":3,\"dict_4\":4}}");
148bd78cf69SLouise Kilheeney }
149bd78cf69SLouise Kilheeney 
150bd78cf69SLouise Kilheeney static int
test_case_array_string(void)151bd78cf69SLouise Kilheeney test_case_array_string(void)
152bd78cf69SLouise Kilheeney {
153bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
154bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_STRING_VAL);
155bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(&response_data, "aaaa");
156bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(&response_data, "bbbb");
157bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(&response_data, "cccc");
158bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(&response_data, "dddd");
159bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(&response_data, "eeee");
160bd78cf69SLouise Kilheeney 
161bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[\"aaaa\",\"bbbb\",\"cccc\",\"dddd\","
162bd78cf69SLouise Kilheeney 			"\"eeee\"]}");
163bd78cf69SLouise Kilheeney }
164bd78cf69SLouise Kilheeney 
165bd78cf69SLouise Kilheeney static int
test_case_add_dict_string(void)166bd78cf69SLouise Kilheeney test_case_add_dict_string(void)
167bd78cf69SLouise Kilheeney {
168bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
169bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
170bd78cf69SLouise Kilheeney 
171bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_string(&response_data, "dict_0", "aaaa");
172bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_string(&response_data, "dict_1", "bbbb");
173bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_string(&response_data, "dict_2", "cccc");
174bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_string(&response_data, "dict_3", "dddd");
175bd78cf69SLouise Kilheeney 
176bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":\"aaaa\",\"dict_1\":"
177bd78cf69SLouise Kilheeney 			"\"bbbb\",\"dict_2\":\"cccc\",\"dict_3\":\"dddd\"}}");
178bd78cf69SLouise Kilheeney }
179bd78cf69SLouise Kilheeney 
180bd78cf69SLouise Kilheeney 
181bd78cf69SLouise Kilheeney static int
test_dict_with_array_string_values(void)182bd78cf69SLouise Kilheeney test_dict_with_array_string_values(void)
183bd78cf69SLouise Kilheeney {
184bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
185bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL);
186bd78cf69SLouise Kilheeney 
187bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
188bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL);
189bd78cf69SLouise Kilheeney 
190bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
191bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
192bd78cf69SLouise Kilheeney 
193bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(child_data, "aaaa");
194bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(child_data2, "bbbb");
195bd78cf69SLouise Kilheeney 
196bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_0",
197bd78cf69SLouise Kilheeney 	 child_data, 0);
198bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_1",
199bd78cf69SLouise Kilheeney 	 child_data2, 0);
200bd78cf69SLouise Kilheeney 
201bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":[\"aaaa\"],\"dict_1\":"
202bd78cf69SLouise Kilheeney 			"[\"bbbb\"]}}");
203bd78cf69SLouise Kilheeney }
204bd78cf69SLouise Kilheeney 
205bd78cf69SLouise Kilheeney static int
test_dict_with_dict_values(void)206d2671e64SRadu Nicolau test_dict_with_dict_values(void)
207d2671e64SRadu Nicolau {
208d2671e64SRadu Nicolau 	struct rte_tel_data *dict_of_dicts = rte_tel_data_alloc();
209d2671e64SRadu Nicolau 	rte_tel_data_start_dict(dict_of_dicts);
210d2671e64SRadu Nicolau 
211d2671e64SRadu Nicolau 	struct rte_tel_data *child_data = rte_tel_data_alloc();
212d2671e64SRadu Nicolau 	rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL);
213d2671e64SRadu Nicolau 
214d2671e64SRadu Nicolau 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
215d2671e64SRadu Nicolau 	rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL);
216d2671e64SRadu Nicolau 
217d2671e64SRadu Nicolau 	memset(&response_data, 0, sizeof(response_data));
218d2671e64SRadu Nicolau 	rte_tel_data_start_dict(&response_data);
219d2671e64SRadu Nicolau 
220d2671e64SRadu Nicolau 	rte_tel_data_add_array_string(child_data, "aaaa");
221d2671e64SRadu Nicolau 	rte_tel_data_add_array_string(child_data2, "bbbb");
222d2671e64SRadu Nicolau 	rte_tel_data_add_dict_container(dict_of_dicts, "dict_0",
223d2671e64SRadu Nicolau 			child_data, 0);
224d2671e64SRadu Nicolau 	rte_tel_data_add_dict_container(dict_of_dicts, "dict_1",
225d2671e64SRadu Nicolau 			child_data2, 0);
226d2671e64SRadu Nicolau 	rte_tel_data_add_dict_container(&response_data, "dict_of_dicts",
227d2671e64SRadu Nicolau 			dict_of_dicts, 0);
228d2671e64SRadu Nicolau 
229d2671e64SRadu Nicolau 	return TEST_OUTPUT("{\"/test\":{\"dict_of_dicts\":{\"dict_0\":"
230d2671e64SRadu Nicolau 			"[\"aaaa\"],\"dict_1\":[\"bbbb\"]}}}");
231d2671e64SRadu Nicolau }
232d2671e64SRadu Nicolau 
233d2671e64SRadu Nicolau static int
test_array_with_array_string_values(void)234bd78cf69SLouise Kilheeney test_array_with_array_string_values(void)
235bd78cf69SLouise Kilheeney {
236bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
237bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_STRING_VAL);
238bd78cf69SLouise Kilheeney 
239bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
240bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_STRING_VAL);
241bd78cf69SLouise Kilheeney 
242bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
243bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER);
244bd78cf69SLouise Kilheeney 
245bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(child_data, "aaaa");
246bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_string(child_data2, "bbbb");
247bd78cf69SLouise Kilheeney 
248bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data, 0);
249bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data2, 0);
250bd78cf69SLouise Kilheeney 
251bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[[\"aaaa\"],[\"bbbb\"]]}");
252bd78cf69SLouise Kilheeney }
253bd78cf69SLouise Kilheeney 
254bd78cf69SLouise Kilheeney static int
test_case_array_u64(void)255bd78cf69SLouise Kilheeney test_case_array_u64(void)
256bd78cf69SLouise Kilheeney {
257bd78cf69SLouise Kilheeney 	int i;
258bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
259bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_U64_VAL);
260bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++)
261bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_u64(&response_data, i);
262bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[0,1,2,3,4]}");
263bd78cf69SLouise Kilheeney }
264bd78cf69SLouise Kilheeney 
265bd78cf69SLouise Kilheeney static int
test_case_add_dict_u64(void)266bd78cf69SLouise Kilheeney test_case_add_dict_u64(void)
267bd78cf69SLouise Kilheeney {
268bd78cf69SLouise Kilheeney 	int i = 0;
269bd78cf69SLouise Kilheeney 	char name_of_value[8];
270bd78cf69SLouise Kilheeney 
271bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
272bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
273bd78cf69SLouise Kilheeney 
274bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++) {
275bd78cf69SLouise Kilheeney 		sprintf(name_of_value, "dict_%d", i);
276bd78cf69SLouise Kilheeney 		rte_tel_data_add_dict_u64(&response_data, name_of_value, i);
277bd78cf69SLouise Kilheeney 	}
278bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":0,\"dict_1\":1,\"dict_2\":2,"
279bd78cf69SLouise Kilheeney 			"\"dict_3\":3,\"dict_4\":4}}");
280bd78cf69SLouise Kilheeney }
281bd78cf69SLouise Kilheeney 
282bd78cf69SLouise Kilheeney static int
test_dict_with_array_u64_values(void)283bd78cf69SLouise Kilheeney test_dict_with_array_u64_values(void)
284bd78cf69SLouise Kilheeney {
285bd78cf69SLouise Kilheeney 	int i;
286bd78cf69SLouise Kilheeney 
287bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
288bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_U64_VAL);
289bd78cf69SLouise Kilheeney 
290bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
291bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_U64_VAL);
292bd78cf69SLouise Kilheeney 
293bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
294bd78cf69SLouise Kilheeney 	rte_tel_data_start_dict(&response_data);
295bd78cf69SLouise Kilheeney 
296bd78cf69SLouise Kilheeney 	for (i = 0; i < 10; i++) {
297bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_u64(child_data, i);
298bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_u64(child_data2, i);
299bd78cf69SLouise Kilheeney 	}
300bd78cf69SLouise Kilheeney 
301bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_0",
302bd78cf69SLouise Kilheeney 	 child_data, 0);
303bd78cf69SLouise Kilheeney 	rte_tel_data_add_dict_container(&response_data, "dict_1",
304bd78cf69SLouise Kilheeney 	 child_data2, 0);
305bd78cf69SLouise Kilheeney 
306bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":{\"dict_0\":[0,1,2,3,4,5,6,7,8,9],"
307bd78cf69SLouise Kilheeney 			"\"dict_1\":[0,1,2,3,4,5,6,7,8,9]}}");
308bd78cf69SLouise Kilheeney }
309bd78cf69SLouise Kilheeney 
310bd78cf69SLouise Kilheeney static int
test_array_with_array_u64_values(void)311bd78cf69SLouise Kilheeney test_array_with_array_u64_values(void)
312bd78cf69SLouise Kilheeney {
313bd78cf69SLouise Kilheeney 	int i;
314bd78cf69SLouise Kilheeney 
315bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data = rte_tel_data_alloc();
316bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data, RTE_TEL_U64_VAL);
317bd78cf69SLouise Kilheeney 
318bd78cf69SLouise Kilheeney 	struct rte_tel_data *child_data2 = rte_tel_data_alloc();
319bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(child_data2, RTE_TEL_U64_VAL);
320bd78cf69SLouise Kilheeney 
321bd78cf69SLouise Kilheeney 	memset(&response_data, 0, sizeof(response_data));
322bd78cf69SLouise Kilheeney 	rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER);
323bd78cf69SLouise Kilheeney 
324bd78cf69SLouise Kilheeney 	for (i = 0; i < 5; i++) {
325bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_u64(child_data, i);
326bd78cf69SLouise Kilheeney 		rte_tel_data_add_array_u64(child_data2, i);
327bd78cf69SLouise Kilheeney 	}
328bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data, 0);
329bd78cf69SLouise Kilheeney 	rte_tel_data_add_array_container(&response_data, child_data2, 0);
330bd78cf69SLouise Kilheeney 
331bd78cf69SLouise Kilheeney 	return TEST_OUTPUT("{\"/test\":[[0,1,2,3,4],[0,1,2,3,4]]}");
332bd78cf69SLouise Kilheeney }
333bd78cf69SLouise Kilheeney 
334bd78cf69SLouise Kilheeney static int
connect_to_socket(void)335bd78cf69SLouise Kilheeney connect_to_socket(void)
336bd78cf69SLouise Kilheeney {
337bd78cf69SLouise Kilheeney 	char buf[BUF_SIZE];
338bd78cf69SLouise Kilheeney 	int sock, bytes;
339bd78cf69SLouise Kilheeney 	struct sockaddr_un telem_addr;
340bd78cf69SLouise Kilheeney 
341bd78cf69SLouise Kilheeney 	sock = socket(AF_UNIX, SOCK_SEQPACKET, 0);
342bd78cf69SLouise Kilheeney 	if (sock < 0) {
343bd78cf69SLouise Kilheeney 		printf("\n%s: Error creating socket: %s\n", __func__,
344bd78cf69SLouise Kilheeney 				strerror(errno));
345bd78cf69SLouise Kilheeney 		return -1;
346bd78cf69SLouise Kilheeney 	}
347bd78cf69SLouise Kilheeney 	telem_addr.sun_family = AF_UNIX;
348bd78cf69SLouise Kilheeney 	snprintf(telem_addr.sun_path, sizeof(telem_addr.sun_path),
349bd78cf69SLouise Kilheeney 			"%s/dpdk_telemetry.%s",	rte_eal_get_runtime_dir(),
350bd78cf69SLouise Kilheeney 			TELEMETRY_VERSION);
351bd78cf69SLouise Kilheeney 	if (connect(sock, (struct sockaddr *) &telem_addr,
3528b4a23f1SCiara Power 			sizeof(telem_addr)) < 0) {
353bd78cf69SLouise Kilheeney 		printf("\n%s: Error connecting to socket: %s\n", __func__,
354bd78cf69SLouise Kilheeney 				strerror(errno));
3558b4a23f1SCiara Power 		close(sock);
3568b4a23f1SCiara Power 		return -1;
3578b4a23f1SCiara Power 	}
358bd78cf69SLouise Kilheeney 
359bd78cf69SLouise Kilheeney 	bytes = read(sock, buf, sizeof(buf) - 1);
360bd78cf69SLouise Kilheeney 	if (bytes < 0) {
361bd78cf69SLouise Kilheeney 		printf("%s: Error with socket read - %s\n", __func__,
362bd78cf69SLouise Kilheeney 				strerror(errno));
36389ce9f09SCiara Power 		close(sock);
364bd78cf69SLouise Kilheeney 		return -1;
365bd78cf69SLouise Kilheeney 	}
366bd78cf69SLouise Kilheeney 	buf[bytes] = '\0';
367bd78cf69SLouise Kilheeney 	printf("\n%s: %s\n", __func__, buf);
368bd78cf69SLouise Kilheeney 	return sock;
369bd78cf69SLouise Kilheeney }
370bd78cf69SLouise Kilheeney 
371bd78cf69SLouise Kilheeney static int
test_telemetry_data(void)372bd78cf69SLouise Kilheeney test_telemetry_data(void)
373bd78cf69SLouise Kilheeney {
374bd78cf69SLouise Kilheeney 	typedef int (*test_case)(void);
375bd78cf69SLouise Kilheeney 	unsigned int i = 0;
376bd78cf69SLouise Kilheeney 
377bd78cf69SLouise Kilheeney 	sock = connect_to_socket();
378bd78cf69SLouise Kilheeney 	if (sock <= 0)
379bd78cf69SLouise Kilheeney 		return -1;
380bd78cf69SLouise Kilheeney 
381bd78cf69SLouise Kilheeney 	test_case test_cases[] = {test_case_array_string,
382bd78cf69SLouise Kilheeney 			test_case_array_int, test_case_array_u64,
383bd78cf69SLouise Kilheeney 			test_case_add_dict_int, test_case_add_dict_u64,
384bd78cf69SLouise Kilheeney 			test_case_add_dict_string,
385bd78cf69SLouise Kilheeney 			test_dict_with_array_int_values,
386bd78cf69SLouise Kilheeney 			test_dict_with_array_u64_values,
387bd78cf69SLouise Kilheeney 			test_dict_with_array_string_values,
388d2671e64SRadu Nicolau 			test_dict_with_dict_values,
389bd78cf69SLouise Kilheeney 			test_array_with_array_int_values,
390bd78cf69SLouise Kilheeney 			test_array_with_array_u64_values,
391bd78cf69SLouise Kilheeney 			test_array_with_array_string_values };
392bd78cf69SLouise Kilheeney 
393bd78cf69SLouise Kilheeney 	rte_telemetry_register_cmd(REQUEST_CMD, test_cb, "Test");
394bd78cf69SLouise Kilheeney 	for (i = 0; i < RTE_DIM(test_cases); i++) {
395bd78cf69SLouise Kilheeney 		if (test_cases[i]() != 0) {
396bd78cf69SLouise Kilheeney 			close(sock);
397bd78cf69SLouise Kilheeney 			return -1;
398bd78cf69SLouise Kilheeney 		}
399bd78cf69SLouise Kilheeney 	}
400bd78cf69SLouise Kilheeney 	close(sock);
401bd78cf69SLouise Kilheeney 	return 0;
402bd78cf69SLouise Kilheeney }
403bd78cf69SLouise Kilheeney 
404bd78cf69SLouise Kilheeney REGISTER_TEST_COMMAND(telemetry_data_autotest, test_telemetry_data);
405