已合并
fix: 回合acllog接口moduleId校验及文档示例 #3611
zhangjie创建于 7月13日
fix: 回合acllog接口moduleId校验及文档示例 #3611
已合并
共 4 个文件变更+102-2
| @@ -217,6 +217,19 @@ void acllogVaList(int32_t moduleId, int32_t level, const char *fmt, va_list list | |||
| 217 | 217 | ||
| 218 | 无。 | 218 | 无。 |
| 219 | 219 | ||
| 220 | +### 调用示例 | ||
| 221 | + | ||
| 222 | +```c | ||
| 223 | +static void LogUserModule(int32_t moduleId, int32_t level, const char *fmt, ...) | ||
| 224 | +{ | ||
| 225 | + va_list list; | ||
| 226 | + va_start(list, fmt); | ||
| 227 | + acllogVaList(moduleId, level, fmt, list); | ||
| 228 | + va_end(list); | ||
| 229 | +} | ||
| 230 | + | ||
| 231 | +LogUserModule(0xff00, DLOG_INFO, "user module log"); | ||
| 232 | +``` | ||
| 220 | 233 | ||
| 221 | <br> | 234 | <br> |
| 222 | <br> | 235 | <br> |
| @@ -651,11 +651,16 @@ extern "C" LOG_FUNC_VISIBILITY __attribute((weak)) int32_t acllogCheckDebugLevel | |||
| 651 | extern "C" LOG_FUNC_VISIBILITY __attribute((weak)) void acllogVaList(int32_t moduleId, int32_t level, const char *fmt, | 651 | extern "C" LOG_FUNC_VISIBILITY __attribute((weak)) void acllogVaList(int32_t moduleId, int32_t level, const char *fmt, |
| 652 | va_list list) | 652 | va_list list) |
| 653 | { | 653 | { |
| 654 | + if ((moduleId < 0) || (moduleId > static_cast<int32_t>(ACLLOG_USER_MODULE_ID_MAX))) { | ||
| 655 | + SELF_LOG_WARN("acllogRecord/acllogVaList input moduleId=%d is illegal, valid range is [0, %u], log recording failed.", | ||
| 656 | + moduleId, ACLLOG_USER_MODULE_ID_MAX); | ||
| 657 | + return; | ||
| 658 | + } | ||
| 654 | if (g_slogFuncInfo[DLOG_VA_LIST].handle != nullptr) { | 659 | if (g_slogFuncInfo[DLOG_VA_LIST].handle != nullptr) { |
| 655 | reinterpret_cast<DlogVaListFunc>(g_slogFuncInfo[DLOG_VA_LIST].handle)(moduleId, level, fmt, list); | 660 | reinterpret_cast<DlogVaListFunc>(g_slogFuncInfo[DLOG_VA_LIST].handle)(moduleId, level, fmt, list); |
| 656 | return; | 661 | return; |
| 657 | } | 662 | } |
| 658 | - if ((moduleId < 0) || (fmt == nullptr)) { | 663 | + if (fmt == nullptr) { |
| 659 | return; | 664 | return; |
| 660 | } | 665 | } |
| 661 | 666 | ||
| @@ -25,4 +25,4 @@ set(SLOG_UT_TARGETS | |||
| 25 | rc_alog_utest | 25 | rc_alog_utest |
| 26 | ) | 26 | ) |
| 27 | 27 | ||
| 28 | -add_custom_target(slog_ut DEPENDS ${SLOG_UT_TARGETS}) | 28 | +add_custom_target(slog_ut DEPENDS ${SLOG_UT_TARGETS}) |
| @@ -992,6 +992,88 @@ TEST_F(EP_ALOG_HOST_FUNC_UTEST, AcllogPrintUserModuleId) | |||
| 992 | unsetenv("ASCEND_PROCESS_LOG_PATH"); | 992 | unsetenv("ASCEND_PROCESS_LOG_PATH"); |
| 993 | } | 993 | } |
| 994 | 994 | ||
| 995 | +TEST_F(EP_ALOG_HOST_FUNC_UTEST, AcllogInvalidModuleId_NegativeOne) | ||
| 996 | +{ | ||
| 997 | + setenv("ASCEND_GLOBAL_LOG_LEVEL", "0", 1); | ||
| 998 | + setenv("ASCEND_PROCESS_LOG_PATH", PATH_ROOT, 1); | ||
| 999 | + DlogConstructor(); | ||
| 1000 | + | ||
| 1001 | + // moduleId=-1 为负数,非法入参,应拒绝记录并在系统日志打印原因 | ||
| 1002 | + acllogRecord(-1, DLOG_INFO, "invalid module id %d", -1); | ||
| 1003 | + CallAcllogVaList(-1, DLOG_WARN, "invalid module id %d", -1); | ||
| 1004 | + | ||
| 1005 | + DlogDestructor(); | ||
| 1006 | + | ||
| 1007 | + // 非法 moduleId 不应产生主机日志 | ||
| 1008 | + // 若未修复,-1 会被 MODULE_ID_MASK 截断并产生日志 | ||
| 1009 | + EXPECT_EQ(0, DlogCheckHostPrintNum(PATH_ROOT, "debug")); | ||
| 1010 | + | ||
| 1011 | + unsetenv("ASCEND_GLOBAL_LOG_LEVEL"); | ||
| 1012 | + unsetenv("ASCEND_PROCESS_LOG_PATH"); | ||
| 1013 | +} | ||
| 1014 | + | ||
| 1015 | +TEST_F(EP_ALOG_HOST_FUNC_UTEST, AcllogInvalidModuleId_Overflow65536) | ||
| 1016 | +{ | ||
| 1017 | + setenv("ASCEND_GLOBAL_LOG_LEVEL", "0", 1); | ||
| 1018 | + setenv("ASCEND_PROCESS_LOG_PATH", PATH_ROOT, 1); | ||
| 1019 | + DlogConstructor(); | ||
| 1020 | + | ||
| 1021 | + // moduleId=65536(0x10000) 超过上限 65535,非法入参,应拒绝记录并在系统日志打印原因 | ||
| 1022 | + acllogRecord(0x10000, DLOG_INFO, "invalid module id %d", 65536); | ||
| 1023 | + CallAcllogVaList(0x10000, DLOG_WARN, "invalid module id %d", 65536); | ||
| 1024 | + | ||
| 1025 | + DlogDestructor(); | ||
| 1026 | + | ||
| 1027 | + // 非法 moduleId 不应产生主机日志 | ||
| 1028 | + // 若未修复,65536 会被 MODULE_ID_MASK(0xFFFF) 截断为模块 0 并产生日志 | ||
| 1029 | + EXPECT_EQ(0, DlogCheckHostPrintNum(PATH_ROOT, "debug")); | ||
| 1030 | + | ||
| 1031 | + unsetenv("ASCEND_GLOBAL_LOG_LEVEL"); | ||
| 1032 | + unsetenv("ASCEND_PROCESS_LOG_PATH"); | ||
| 1033 | +} | ||
| 1034 | + | ||
| 1035 | +TEST_F(EP_ALOG_HOST_FUNC_UTEST, AcllogValidModuleId_Baseline) | ||
| 1036 | +{ | ||
| 1037 | + setenv("ASCEND_GLOBAL_LOG_LEVEL", "0", 1); | ||
| 1038 | + setenv("ASCEND_PROCESS_LOG_PATH", PATH_ROOT, 1); | ||
| 1039 | + DlogConstructor(); | ||
| 1040 | + | ||
| 1041 | + // moduleId=0xff00(65280) 为合法用户模块,应正常记录 | ||
| 1042 | + acllogRecord(0xff00, DLOG_INFO, "valid module log %d", 0xff00); | ||
| 1043 | + | ||
| 1044 | + DlogDestructor(); | ||
| 1045 | + | ||
| 1046 | + // 合法 moduleId 应产生 1 条主机日志 | ||
| 1047 | + EXPECT_EQ(1, DlogCheckHostPrintNum(PATH_ROOT, "debug")); | ||
| 1048 | + | ||
| 1049 | + unsetenv("ASCEND_GLOBAL_LOG_LEVEL"); | ||
| 1050 | + unsetenv("ASCEND_PROCESS_LOG_PATH"); | ||
| 1051 | +} | ||
| 1052 | + | ||
| 1053 | +TEST_F(EP_ALOG_HOST_FUNC_UTEST, AcllogInvalidModuleId) | ||
| 1054 | +{ | ||
| 1055 | + setenv("ASCEND_GLOBAL_LOG_LEVEL", "0", 1); | ||
| 1056 | + setenv("ASCEND_PROCESS_LOG_PATH", PATH_ROOT, 1); | ||
| 1057 | + DlogConstructor(); | ||
| 1058 | + | ||
| 1059 | + // moduleId 超过上限 65535 或为负数,均为非法入参,应拒绝记录并在系统日志打印原因 | ||
| 1060 | + acllogRecord(0x10000, DLOG_INFO, "invalid module id %d", 1); | ||
| 1061 | + CallAcllogVaList(0x20000, DLOG_WARN, "invalid module id %d", 2); | ||
| 1062 | + acllogRecord(-1, DLOG_INFO, "invalid module id %d", 3); | ||
| 1063 | + CallAcllogVaList(-2, DLOG_WARN, "invalid module id %d", 4); | ||
| 1064 | + // 合法 moduleId 仍可正常记录,回归正常路径 | ||
| 1065 | + acllogRecord(0xff00, DLOG_INFO, "valid module log"); | ||
| 1066 | + | ||
| 1067 | + DlogDestructor(); | ||
| 1068 | + | ||
| 1069 | + // 非法 moduleId 不应产生主机日志,仅合法 moduleId 产生 1 条; | ||
| 1070 | + // 若未修复,0x10000/0x20000 会被 MODULE_ID_MASK 截断为模块 0 并产生额外日志(共 3 条) | ||
| 1071 | + EXPECT_EQ(1, DlogCheckHostPrintNum(PATH_ROOT, "debug")); | ||
| 1072 | + | ||
| 1073 | + unsetenv("ASCEND_GLOBAL_LOG_LEVEL"); | ||
| 1074 | + unsetenv("ASCEND_PROCESS_LOG_PATH"); | ||
| 1075 | +} | ||
| 1076 | + | ||
| 995 | TEST_F(EP_ALOG_HOST_FUNC_UTEST, DlogAllInterface) | 1077 | TEST_F(EP_ALOG_HOST_FUNC_UTEST, DlogAllInterface) |
| 996 | { | 1078 | { |
| 997 | // 初始化 | 1079 | // 初始化 |
级别:提示 问题:缺少边界值测试:未覆盖 moduleId=0(最小合法值)和 moduleId=65535(ACLLOG_USER_MODULE_ID_MAX,最大合法值)。 影响:无法验证
>比较运算符是否正确(如误写为>=会导致 65535 被错误拒绝),边界条件回归风险无法被捕获。 修复建议:增加两个测试用例分别验证 moduleId=0 和 moduleId=65535 能正常记录日志(EXPECT_EQ(1, ...))。