+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);
+
+ 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);
+
+ /* 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_TEST_COMMAND(logs_autotest, test_logs);