1/* 2 * Copyright (c) 2022 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 18#include "utils.h" 19 20#define private public 21#define protected public 22#include "kernel_interface.h" 23#include "reclaim_strategy_manager.h" 24#include "reclaim_strategy_constants.h" 25#undef private 26#undef protected 27 28namespace OHOS { 29namespace Memory { 30using namespace testing; 31using namespace testing::ext; 32 33class ReclaimStrategyManagerTest : public testing::Test { 34public: 35 static void SetUpTestCase(); 36 static void TearDownTestCase(); 37 void SetUp(); 38 void TearDown(); 39}; 40 41void ReclaimStrategyManagerTest::SetUpTestCase() 42{ 43} 44 45void ReclaimStrategyManagerTest::TearDownTestCase() 46{ 47} 48 49void ReclaimStrategyManagerTest::SetUp() 50{ 51} 52 53void ReclaimStrategyManagerTest::TearDown() 54{ 55} 56 57HWTEST_F(ReclaimStrategyManagerTest, InitTest, TestSize.Level1) 58{ 59 EXPECT_EQ(ReclaimStrategyManager::GetInstance().Init(), true); 60} 61 62HWTEST_F(ReclaimStrategyManagerTest, NotifyAppStateChangedTest, TestSize.Level1) 63{ 64 int pid = 1234567; 65 int appId = 111111; 66 std::string appName = "com.test"; 67 int userId = 234561; 68 int score = 100; 69 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 70 AppAction::OTHERS); 71 ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para); 72 ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(nullptr); 73 EXPECT_NE(para, nullptr); 74} 75 76HWTEST_F(ReclaimStrategyManagerTest, NotifyAccountDiedTest, TestSize.Level1) 77{ 78 int pid = 1234567; 79 int appId = 111111; 80 std::string appName = "com.test"; 81 int userId = 234561; 82 int score = 100; 83 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 84 AppAction::CREATE_PROCESS_AND_APP); 85 ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para); 86 sleep(3); 87 UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId); 88 EXPECT_EQ(memcg != nullptr, true); 89 std::string memcgPath = memcg->GetMemcgPath_(); 90 ReclaimStrategyManager::GetInstance().NotifyAccountDied(userId); 91 sleep(3); 92 EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(userId) == nullptr, true); 93 EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), false); 94} 95 96HWTEST_F(ReclaimStrategyManagerTest, NotifyAccountPriorityChangedTest, TestSize.Level1) 97{ 98 int pid = 1234567; 99 int appId = 111111; 100 std::string appName = "com.test"; 101 int userId = 234561; 102 int score = 100; 103 ReclaimStrategyManager::GetInstance().NotifyAccountPriorityChanged(userId, score); 104 sleep(3); 105 EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(userId) == nullptr, true); 106 107 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 108 AppAction::CREATE_PROCESS_AND_APP); 109 ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para); 110 sleep(3); 111 UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId); 112 EXPECT_EQ(memcg != nullptr, true); 113 std::string memcgPath = memcg->GetMemcgPath_(); 114 ReclaimStrategyManager::GetInstance().NotifyAccountPriorityChanged(userId, score + score); 115 sleep(3); 116 EXPECT_EQ(memcg->score_, score + score); 117 ReclaimStrategyManager::GetInstance().NotifyAccountDied(userId); 118 sleep(3); 119 EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), false); 120} 121 122HWTEST_F(ReclaimStrategyManagerTest, CreateEventHandlerTest, TestSize.Level1) 123{ 124 EXPECT_EQ(ReclaimStrategyManager::GetInstance().CreateEventHandler(), true); 125} 126 127HWTEST_F(ReclaimStrategyManagerTest, HandleProcessCreateTest, TestSize.Level1) 128{ 129 int pid = 1234567; 130 int appId = 111111; 131 std::string appName = "com.test"; 132 int userId = 234561; 133 int score = 100; 134 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 135 AppAction::CREATE_PROCESS_AND_APP); 136 ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para); 137 sleep(3); 138 UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId); 139 EXPECT_EQ(memcg != nullptr, true); 140 std::string memcgPath = memcg->GetMemcgPath_(); 141 EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), true); 142 EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), true); 143} 144 145HWTEST_F(ReclaimStrategyManagerTest, GetReclaimRatiosByScoreTest, TestSize.Level1) 146{ 147 ReclaimRatios ratios(50, 50, 50); 148 EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(0, ratios), true); 149 EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(100, ratios), true); 150 EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(200, ratios), true); 151 EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(500, ratios), true); 152 EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(1000, ratios), true); 153} 154 155HWTEST_F(ReclaimStrategyManagerTest, GetValidScoreTest, TestSize.Level1) 156{ 157 int score = RECLAIM_SCORE_MIN - 1; 158 ReclaimStrategyManager::GetInstance().GetValidScore_(score); 159 EXPECT_EQ(score, RECLAIM_SCORE_MIN); 160 161 score = RECLAIM_SCORE_MIN; 162 ReclaimStrategyManager::GetInstance().GetValidScore_(score); 163 EXPECT_EQ(score, RECLAIM_SCORE_MIN); 164 165 score = RECLAIM_SCORE_MAX; 166 ReclaimStrategyManager::GetInstance().GetValidScore_(score); 167 EXPECT_EQ(score, RECLAIM_SCORE_MAX); 168 169 score = RECLAIM_SCORE_MAX + 1; 170 ReclaimStrategyManager::GetInstance().GetValidScore_(score); 171 EXPECT_EQ(score, RECLAIM_SCORE_MAX); 172} 173 174HWTEST_F(ReclaimStrategyManagerTest, HandleAppStateChangedTest, TestSize.Level1) 175{ 176 int pid = 1234567; 177 int appId = 111111; 178 std::string appName = "com.test"; 179 int userId = 234561; 180 int userId2 = VALID_USER_ID_MIN - 1; 181 int score = 100; 182 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 183 AppAction::OTHERS); 184 std::shared_ptr<ReclaimParam> para2 = std::make_shared<ReclaimParam>(pid, appId, appName, userId2, score, 185 AppAction::OTHERS); 186 ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para); 187 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAppStateChanged_(para2), false); 188 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAppStateChanged_(nullptr), false); 189 EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), true); 190} 191 192HWTEST_F(ReclaimStrategyManagerTest, HandleAccountDiedTest, TestSize.Level1) 193{ 194 int pid = 1234567; 195 int appId = 111111; 196 std::string appName = "com.test"; 197 int userId = 234561; 198 int score = 100; 199 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 200 AppAction::OTHERS); 201 ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para); 202 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), true); 203 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), false); 204 userId = 23456; 205 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), false); 206 EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), false); 207} 208 209HWTEST_F(ReclaimStrategyManagerTest, HandleAccountPriorityChangedTest, TestSize.Level1) 210{ 211 int pid = 1234567; 212 int appId = 111111; 213 std::string appName = "com.test"; 214 int userId = 234561; 215 int score = 100; 216 std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score, 217 AppAction::OTHERS); 218 ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para); 219 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountPriorityChanged_(userId, RECLAIM_SCORE_MIN), true); 220 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), true); 221 EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(RECLAIM_SCORE_MIN), false); 222 EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), false); 223} 224} 225} 226