1 // SPDX-License-Identifier: GPL-2.0+
3 * Logging support test program
5 * Copyright (c) 2017 Google, Inc
6 * Written by Simon Glass <sjg@chromium.org>
12 /* emit some sample log records in different ways, for testing */
13 static int log_run(enum uclass_id cat, const char *file)
18 for (i = LOGL_FIRST; i < LOGL_COUNT; i++) {
19 log(cat, i, "log %d\n", i);
20 _log(log_uc_cat(cat), i, file, 100 + i, "func", "_log %d\n",
27 static int log_test(int testnum)
31 printf("test %d\n", testnum);
34 /* Check a category filter using the first category */
35 enum log_category_t cat_list[] = {
36 log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI),
40 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
43 log_run(UCLASS_MMC, "file");
44 ret = log_remove_filter("console", ret);
50 /* Check a category filter using the second category */
51 enum log_category_t cat_list[] = {
52 log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI), LOGC_END
55 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
58 log_run(UCLASS_SPI, "file");
59 ret = log_remove_filter("console", ret);
65 /* Check a category filter that should block log entries */
66 enum log_category_t cat_list[] = {
67 log_uc_cat(UCLASS_MMC), LOGC_NONE, LOGC_END
70 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
73 log_run(UCLASS_SPI, "file");
74 ret = log_remove_filter("console", ret);
80 /* Check a passing file filter */
81 ret = log_add_filter("console", NULL, LOGL_MAX, "file");
84 log_run(UCLASS_SPI, "file");
85 ret = log_remove_filter("console", ret);
91 /* Check a failing file filter */
92 ret = log_add_filter("console", NULL, LOGL_MAX, "file");
95 log_run(UCLASS_SPI, "file2");
96 ret = log_remove_filter("console", ret);
102 /* Check a passing file filter (second in list) */
103 ret = log_add_filter("console", NULL, LOGL_MAX, "file,file2");
106 log_run(UCLASS_SPI, "file2");
107 ret = log_remove_filter("console", ret);
113 /* Check a passing file filter */
114 ret = log_add_filter("console", NULL, LOGL_MAX,
115 "file,file2,log/log_test.c");
118 log_run(UCLASS_SPI, "file2");
119 ret = log_remove_filter("console", ret);
125 /* Check a log level filter */
126 ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
129 log_run(UCLASS_SPI, "file");
130 ret = log_remove_filter("console", ret);
136 /* Check two filters, one of which passes everything */
139 ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
143 ret = log_add_filter("console", NULL, LOGL_MAX, NULL);
147 log_run(UCLASS_SPI, "file");
148 ret = log_remove_filter("console", filt1);
151 ret = log_remove_filter("console", filt2);
157 /* Check three filters, which together pass everything */
158 int filt1, filt2, filt3;
160 ret = log_add_filter("console", NULL, LOGL_MAX, "file)");
164 ret = log_add_filter("console", NULL, LOGL_MAX, "file2");
168 ret = log_add_filter("console", NULL, LOGL_MAX,
173 log_run(UCLASS_SPI, "file2");
174 ret = log_remove_filter("console", filt1);
177 ret = log_remove_filter("console", filt2);
180 ret = log_remove_filter("console", filt3);
186 log_err("level %d\n", LOGL_EMERG);
187 log_err("level %d\n", LOGL_ALERT);
188 log_err("level %d\n", LOGL_CRIT);
189 log_err("level %d\n", LOGL_ERR);
190 log_warning("level %d\n", LOGL_WARNING);
191 log_notice("level %d\n", LOGL_NOTICE);
192 log_info("level %d\n", LOGL_INFO);
193 log_debug("level %d\n", LOGL_DEBUG);
194 log_content("level %d\n", LOGL_DEBUG_CONTENT);
195 log_io("level %d\n", LOGL_DEBUG_IO);
203 #ifdef CONFIG_LOG_TEST
204 int do_log_test(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
210 testnum = simple_strtoul(argv[1], NULL, 10);
212 ret = log_test(testnum);
214 printf("Test failure (err=%d)\n", ret);
216 return ret ? CMD_RET_FAILURE : 0;