1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2014 Intel Corporation
*/
#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
#include <sys/queue.h>
#include <rte_log.h>
#include <rte_memory.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include "test.h"
/* for legacy log test */
#define RTE_LOGTYPE_TESTAPP1 RTE_LOGTYPE_USER1
#define RTE_LOGTYPE_TESTAPP2 RTE_LOGTYPE_USER2
RTE_LOG_REGISTER(logtype3, logtype3, ERR)
/*
* Logs
* ====
*
* - Enable log types.
* - Set log level.
* - Send logs with different types and levels, some should not be displayed.
*/
static int
test_legacy_logs(void)
{
printf("== static log types\n");
/* set logtype level low to so we can test global level */
rte_log_set_level(RTE_LOGTYPE_TESTAPP1, RTE_LOG_DEBUG);
rte_log_set_level(RTE_LOGTYPE_TESTAPP2, RTE_LOG_DEBUG);
/* log in error level */
rte_log_set_global_level(RTE_LOG_ERR);
RTE_LOG(ERR, TESTAPP1, "error message\n");
RTE_LOG(CRIT, TESTAPP1, "critical message\n");
/* log in critical level */
rte_log_set_global_level(RTE_LOG_CRIT);
RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
RTE_LOG(CRIT, TESTAPP2, "critical message\n");
/* bump up single log type level above global to test it */
rte_log_set_level(RTE_LOGTYPE_TESTAPP2, RTE_LOG_EMERG);
/* log in error level */
rte_log_set_global_level(RTE_LOG_ERR);
RTE_LOG(ERR, TESTAPP1, "error message\n");
RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
return 0;
}
static int
test_logs(void)
{
int logtype1, logtype2;
int ret;
#define CHECK_LEVELS(exp1, exp2, exp3) do \
{ \
ret = rte_log_get_level(logtype1); \
TEST_ASSERT_EQUAL(ret, exp1, \
"invalid level for logtype1 got %d, expecting %d\n", \
ret, exp1); \
ret = rte_log_get_level(logtype2); \
TEST_ASSERT_EQUAL(ret, exp2, \
"invalid level for logtype2 got %d, expecting %d\n", \
ret, exp2); \
ret = rte_log_get_level(logtype3); \
TEST_ASSERT_EQUAL(ret, exp3, \
"invalid level for logtype3 got %d, expecting %d\n", \
ret, exp3); \
} while (0)
printf("== dynamic log types\n");
logtype1 = rte_log_register("logtype1");
if (logtype1 < 0) {
printf("Cannot register logtype1\n");
return -1;
}
logtype2 = rte_log_register("logtype2");
if (logtype2 < 0) {
printf("Cannot register logtype2\n");
return -1;
}
ret = rte_log_get_level(logtype1);
TEST_ASSERT_EQUAL(ret, RTE_LOG_INFO,
"invalid default level for logtype1 got %d, expecting %d\n",
ret, RTE_LOG_INFO);
ret = rte_log_get_level(logtype2);
TEST_ASSERT_EQUAL(ret, RTE_LOG_INFO,
"invalid default level for logtype2 got %d, expecting %d\n",
ret, RTE_LOG_INFO);
ret = rte_log_get_level(logtype3);
TEST_ASSERT_EQUAL(ret, RTE_LOG_ERR,
"invalid default level for logtype3 got %d, expecting %d\n",
ret, RTE_LOG_ERR);
rte_log_set_level(logtype1, RTE_LOG_ERR);
CHECK_LEVELS(RTE_LOG_ERR, RTE_LOG_INFO, RTE_LOG_ERR);
#ifndef RTE_EXEC_ENV_WINDOWS
rte_log_set_level_regexp("type$", RTE_LOG_EMERG);
CHECK_LEVELS(RTE_LOG_ERR, RTE_LOG_INFO, RTE_LOG_ERR);
rte_log_set_level_regexp("type[23]", RTE_LOG_EMERG);
CHECK_LEVELS(RTE_LOG_ERR, RTE_LOG_EMERG, RTE_LOG_EMERG);
rte_log_set_level_pattern("logtype", RTE_LOG_DEBUG);
CHECK_LEVELS(RTE_LOG_ERR, RTE_LOG_EMERG, RTE_LOG_EMERG);
#else
rte_log_set_level_pattern("logtype", RTE_LOG_DEBUG);
CHECK_LEVELS(RTE_LOG_ERR, RTE_LOG_INFO, RTE_LOG_ERR);
#endif
/* set logtype level low to so we can test global level */
rte_log_set_level_pattern("logtype*", RTE_LOG_DEBUG);
CHECK_LEVELS(RTE_LOG_DEBUG, RTE_LOG_DEBUG, RTE_LOG_DEBUG);
/* log in error level */
rte_log_set_global_level(RTE_LOG_ERR);
rte_log(RTE_LOG_ERR, logtype1, "error message\n");
rte_log(RTE_LOG_CRIT, logtype1, "critical message\n");
/* log in critical level */
rte_log_set_global_level(RTE_LOG_CRIT);
rte_log(RTE_LOG_ERR, logtype2, "error message (not displayed)\n");
rte_log(RTE_LOG_CRIT, logtype2, "critical message\n");
/* bump up single log type level above global to test it */
rte_log_set_level(logtype2, RTE_LOG_EMERG);
/* log in error level */
rte_log_set_global_level(RTE_LOG_ERR);
rte_log(RTE_LOG_ERR, logtype1, "error message\n");
rte_log(RTE_LOG_ERR, logtype2, "error message (not displayed)\n");
ret = test_legacy_logs();
if (ret < 0)
return ret;
#undef CHECK_LEVELS
return 0;
}
REGISTER_FAST_TEST(logs_autotest, true, true, test_logs);
|