xref: /rk3399_rockchip-uboot/test/log/log_test.c (revision 73991b074b84a2b568d20b0cc41f15bfbd0d0046)
1*73991b07SSimon Glass /*
2*73991b07SSimon Glass  * Logging support test program
3*73991b07SSimon Glass  *
4*73991b07SSimon Glass  * Copyright (c) 2017 Google, Inc
5*73991b07SSimon Glass  * Written by Simon Glass <sjg@chromium.org>
6*73991b07SSimon Glass  *
7*73991b07SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
8*73991b07SSimon Glass  */
9*73991b07SSimon Glass 
10*73991b07SSimon Glass #include <common.h>
11*73991b07SSimon Glass 
12*73991b07SSimon Glass /* emit some sample log records in different ways, for testing */
log_run(enum uclass_id cat,const char * file)13*73991b07SSimon Glass static int log_run(enum uclass_id cat, const char *file)
14*73991b07SSimon Glass {
15*73991b07SSimon Glass 	int i;
16*73991b07SSimon Glass 
17*73991b07SSimon Glass 	debug("debug\n");
18*73991b07SSimon Glass 	for (i = LOGL_FIRST; i < LOGL_COUNT; i++) {
19*73991b07SSimon Glass 		log(cat, i, "log %d\n", i);
20*73991b07SSimon Glass 		_log(log_uc_cat(cat), i, file, 100 + i, "func", "_log %d\n",
21*73991b07SSimon Glass 		     i);
22*73991b07SSimon Glass 	}
23*73991b07SSimon Glass 
24*73991b07SSimon Glass 	return 0;
25*73991b07SSimon Glass }
26*73991b07SSimon Glass 
log_test(int testnum)27*73991b07SSimon Glass static int log_test(int testnum)
28*73991b07SSimon Glass {
29*73991b07SSimon Glass 	int ret;
30*73991b07SSimon Glass 
31*73991b07SSimon Glass 	printf("test %d\n", testnum);
32*73991b07SSimon Glass 	switch (testnum) {
33*73991b07SSimon Glass 	case 0: {
34*73991b07SSimon Glass 		/* Check a category filter using the first category */
35*73991b07SSimon Glass 		enum log_category_t cat_list[] = {
36*73991b07SSimon Glass 			log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI),
37*73991b07SSimon Glass 			LOGC_NONE, LOGC_END
38*73991b07SSimon Glass 		};
39*73991b07SSimon Glass 
40*73991b07SSimon Glass 		ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
41*73991b07SSimon Glass 		if (ret < 0)
42*73991b07SSimon Glass 			return ret;
43*73991b07SSimon Glass 		log_run(UCLASS_MMC, "file");
44*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
45*73991b07SSimon Glass 		if (ret < 0)
46*73991b07SSimon Glass 			return ret;
47*73991b07SSimon Glass 		break;
48*73991b07SSimon Glass 	}
49*73991b07SSimon Glass 	case 1: {
50*73991b07SSimon Glass 		/* Check a category filter using the second category */
51*73991b07SSimon Glass 		enum log_category_t cat_list[] = {
52*73991b07SSimon Glass 			log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI), LOGC_END
53*73991b07SSimon Glass 		};
54*73991b07SSimon Glass 
55*73991b07SSimon Glass 		ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
56*73991b07SSimon Glass 		if (ret < 0)
57*73991b07SSimon Glass 			return ret;
58*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file");
59*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
60*73991b07SSimon Glass 		if (ret < 0)
61*73991b07SSimon Glass 			return ret;
62*73991b07SSimon Glass 		break;
63*73991b07SSimon Glass 	}
64*73991b07SSimon Glass 	case 2: {
65*73991b07SSimon Glass 		/* Check a category filter that should block log entries */
66*73991b07SSimon Glass 		enum log_category_t cat_list[] = {
67*73991b07SSimon Glass 			log_uc_cat(UCLASS_MMC),  LOGC_NONE, LOGC_END
68*73991b07SSimon Glass 		};
69*73991b07SSimon Glass 
70*73991b07SSimon Glass 		ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
71*73991b07SSimon Glass 		if (ret < 0)
72*73991b07SSimon Glass 			return ret;
73*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file");
74*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
75*73991b07SSimon Glass 		if (ret < 0)
76*73991b07SSimon Glass 			return ret;
77*73991b07SSimon Glass 		break;
78*73991b07SSimon Glass 	}
79*73991b07SSimon Glass 	case 3: {
80*73991b07SSimon Glass 		/* Check a passing file filter */
81*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, "file");
82*73991b07SSimon Glass 		if (ret < 0)
83*73991b07SSimon Glass 			return ret;
84*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file");
85*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
86*73991b07SSimon Glass 		if (ret < 0)
87*73991b07SSimon Glass 			return ret;
88*73991b07SSimon Glass 		break;
89*73991b07SSimon Glass 	}
90*73991b07SSimon Glass 	case 4: {
91*73991b07SSimon Glass 		/* Check a failing file filter */
92*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, "file");
93*73991b07SSimon Glass 		if (ret < 0)
94*73991b07SSimon Glass 			return ret;
95*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file2");
96*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
97*73991b07SSimon Glass 		if (ret < 0)
98*73991b07SSimon Glass 			return ret;
99*73991b07SSimon Glass 		break;
100*73991b07SSimon Glass 	}
101*73991b07SSimon Glass 	case 5: {
102*73991b07SSimon Glass 		/* Check a passing file filter (second in list) */
103*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, "file,file2");
104*73991b07SSimon Glass 		if (ret < 0)
105*73991b07SSimon Glass 			return ret;
106*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file2");
107*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
108*73991b07SSimon Glass 		if (ret < 0)
109*73991b07SSimon Glass 			return ret;
110*73991b07SSimon Glass 		break;
111*73991b07SSimon Glass 	}
112*73991b07SSimon Glass 	case 6: {
113*73991b07SSimon Glass 		/* Check a passing file filter */
114*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX,
115*73991b07SSimon Glass 				     "file,file2,log/log_test.c");
116*73991b07SSimon Glass 		if (ret < 0)
117*73991b07SSimon Glass 			return ret;
118*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file2");
119*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
120*73991b07SSimon Glass 		if (ret < 0)
121*73991b07SSimon Glass 			return ret;
122*73991b07SSimon Glass 		break;
123*73991b07SSimon Glass 	}
124*73991b07SSimon Glass 	case 7: {
125*73991b07SSimon Glass 		/* Check a log level filter */
126*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
127*73991b07SSimon Glass 		if (ret < 0)
128*73991b07SSimon Glass 			return ret;
129*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file");
130*73991b07SSimon Glass 		ret = log_remove_filter("console", ret);
131*73991b07SSimon Glass 		if (ret < 0)
132*73991b07SSimon Glass 			return ret;
133*73991b07SSimon Glass 		break;
134*73991b07SSimon Glass 	}
135*73991b07SSimon Glass 	case 8: {
136*73991b07SSimon Glass 		/* Check two filters, one of which passes everything */
137*73991b07SSimon Glass 		int filt1, filt2;
138*73991b07SSimon Glass 
139*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
140*73991b07SSimon Glass 		if (ret < 0)
141*73991b07SSimon Glass 			return ret;
142*73991b07SSimon Glass 		filt1 = ret;
143*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, NULL);
144*73991b07SSimon Glass 		if (ret < 0)
145*73991b07SSimon Glass 			return ret;
146*73991b07SSimon Glass 		filt2 = ret;
147*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file");
148*73991b07SSimon Glass 		ret = log_remove_filter("console", filt1);
149*73991b07SSimon Glass 		if (ret < 0)
150*73991b07SSimon Glass 			return ret;
151*73991b07SSimon Glass 		ret = log_remove_filter("console", filt2);
152*73991b07SSimon Glass 		if (ret < 0)
153*73991b07SSimon Glass 			return ret;
154*73991b07SSimon Glass 		break;
155*73991b07SSimon Glass 	}
156*73991b07SSimon Glass 	case 9: {
157*73991b07SSimon Glass 		/* Check three filters, which together pass everything */
158*73991b07SSimon Glass 		int filt1, filt2, filt3;
159*73991b07SSimon Glass 
160*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, "file)");
161*73991b07SSimon Glass 		if (ret < 0)
162*73991b07SSimon Glass 			return ret;
163*73991b07SSimon Glass 		filt1 = ret;
164*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX, "file2");
165*73991b07SSimon Glass 		if (ret < 0)
166*73991b07SSimon Glass 			return ret;
167*73991b07SSimon Glass 		filt2 = ret;
168*73991b07SSimon Glass 		ret = log_add_filter("console", NULL, LOGL_MAX,
169*73991b07SSimon Glass 				     "log/log_test.c");
170*73991b07SSimon Glass 		if (ret < 0)
171*73991b07SSimon Glass 			return ret;
172*73991b07SSimon Glass 		filt3 = ret;
173*73991b07SSimon Glass 		log_run(UCLASS_SPI, "file2");
174*73991b07SSimon Glass 		ret = log_remove_filter("console", filt1);
175*73991b07SSimon Glass 		if (ret < 0)
176*73991b07SSimon Glass 			return ret;
177*73991b07SSimon Glass 		ret = log_remove_filter("console", filt2);
178*73991b07SSimon Glass 		if (ret < 0)
179*73991b07SSimon Glass 			return ret;
180*73991b07SSimon Glass 		ret = log_remove_filter("console", filt3);
181*73991b07SSimon Glass 		if (ret < 0)
182*73991b07SSimon Glass 			return ret;
183*73991b07SSimon Glass 		break;
184*73991b07SSimon Glass 	}
185*73991b07SSimon Glass 	}
186*73991b07SSimon Glass 
187*73991b07SSimon Glass 	return 0;
188*73991b07SSimon Glass }
189*73991b07SSimon Glass 
190*73991b07SSimon Glass #ifdef CONFIG_LOG_TEST
do_log_test(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])191*73991b07SSimon Glass int do_log_test(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
192*73991b07SSimon Glass {
193*73991b07SSimon Glass 	int testnum = 0;
194*73991b07SSimon Glass 	int ret;
195*73991b07SSimon Glass 
196*73991b07SSimon Glass 	if (argc > 1)
197*73991b07SSimon Glass 		testnum = simple_strtoul(argv[1], NULL, 10);
198*73991b07SSimon Glass 
199*73991b07SSimon Glass 	ret = log_test(testnum);
200*73991b07SSimon Glass 	if (ret)
201*73991b07SSimon Glass 		printf("Test failure (err=%d)\n", ret);
202*73991b07SSimon Glass 
203*73991b07SSimon Glass 	return ret ? CMD_RET_FAILURE : 0;
204*73991b07SSimon Glass }
205*73991b07SSimon Glass #endif
206