test/service: fix race condition on stopping lcore
[dpdk.git] / app / test / test_logs.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4
5 #include <stdio.h>
6 #include <stdint.h>
7 #include <stdarg.h>
8 #include <sys/queue.h>
9
10 #include <rte_log.h>
11 #include <rte_memory.h>
12 #include <rte_launch.h>
13 #include <rte_eal.h>
14 #include <rte_per_lcore.h>
15 #include <rte_lcore.h>
16
17 #include "test.h"
18
19 /* for legacy log test */
20 #define RTE_LOGTYPE_TESTAPP1 RTE_LOGTYPE_USER1
21 #define RTE_LOGTYPE_TESTAPP2 RTE_LOGTYPE_USER2
22
23 /*
24  * Logs
25  * ====
26  *
27  * - Enable log types.
28  * - Set log level.
29  * - Send logs with different types and levels, some should not be displayed.
30  */
31 static int
32 test_legacy_logs(void)
33 {
34         printf("== static log types\n");
35
36         /* set logtype level low to so we can test global level */
37         rte_log_set_level(RTE_LOGTYPE_TESTAPP1, RTE_LOG_DEBUG);
38         rte_log_set_level(RTE_LOGTYPE_TESTAPP2, RTE_LOG_DEBUG);
39
40         /* log in error level */
41         rte_log_set_global_level(RTE_LOG_ERR);
42         RTE_LOG(ERR, TESTAPP1, "error message\n");
43         RTE_LOG(CRIT, TESTAPP1, "critical message\n");
44
45         /* log in critical level */
46         rte_log_set_global_level(RTE_LOG_CRIT);
47         RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
48         RTE_LOG(CRIT, TESTAPP2, "critical message\n");
49
50         /* bump up single log type level above global to test it */
51         rte_log_set_level(RTE_LOGTYPE_TESTAPP2, RTE_LOG_EMERG);
52
53         /* log in error level */
54         rte_log_set_global_level(RTE_LOG_ERR);
55         RTE_LOG(ERR, TESTAPP1, "error message\n");
56         RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
57
58         return 0;
59 }
60
61 static int
62 test_logs(void)
63 {
64         int logtype1, logtype2;
65         int ret;
66
67         printf("== dynamic log types\n");
68
69         logtype1 = rte_log_register("logtype1");
70         if (logtype1 < 0) {
71                 printf("Cannot register logtype1\n");
72                 return -1;
73         }
74         logtype2 = rte_log_register("logtype2");
75         if (logtype2 < 0) {
76                 printf("Cannot register logtype2\n");
77                 return -1;
78         }
79
80         /* set logtype level low to so we can test global level */
81         rte_log_set_level(logtype1, RTE_LOG_DEBUG);
82         rte_log_set_level(logtype2, RTE_LOG_DEBUG);
83
84         /* log in error level */
85         rte_log_set_global_level(RTE_LOG_ERR);
86         rte_log(RTE_LOG_ERR, logtype1, "error message\n");
87         rte_log(RTE_LOG_CRIT, logtype1, "critical message\n");
88
89         /* log in critical level */
90         rte_log_set_global_level(RTE_LOG_CRIT);
91         rte_log(RTE_LOG_ERR, logtype2, "error message (not displayed)\n");
92         rte_log(RTE_LOG_CRIT, logtype2, "critical message\n");
93
94         /* bump up single log type level above global to test it */
95         rte_log_set_level(logtype2, RTE_LOG_EMERG);
96
97         /* log in error level */
98         rte_log_set_global_level(RTE_LOG_ERR);
99         rte_log(RTE_LOG_ERR, logtype1, "error message\n");
100         rte_log(RTE_LOG_ERR, logtype2, "error message (not displayed)\n");
101
102         ret = test_legacy_logs();
103         if (ret < 0)
104                 return ret;
105
106         return 0;
107 }
108
109 REGISTER_TEST_COMMAND(logs_autotest, test_logs);