2 * Logging support test program
4 * Copyright (c) 2017 Google, Inc
5 * Written by Simon Glass <sjg@chromium.org>
7 * SPDX-License-Identifier: GPL-2.0+
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);
190 #ifdef CONFIG_LOG_TEST
191 int do_log_test(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
197 testnum = simple_strtoul(argv[1], NULL, 10);
199 ret = log_test(testnum);
201 printf("Test failure (err=%d)\n", ret);
203 return ret ? CMD_RET_FAILURE : 0;