1 // SPDX-License-Identifier: GPL-2.0+
3 * Logging support test program
5 * Copyright (c) 2017 Google, Inc
13 /* emit some sample log records in different ways, for testing */
14 static int log_run(enum uclass_id cat, const char *file)
19 for (i = LOGL_FIRST; i < LOGL_COUNT; i++) {
20 log(cat, i, "log %d\n", i);
21 _log(log_uc_cat(cat), i, file, 100 + i, "func", "_log %d\n",
28 static int log_test(int testnum)
32 printf("test %d\n", testnum);
35 /* Check a category filter using the first category */
36 enum log_category_t cat_list[] = {
37 log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI),
41 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
44 log_run(UCLASS_MMC, "file");
45 ret = log_remove_filter("console", ret);
51 /* Check a category filter using the second category */
52 enum log_category_t cat_list[] = {
53 log_uc_cat(UCLASS_MMC), log_uc_cat(UCLASS_SPI), LOGC_END
56 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
59 log_run(UCLASS_SPI, "file");
60 ret = log_remove_filter("console", ret);
66 /* Check a category filter that should block log entries */
67 enum log_category_t cat_list[] = {
68 log_uc_cat(UCLASS_MMC), LOGC_NONE, LOGC_END
71 ret = log_add_filter("console", cat_list, LOGL_MAX, NULL);
74 log_run(UCLASS_SPI, "file");
75 ret = log_remove_filter("console", ret);
81 /* Check a passing file filter */
82 ret = log_add_filter("console", NULL, LOGL_MAX, "file");
85 log_run(UCLASS_SPI, "file");
86 ret = log_remove_filter("console", ret);
92 /* Check a failing file filter */
93 ret = log_add_filter("console", NULL, LOGL_MAX, "file");
96 log_run(UCLASS_SPI, "file2");
97 ret = log_remove_filter("console", ret);
103 /* Check a passing file filter (second in list) */
104 ret = log_add_filter("console", NULL, LOGL_MAX, "file,file2");
107 log_run(UCLASS_SPI, "file2");
108 ret = log_remove_filter("console", ret);
114 /* Check a passing file filter */
115 ret = log_add_filter("console", NULL, LOGL_MAX,
116 "file,file2,log/log_test.c");
119 log_run(UCLASS_SPI, "file2");
120 ret = log_remove_filter("console", ret);
126 /* Check a log level filter */
127 ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
130 log_run(UCLASS_SPI, "file");
131 ret = log_remove_filter("console", ret);
137 /* Check two filters, one of which passes everything */
140 ret = log_add_filter("console", NULL, LOGL_WARNING, NULL);
144 ret = log_add_filter("console", NULL, LOGL_MAX, NULL);
148 log_run(UCLASS_SPI, "file");
149 ret = log_remove_filter("console", filt1);
152 ret = log_remove_filter("console", filt2);
158 /* Check three filters, which together pass everything */
159 int filt1, filt2, filt3;
161 ret = log_add_filter("console", NULL, LOGL_MAX, "file)");
165 ret = log_add_filter("console", NULL, LOGL_MAX, "file2");
169 ret = log_add_filter("console", NULL, LOGL_MAX,
174 log_run(UCLASS_SPI, "file2");
175 ret = log_remove_filter("console", filt1);
178 ret = log_remove_filter("console", filt2);
181 ret = log_remove_filter("console", filt3);
187 log_err("level %d\n", LOGL_EMERG);
188 log_err("level %d\n", LOGL_ALERT);
189 log_err("level %d\n", LOGL_CRIT);
190 log_err("level %d\n", LOGL_ERR);
191 log_warning("level %d\n", LOGL_WARNING);
192 log_notice("level %d\n", LOGL_NOTICE);
193 log_info("level %d\n", LOGL_INFO);
194 log_debug("level %d\n", LOGL_DEBUG);
195 log_content("level %d\n", LOGL_DEBUG_CONTENT);
196 log_io("level %d\n", LOGL_DEBUG_IO);
204 #ifdef CONFIG_LOG_TEST
205 int do_log_test(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
211 testnum = simple_strtoul(argv[1], NULL, 10);
213 ret = log_test(testnum);
215 printf("Test failure (err=%d)\n", ret);
217 return ret ? CMD_RET_FAILURE : 0;