已合并
fix: 回合acllog接口moduleId校验及文档示例 #3611
fix: 回合acllog接口moduleId校验及文档示例 #3611
已合并
zhangjie创建于 7月13日
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
651extern "C" LOG_FUNC_VISIBILITY __attribute((weak)) void acllogVaList(int32_t moduleId, int32_t level, const char *fmt,651extern "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_utest25 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)
zhangjie
zhangjiezhangjie7月13日

级别:提示 问题:缺少边界值测试:未覆盖 moduleId=0(最小合法值)和 moduleId=65535(ACLLOG_USER_MODULE_ID_MAX,最大合法值)。 影响:无法验证 > 比较运算符是否正确(如误写为 >= 会导致 65535 被错误拒绝),边界条件回归风险无法被捕获。 修复建议:增加两个测试用例分别验证 moduleId=0 和 moduleId=65535 能正常记录日志(EXPECT_EQ(1, ...))。

likedislike
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+ 
995TEST_F(EP_ALOG_HOST_FUNC_UTEST, DlogAllInterface)1077TEST_F(EP_ALOG_HOST_FUNC_UTEST, DlogAllInterface)
996{1078{
997 // 初始化1079 // 初始化