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