xref: /f-stack/dpdk/app/test/test_cmdline_lib.c (revision 2d9fd380)
14418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
24418919fSjohnjiang  * Copyright(c) 2010-2014 Intel Corporation
34418919fSjohnjiang  */
44418919fSjohnjiang 
54418919fSjohnjiang #include <string.h>
64418919fSjohnjiang #include <stdio.h>
74418919fSjohnjiang #include <stdint.h>
84418919fSjohnjiang #include <stdarg.h>
94418919fSjohnjiang #include <stdlib.h>
104418919fSjohnjiang #include <errno.h>
114418919fSjohnjiang #include <termios.h>
124418919fSjohnjiang #include <ctype.h>
134418919fSjohnjiang #include <sys/queue.h>
144418919fSjohnjiang 
15*2d9fd380Sjfb8856606 #include <rte_common.h>
16*2d9fd380Sjfb8856606 
174418919fSjohnjiang #include <cmdline_vt100.h>
184418919fSjohnjiang #include <cmdline_rdline.h>
194418919fSjohnjiang #include <cmdline_parse.h>
204418919fSjohnjiang #include <cmdline_socket.h>
214418919fSjohnjiang #include <cmdline.h>
224418919fSjohnjiang 
234418919fSjohnjiang #include "test_cmdline.h"
244418919fSjohnjiang 
254418919fSjohnjiang /****************************************************************/
264418919fSjohnjiang /* static functions required for some tests */
274418919fSjohnjiang static void
valid_buffer(__rte_unused struct rdline * rdl,__rte_unused const char * buf,__rte_unused unsigned int size)28*2d9fd380Sjfb8856606 valid_buffer(__rte_unused struct rdline *rdl,
29*2d9fd380Sjfb8856606 			__rte_unused const char *buf,
30*2d9fd380Sjfb8856606 			__rte_unused unsigned int size)
314418919fSjohnjiang {
324418919fSjohnjiang }
334418919fSjohnjiang 
344418919fSjohnjiang static int
complete_buffer(__rte_unused struct rdline * rdl,__rte_unused const char * buf,__rte_unused char * dstbuf,__rte_unused unsigned int dstsize,__rte_unused int * state)35*2d9fd380Sjfb8856606 complete_buffer(__rte_unused struct rdline *rdl,
36*2d9fd380Sjfb8856606 			__rte_unused const char *buf,
37*2d9fd380Sjfb8856606 			__rte_unused char *dstbuf,
38*2d9fd380Sjfb8856606 			__rte_unused unsigned int dstsize,
39*2d9fd380Sjfb8856606 			__rte_unused int *state)
404418919fSjohnjiang {
414418919fSjohnjiang 	return 0;
424418919fSjohnjiang }
434418919fSjohnjiang 
444418919fSjohnjiang /****************************************************************/
454418919fSjohnjiang 
464418919fSjohnjiang static int
test_cmdline_parse_fns(void)474418919fSjohnjiang test_cmdline_parse_fns(void)
484418919fSjohnjiang {
49*2d9fd380Sjfb8856606 	struct cmdline *cl;
50*2d9fd380Sjfb8856606 	cmdline_parse_ctx_t ctx;
514418919fSjohnjiang 	int i = 0;
524418919fSjohnjiang 	char dst[CMDLINE_TEST_BUFSIZE];
534418919fSjohnjiang 
54*2d9fd380Sjfb8856606 	cl = cmdline_new(&ctx, "prompt", -1, -1);
55*2d9fd380Sjfb8856606 	if (cl == NULL) {
56*2d9fd380Sjfb8856606 		printf("Error: cannot create cmdline to test parse fns!\n");
57*2d9fd380Sjfb8856606 		return -1;
58*2d9fd380Sjfb8856606 	}
59*2d9fd380Sjfb8856606 
604418919fSjohnjiang 	if (cmdline_parse(NULL, "buffer") >= 0)
614418919fSjohnjiang 		goto error;
62*2d9fd380Sjfb8856606 	if (cmdline_parse(cl, NULL) >= 0)
634418919fSjohnjiang 		goto error;
644418919fSjohnjiang 
654418919fSjohnjiang 	if (cmdline_complete(NULL, "buffer", &i, dst, sizeof(dst)) >= 0)
664418919fSjohnjiang 		goto error;
67*2d9fd380Sjfb8856606 	if (cmdline_complete(cl, NULL, &i, dst, sizeof(dst)) >= 0)
684418919fSjohnjiang 		goto error;
69*2d9fd380Sjfb8856606 	if (cmdline_complete(cl, "buffer", NULL, dst, sizeof(dst)) >= 0)
704418919fSjohnjiang 		goto error;
71*2d9fd380Sjfb8856606 	if (cmdline_complete(cl, "buffer", &i, NULL, sizeof(dst)) >= 0)
724418919fSjohnjiang 		goto error;
734418919fSjohnjiang 
744418919fSjohnjiang 	return 0;
754418919fSjohnjiang 
764418919fSjohnjiang error:
774418919fSjohnjiang 	printf("Error: function accepted null parameter!\n");
784418919fSjohnjiang 	return -1;
794418919fSjohnjiang }
804418919fSjohnjiang 
814418919fSjohnjiang static int
test_cmdline_rdline_fns(void)824418919fSjohnjiang test_cmdline_rdline_fns(void)
834418919fSjohnjiang {
844418919fSjohnjiang 	struct rdline rdl;
854418919fSjohnjiang 	rdline_write_char_t *wc = &cmdline_write_char;
864418919fSjohnjiang 	rdline_validate_t *v = &valid_buffer;
874418919fSjohnjiang 	rdline_complete_t *c = &complete_buffer;
884418919fSjohnjiang 
894418919fSjohnjiang 	if (rdline_init(NULL, wc, v, c) >= 0)
904418919fSjohnjiang 		goto error;
914418919fSjohnjiang 	if (rdline_init(&rdl, NULL, v, c) >= 0)
924418919fSjohnjiang 		goto error;
934418919fSjohnjiang 	if (rdline_init(&rdl, wc, NULL, c) >= 0)
944418919fSjohnjiang 		goto error;
954418919fSjohnjiang 	if (rdline_init(&rdl, wc, v, NULL) >= 0)
964418919fSjohnjiang 		goto error;
974418919fSjohnjiang 	if (rdline_char_in(NULL, 0) >= 0)
984418919fSjohnjiang 		goto error;
994418919fSjohnjiang 	if (rdline_get_buffer(NULL) != NULL)
1004418919fSjohnjiang 		goto error;
1014418919fSjohnjiang 	if (rdline_add_history(NULL, "history") >= 0)
1024418919fSjohnjiang 		goto error;
1034418919fSjohnjiang 	if (rdline_add_history(&rdl, NULL) >= 0)
1044418919fSjohnjiang 		goto error;
1054418919fSjohnjiang 	if (rdline_get_history_item(NULL, 0) != NULL)
1064418919fSjohnjiang 		goto error;
1074418919fSjohnjiang 
1084418919fSjohnjiang 	/* void functions */
1094418919fSjohnjiang 	rdline_newline(NULL, "prompt");
1104418919fSjohnjiang 	rdline_newline(&rdl, NULL);
1114418919fSjohnjiang 	rdline_stop(NULL);
1124418919fSjohnjiang 	rdline_quit(NULL);
1134418919fSjohnjiang 	rdline_restart(NULL);
1144418919fSjohnjiang 	rdline_redisplay(NULL);
1154418919fSjohnjiang 	rdline_reset(NULL);
1164418919fSjohnjiang 	rdline_clear_history(NULL);
1174418919fSjohnjiang 
1184418919fSjohnjiang 	return 0;
1194418919fSjohnjiang 
1204418919fSjohnjiang error:
1214418919fSjohnjiang 	printf("Error: function accepted null parameter!\n");
1224418919fSjohnjiang 	return -1;
1234418919fSjohnjiang }
1244418919fSjohnjiang 
1254418919fSjohnjiang static int
test_cmdline_vt100_fns(void)1264418919fSjohnjiang test_cmdline_vt100_fns(void)
1274418919fSjohnjiang {
1284418919fSjohnjiang 	if (vt100_parser(NULL, 0) >= 0) {
1294418919fSjohnjiang 		printf("Error: function accepted null parameter!\n");
1304418919fSjohnjiang 		return -1;
1314418919fSjohnjiang 	}
1324418919fSjohnjiang 
1334418919fSjohnjiang 	/* void functions */
1344418919fSjohnjiang 	vt100_init(NULL);
1354418919fSjohnjiang 
1364418919fSjohnjiang 	return 0;
1374418919fSjohnjiang }
1384418919fSjohnjiang 
1394418919fSjohnjiang static int
test_cmdline_socket_fns(void)1404418919fSjohnjiang test_cmdline_socket_fns(void)
1414418919fSjohnjiang {
1424418919fSjohnjiang 	cmdline_parse_ctx_t ctx;
1434418919fSjohnjiang 
1444418919fSjohnjiang 	if (cmdline_stdin_new(NULL, "prompt") != NULL)
1454418919fSjohnjiang 		goto error;
1464418919fSjohnjiang 	if (cmdline_stdin_new(&ctx, NULL) != NULL)
1474418919fSjohnjiang 		goto error;
1484418919fSjohnjiang 	if (cmdline_file_new(NULL, "prompt", "/dev/null") != NULL)
1494418919fSjohnjiang 		goto error;
1504418919fSjohnjiang 	if (cmdline_file_new(&ctx, NULL, "/dev/null") != NULL)
1514418919fSjohnjiang 		goto error;
1524418919fSjohnjiang 	if (cmdline_file_new(&ctx, "prompt", NULL) != NULL)
1534418919fSjohnjiang 		goto error;
1544418919fSjohnjiang 	if (cmdline_file_new(&ctx, "prompt", "-/invalid/~/path") != NULL) {
1554418919fSjohnjiang 		printf("Error: succeeded in opening invalid file for reading!");
1564418919fSjohnjiang 		return -1;
1574418919fSjohnjiang 	}
1584418919fSjohnjiang 	if (cmdline_file_new(&ctx, "prompt", "/dev/null") == NULL) {
1594418919fSjohnjiang 		printf("Error: failed to open /dev/null for reading!");
1604418919fSjohnjiang 		return -1;
1614418919fSjohnjiang 	}
1624418919fSjohnjiang 
1634418919fSjohnjiang 	/* void functions */
1644418919fSjohnjiang 	cmdline_stdin_exit(NULL);
1654418919fSjohnjiang 
1664418919fSjohnjiang 	return 0;
1674418919fSjohnjiang error:
1684418919fSjohnjiang 	printf("Error: function accepted null parameter!\n");
1694418919fSjohnjiang 	return -1;
1704418919fSjohnjiang }
1714418919fSjohnjiang 
1724418919fSjohnjiang static int
test_cmdline_fns(void)1734418919fSjohnjiang test_cmdline_fns(void)
1744418919fSjohnjiang {
1754418919fSjohnjiang 	cmdline_parse_ctx_t ctx;
176*2d9fd380Sjfb8856606 	struct cmdline *cl;
1774418919fSjohnjiang 
1784418919fSjohnjiang 	memset(&ctx, 0, sizeof(ctx));
179*2d9fd380Sjfb8856606 	cl = cmdline_new(&ctx, "test", -1, -1);
180*2d9fd380Sjfb8856606 	if (cl == NULL)
1814418919fSjohnjiang 		goto error;
1824418919fSjohnjiang 
1834418919fSjohnjiang 	if (cmdline_new(NULL, "prompt", 0, 0) != NULL)
1844418919fSjohnjiang 		goto error;
1854418919fSjohnjiang 	if (cmdline_new(&ctx, NULL, 0, 0) != NULL)
1864418919fSjohnjiang 		goto error;
1874418919fSjohnjiang 	if (cmdline_in(NULL, "buffer", CMDLINE_TEST_BUFSIZE) >= 0)
1884418919fSjohnjiang 		goto error;
189*2d9fd380Sjfb8856606 	if (cmdline_in(cl, NULL, CMDLINE_TEST_BUFSIZE) >= 0)
1904418919fSjohnjiang 		goto error;
1914418919fSjohnjiang 	if (cmdline_write_char(NULL, 0) >= 0)
1924418919fSjohnjiang 		goto error;
1934418919fSjohnjiang 
1944418919fSjohnjiang 	/* void functions */
1954418919fSjohnjiang 	cmdline_set_prompt(NULL, "prompt");
1964418919fSjohnjiang 	cmdline_free(NULL);
1974418919fSjohnjiang 	cmdline_printf(NULL, "format");
1984418919fSjohnjiang 	cmdline_interact(NULL);
1994418919fSjohnjiang 	cmdline_quit(NULL);
2004418919fSjohnjiang 
2014418919fSjohnjiang 	return 0;
2024418919fSjohnjiang 
2034418919fSjohnjiang error:
2044418919fSjohnjiang 	printf("Error: function accepted null parameter!\n");
205*2d9fd380Sjfb8856606 	if (cl != NULL)
206*2d9fd380Sjfb8856606 		cmdline_free(cl);
2074418919fSjohnjiang 	return -1;
2084418919fSjohnjiang }
2094418919fSjohnjiang 
2104418919fSjohnjiang /* test library functions. the point of these tests is not so much to test
2114418919fSjohnjiang  * functions' behaviour as it is to make sure there are no segfaults if
2124418919fSjohnjiang  * they are called with invalid parameters.
2134418919fSjohnjiang  */
2144418919fSjohnjiang int
test_cmdline_lib(void)2154418919fSjohnjiang test_cmdline_lib(void)
2164418919fSjohnjiang {
2174418919fSjohnjiang 	if (test_cmdline_parse_fns() < 0)
2184418919fSjohnjiang 		return -1;
2194418919fSjohnjiang 	if (test_cmdline_rdline_fns() < 0)
2204418919fSjohnjiang 		return -1;
2214418919fSjohnjiang 	if (test_cmdline_vt100_fns() < 0)
2224418919fSjohnjiang 		return -1;
2234418919fSjohnjiang 	if (test_cmdline_socket_fns() < 0)
2244418919fSjohnjiang 		return -1;
2254418919fSjohnjiang 	if (test_cmdline_fns() < 0)
2264418919fSjohnjiang 		return -1;
2274418919fSjohnjiang 	return 0;
2284418919fSjohnjiang }
229