1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 #include <libinput.h> 18 19 #include "anr_manager.h" 20 #include "dfx_hisysevent.h" 21 #include "input_event_handler.h" 22 #include "i_input_windows_manager.h" 23 #include "mmi_log.h" 24 #include "napi_constants.h" 25 #include "proto.h" 26 #include "timer_manager.h" 27 #include "window_manager.h" 28 29 namespace OHOS { 30 namespace MMI { 31 namespace { 32 using namespace testing::ext; 33 const std::string PROGRAM_NAME = "uds_session_test"; 34 constexpr int32_t MODULE_TYPE = 1; 35 constexpr int32_t UDS_FD = 1; 36 constexpr int32_t UDS_UID = 100; 37 constexpr int32_t UDS_PID = 100; 38 } // namespace 39 40 class AnrManagerTest : public testing::Test { 41 public: SetUpTestCase(void)42 static void SetUpTestCase(void) {} TearDownTestCase(void)43 static void TearDownTestCase(void) {} 44 }; 45 46 /** 47 * @tc.name: AnrManagerTest_MarkProcessed_001 48 * @tc.desc: Features of the mark processed function 49 * @tc.type: FUNC 50 * @tc.require:SR000HQ0RR 51 */ 52 HWTEST_F(AnrManagerTest, AnrManagerTest_MarkProcessed_001, TestSize.Level1) 53 { 54 CALL_TEST_DEBUG; 55 UDSServer udsServer; 56 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 57 int32_t pid = 123; 58 int32_t eventType = 1; 59 int32_t eventId = 456; 60 ASSERT_NO_FATAL_FAILURE(ANRMgr->MarkProcessed(pid, eventType, eventId)); 61 } 62 63 /** 64 * @tc.name: AnrManagerTest_RemoveTimers_001 65 * @tc.desc: Features of the remove timers function 66 * @tc.type: FUNC 67 * @tc.require:SR000HQ0RR 68 */ 69 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimers_001, TestSize.Level1) 70 { 71 CALL_TEST_DEBUG; 72 UDSServer udsServer; 73 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 74 SessionPtr sess; 75 ASSERT_NO_FATAL_FAILURE(ANRMgr->RemoveTimers(sess)); 76 } 77 78 /** 79 * @tc.name: AnrManagerTest_RemoveTimersByType_001 80 * @tc.desc: Remove timers by type abnormal 81 * @tc.type: FUNC 82 * @tc.require:SR000HQ0RR 83 */ 84 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimersByType_001, TestSize.Level1) 85 { 86 CALL_TEST_DEBUG; 87 UDSServer udsServer; 88 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 89 SessionPtr session; 90 int32_t dispatchType = -1; 91 ASSERT_NO_FATAL_FAILURE(ANRMgr->RemoveTimersByType(session, dispatchType)); 92 } 93 94 /** 95 * @tc.name: AnrManagerTest_RemoveTimersByType_002 96 * @tc.desc: Remove timers by type abnormal 97 * @tc.type: FUNC 98 * @tc.require:SR000HQ0RR 99 */ 100 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimersByType_002, TestSize.Level1) 101 { 102 CALL_TEST_DEBUG; 103 UDSServer udsServer; 104 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 105 SessionPtr session; 106 int32_t monitorType = 0; 107 ASSERT_NO_FATAL_FAILURE(ANRMgr->RemoveTimersByType(session, monitorType)); 108 } 109 110 /** 111 * @tc.name: AnrManagerTest_RemoveTimersByType_003 112 * @tc.desc: Remove timers by type normal 113 * @tc.type: FUNC 114 * @tc.require:SR000HQ0RR 115 */ 116 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimersByType_003, TestSize.Level1) 117 { 118 CALL_TEST_DEBUG; 119 UDSServer udsServer; 120 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 121 SessionPtr session; 122 int32_t illegalType = 123; 123 ASSERT_NO_FATAL_FAILURE(ANRMgr->RemoveTimersByType(session, illegalType)); 124 } 125 126 /** 127 * @tc.name: AnrManagerTest_SetANRNoticedPid_001 128 * @tc.desc: Set noticed pid normal 129 * @tc.type: FUNC 130 * @tc.require:SR000HQ0RR 131 */ 132 HWTEST_F(AnrManagerTest, AnrManagerTest_SetANRNoticedPid_003, TestSize.Level1) 133 { 134 CALL_TEST_DEBUG; 135 UDSServer udsServer; 136 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 137 int32_t pid = 1234; 138 int32_t ret = ANRMgr->SetANRNoticedPid(pid); 139 ASSERT_EQ(ret, RET_OK); 140 } 141 142 /** 143 * @tc.name: AnrManagerTest_SetANRNoticedPid_002 144 * @tc.desc: Set noticed pid abnormal 145 * @tc.type: FUNC 146 * @tc.require:SR000HQ0RR 147 */ 148 HWTEST_F(AnrManagerTest, AnrManagerTest_SetANRNoticedPid_002, TestSize.Level1) 149 { 150 CALL_TEST_DEBUG; 151 UDSServer udsServer; 152 ASSERT_NO_FATAL_FAILURE(ANRMgr->Init(udsServer)); 153 int32_t pid = -1; 154 int32_t ret = ANRMgr->SetANRNoticedPid(pid); 155 ASSERT_EQ(ret, RET_OK); 156 } 157 158 /** 159 * @tc.name: AnrManagerTest_AddTimer_001 160 * @tc.desc: Add timer function normal 161 * @tc.type: FUNC 162 * @tc.require:SR000HQ0RR 163 */ 164 HWTEST_F(AnrManagerTest, AnrManagerTest_AddTimer_001, TestSize.Level1) 165 { 166 CALL_TEST_DEBUG; 167 int32_t type = 1; 168 int32_t id = 1001; 169 int64_t currentTime = 123456789; 170 SessionPtr sess = std::shared_ptr<OHOS::MMI::UDSSession>(); 171 ASSERT_NO_FATAL_FAILURE(ANRMgr->AddTimer(type, id, currentTime, sess)); 172 } 173 174 /** 175 * @tc.name: AnrManagerTest_AddTimer_002 176 * @tc.desc: Add timer function abnormal 177 * @tc.type: FUNC 178 * @tc.require:SR000HQ0RR 179 */ 180 HWTEST_F(AnrManagerTest, AnrManagerTest_AddTimer_002, TestSize.Level1) 181 { 182 CALL_TEST_DEBUG; 183 int32_t type = -1; 184 int32_t id = -2; 185 int64_t currentTime = 123456789; 186 SessionPtr sess = std::shared_ptr<OHOS::MMI::UDSSession>(); 187 ASSERT_NO_FATAL_FAILURE(ANRMgr->AddTimer(type, id, currentTime, sess)); 188 } 189 190 /** 191 * @tc.name: AnrManagerTest_TriggerANR_001 192 * @tc.desc: Trigger function normal 193 * @tc.type: FUNC 194 * @tc.require:SR000HQ0RR 195 */ 196 HWTEST_F(AnrManagerTest, AnrManagerTest_TriggerANR_001, TestSize.Level1) 197 { 198 CALL_TEST_DEBUG; 199 int32_t type = 1; 200 int64_t time = 123456789; 201 SessionPtr sess = std::shared_ptr<OHOS::MMI::UDSSession>(); 202 bool result = ANRMgr->TriggerANR(type, time, sess); 203 EXPECT_FALSE(result); 204 } 205 206 /** 207 * @tc.name: AnrManagerTest_MarkProcessed_002 208 * @tc.desc: Cover the else branch of the if (pid_ != pid) 209 * @tc.type: FUNC 210 * @tc.require: 211 */ 212 HWTEST_F(AnrManagerTest, AnrManagerTest_MarkProcessed_002, TestSize.Level1) 213 { 214 CALL_TEST_DEBUG; 215 ANRManager anrMgr; 216 UDSServer udsServer; 217 int32_t pid = 10; 218 int32_t eventType = 1; 219 int32_t eventId = 100; 220 udsServer.pid_ = 20; 221 anrMgr.pid_ = 10; 222 anrMgr.udsServer_ = &udsServer; 223 ASSERT_EQ(anrMgr.MarkProcessed(pid, eventType, eventId), RET_ERR); 224 } 225 226 /** 227 * @tc.name: AnrManagerTest_AddTimer_003 228 * @tc.desc: Cover the else branch of the 229 * <br> if (sess->GetTokenType() != TokenType::TOKEN_HAP || sess->GetProgramName() == FOUNDATION) 230 * @tc.type: FUNC 231 * @tc.require: 232 */ 233 HWTEST_F(AnrManagerTest, AnrManagerTest_AddTimer_003, TestSize.Level1) 234 { 235 CALL_TEST_DEBUG; 236 ANRManager anrMgr; 237 int32_t type = ANR_MONITOR; 238 int32_t id = 1; 239 int64_t currentTime = 100; 240 std::string programName = "foundation"; 241 SessionPtr sess = std::make_shared<UDSSession>(programName, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 242 sess->SetTokenType(TokenType::TOKEN_NATIVE); 243 ASSERT_NO_FATAL_FAILURE(anrMgr.AddTimer(type, id, currentTime, sess)); 244 245 sess->SetTokenType(TokenType::TOKEN_HAP); 246 ASSERT_NO_FATAL_FAILURE(anrMgr.AddTimer(type, id, currentTime, sess)); 247 } 248 249 /** 250 * @tc.name: AnrManagerTest_AddTimer_004 251 * @tc.desc:Cover the else branch of the if (anrTimerCount_ >= MAX_TIMER_COUNT) 252 * @tc.type: FUNC 253 * @tc.require: 254 */ 255 HWTEST_F(AnrManagerTest, AnrManagerTest_AddTimer_004, TestSize.Level1) 256 { 257 CALL_TEST_DEBUG; 258 ANRManager anrMgr; 259 int32_t type = ANR_MONITOR; 260 int32_t id = 1; 261 int64_t currentTime = 100; 262 SessionPtr sess = std::make_shared<UDSSession>(PROGRAM_NAME, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 263 sess->SetTokenType(TokenType::TOKEN_HAP); 264 anrMgr.anrTimerCount_ = 51; 265 ASSERT_NO_FATAL_FAILURE(anrMgr.AddTimer(type, id, currentTime, sess)); 266 267 anrMgr.anrTimerCount_ = 49; 268 ASSERT_NO_FATAL_FAILURE(anrMgr.AddTimer(type, id, currentTime, sess)); 269 } 270 271 /** 272 * @tc.name: AnrManagerTest_RemoveTimers_002 273 * @tc.desc: Cover the RemoveTimers function branch 274 * @tc.type: FUNC 275 * @tc.require: 276 */ 277 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimers_002, TestSize.Level1) 278 { 279 CALL_TEST_DEBUG; 280 ANRManager anrMgr; 281 SessionPtr sess = std::make_shared<UDSSession>(PROGRAM_NAME, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 282 std::vector<UDSSession::EventTime> events { { 0, 0, -1 }, { 1, 1, 10 } }; 283 sess->events_[ANR_DISPATCH] = events; 284 sess->events_[ANR_MONITOR] = events; 285 ASSERT_NO_FATAL_FAILURE(anrMgr.RemoveTimers(sess)); 286 } 287 288 /** 289 * @tc.name: AnrManagerTest_RemoveTimersByType_004 290 * @tc.desc: Cover the RemoveTimersByType function branch 291 * @tc.type: FUNC 292 * @tc.require: 293 */ 294 HWTEST_F(AnrManagerTest, AnrManagerTest_RemoveTimersByType_004, TestSize.Level1) 295 { 296 CALL_TEST_DEBUG; 297 ANRManager anrMgr; 298 SessionPtr sess = std::make_shared<UDSSession>(PROGRAM_NAME, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 299 int32_t type = 5; 300 ASSERT_NO_FATAL_FAILURE(anrMgr.RemoveTimersByType(sess, type)); 301 302 type = ANR_DISPATCH; 303 std::vector<UDSSession::EventTime> events { { 0, 0, -1 }, { 1, 1, 10 } }; 304 sess->events_[ANR_MONITOR] = events; 305 ASSERT_NO_FATAL_FAILURE(anrMgr.RemoveTimersByType(sess, type)); 306 } 307 308 /** 309 * @tc.name: AnrManagerTest_TriggerANR_002 310 * @tc.desc: Cover the TriggerANR function branch 311 * @tc.type: FUNC 312 * @tc.require: 313 */ 314 HWTEST_F(AnrManagerTest, AnrManagerTest_TriggerANR_002, TestSize.Level1) 315 { 316 CALL_TEST_DEBUG; 317 ANRManager anrMgr; 318 int32_t type = ANR_MONITOR; 319 int64_t time = 1; 320 std::string programName = "foundation"; 321 SessionPtr sess = std::make_shared<UDSSession>(programName, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 322 UDSServer udsServer; 323 anrMgr.udsServer_ = &udsServer; 324 sess->SetTokenType(TokenType::TOKEN_NATIVE); 325 EXPECT_FALSE(anrMgr.TriggerANR(type, time, sess)); 326 327 sess->SetTokenType(TokenType::TOKEN_HAP); 328 EXPECT_FALSE(anrMgr.TriggerANR(type, time, sess)); 329 330 bool status = true; 331 SessionPtr session = std::make_shared<UDSSession>(PROGRAM_NAME, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 332 session->SetTokenType(TokenType::TOKEN_HAP); 333 session->SetAnrStatus(type, status); 334 EXPECT_TRUE(anrMgr.TriggerANR(type, time, session)); 335 336 type = ANR_DISPATCH; 337 status = false; 338 EXPECT_FALSE(anrMgr.TriggerANR(type, time, session)); 339 } 340 341 /** 342 * @tc.name: AnrManagerTest_OnSessionLost 343 * @tc.desc: Cover the OnSessionLost function branch 344 * @tc.type: FUNC 345 * @tc.require: 346 */ 347 HWTEST_F(AnrManagerTest, AnrManagerTest_OnSessionLost, TestSize.Level1) 348 { 349 CALL_TEST_DEBUG; 350 ANRManager anrMgr; 351 SessionPtr sess = std::make_shared<UDSSession>(PROGRAM_NAME, MODULE_TYPE, UDS_FD, UDS_UID, UDS_PID); 352 anrMgr.anrNoticedPid_ = UDS_PID; 353 ASSERT_NO_FATAL_FAILURE(anrMgr.OnSessionLost(sess)); 354 355 anrMgr.anrNoticedPid_ = 200; 356 ASSERT_NO_FATAL_FAILURE(anrMgr.OnSessionLost(sess)); 357 } 358 } // namespace MMI 359 } // namespace OHOS