1ba5c3796Sopenharmony_ci/*
2ba5c3796Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3ba5c3796Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ba5c3796Sopenharmony_ci * you may not use this file except in compliance with the License.
5ba5c3796Sopenharmony_ci * You may obtain a copy of the License at
6ba5c3796Sopenharmony_ci *
7ba5c3796Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ba5c3796Sopenharmony_ci *
9ba5c3796Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ba5c3796Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ba5c3796Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ba5c3796Sopenharmony_ci * See the License for the specific language governing permissions and
13ba5c3796Sopenharmony_ci * limitations under the License.
14ba5c3796Sopenharmony_ci */
15ba5c3796Sopenharmony_ci
16ba5c3796Sopenharmony_ci#include "gtest/gtest.h"
17ba5c3796Sopenharmony_ci
18ba5c3796Sopenharmony_ci#include "utils.h"
19ba5c3796Sopenharmony_ci
20ba5c3796Sopenharmony_ci#define private public
21ba5c3796Sopenharmony_ci#define protected public
22ba5c3796Sopenharmony_ci#include "kernel_interface.h"
23ba5c3796Sopenharmony_ci#include "reclaim_strategy_manager.h"
24ba5c3796Sopenharmony_ci#include "reclaim_strategy_constants.h"
25ba5c3796Sopenharmony_ci#undef private
26ba5c3796Sopenharmony_ci#undef protected
27ba5c3796Sopenharmony_ci
28ba5c3796Sopenharmony_cinamespace OHOS {
29ba5c3796Sopenharmony_cinamespace Memory {
30ba5c3796Sopenharmony_ciusing namespace testing;
31ba5c3796Sopenharmony_ciusing namespace testing::ext;
32ba5c3796Sopenharmony_ci
33ba5c3796Sopenharmony_ciclass ReclaimStrategyManagerTest : public testing::Test {
34ba5c3796Sopenharmony_cipublic:
35ba5c3796Sopenharmony_ci    static void SetUpTestCase();
36ba5c3796Sopenharmony_ci    static void TearDownTestCase();
37ba5c3796Sopenharmony_ci    void SetUp();
38ba5c3796Sopenharmony_ci    void TearDown();
39ba5c3796Sopenharmony_ci};
40ba5c3796Sopenharmony_ci
41ba5c3796Sopenharmony_civoid ReclaimStrategyManagerTest::SetUpTestCase()
42ba5c3796Sopenharmony_ci{
43ba5c3796Sopenharmony_ci}
44ba5c3796Sopenharmony_ci
45ba5c3796Sopenharmony_civoid ReclaimStrategyManagerTest::TearDownTestCase()
46ba5c3796Sopenharmony_ci{
47ba5c3796Sopenharmony_ci}
48ba5c3796Sopenharmony_ci
49ba5c3796Sopenharmony_civoid ReclaimStrategyManagerTest::SetUp()
50ba5c3796Sopenharmony_ci{
51ba5c3796Sopenharmony_ci}
52ba5c3796Sopenharmony_ci
53ba5c3796Sopenharmony_civoid ReclaimStrategyManagerTest::TearDown()
54ba5c3796Sopenharmony_ci{
55ba5c3796Sopenharmony_ci}
56ba5c3796Sopenharmony_ci
57ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, InitTest, TestSize.Level1)
58ba5c3796Sopenharmony_ci{
59ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().Init(), true);
60ba5c3796Sopenharmony_ci}
61ba5c3796Sopenharmony_ci
62ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, NotifyAppStateChangedTest, TestSize.Level1)
63ba5c3796Sopenharmony_ci{
64ba5c3796Sopenharmony_ci    int pid = 1234567;
65ba5c3796Sopenharmony_ci    int appId = 111111;
66ba5c3796Sopenharmony_ci    std::string appName = "com.test";
67ba5c3796Sopenharmony_ci    int userId = 234561;
68ba5c3796Sopenharmony_ci    int score = 100;
69ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
70ba5c3796Sopenharmony_ci        AppAction::OTHERS);
71ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para);
72ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(nullptr);
73ba5c3796Sopenharmony_ci    EXPECT_NE(para, nullptr);
74ba5c3796Sopenharmony_ci}
75ba5c3796Sopenharmony_ci
76ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, NotifyAccountDiedTest, TestSize.Level1)
77ba5c3796Sopenharmony_ci{
78ba5c3796Sopenharmony_ci    int pid = 1234567;
79ba5c3796Sopenharmony_ci    int appId = 111111;
80ba5c3796Sopenharmony_ci    std::string appName = "com.test";
81ba5c3796Sopenharmony_ci    int userId = 234561;
82ba5c3796Sopenharmony_ci    int score = 100;
83ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
84ba5c3796Sopenharmony_ci        AppAction::CREATE_PROCESS_AND_APP);
85ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para);
86ba5c3796Sopenharmony_ci    sleep(3);
87ba5c3796Sopenharmony_ci    UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId);
88ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg != nullptr, true);
89ba5c3796Sopenharmony_ci    std::string memcgPath = memcg->GetMemcgPath_();
90ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAccountDied(userId);
91ba5c3796Sopenharmony_ci    sleep(3);
92ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(userId) == nullptr, true);
93ba5c3796Sopenharmony_ci    EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), false);
94ba5c3796Sopenharmony_ci}
95ba5c3796Sopenharmony_ci
96ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, NotifyAccountPriorityChangedTest, TestSize.Level1)
97ba5c3796Sopenharmony_ci{
98ba5c3796Sopenharmony_ci    int pid = 1234567;
99ba5c3796Sopenharmony_ci    int appId = 111111;
100ba5c3796Sopenharmony_ci    std::string appName = "com.test";
101ba5c3796Sopenharmony_ci    int userId = 234561;
102ba5c3796Sopenharmony_ci    int score = 100;
103ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAccountPriorityChanged(userId, score);
104ba5c3796Sopenharmony_ci    sleep(3);
105ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(userId) == nullptr, true);
106ba5c3796Sopenharmony_ci
107ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
108ba5c3796Sopenharmony_ci        AppAction::CREATE_PROCESS_AND_APP);
109ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para);
110ba5c3796Sopenharmony_ci    sleep(3);
111ba5c3796Sopenharmony_ci    UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId);
112ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg != nullptr, true);
113ba5c3796Sopenharmony_ci    std::string memcgPath = memcg->GetMemcgPath_();
114ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAccountPriorityChanged(userId, score + score);
115ba5c3796Sopenharmony_ci    sleep(3);
116ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->score_, score + score);
117ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAccountDied(userId);
118ba5c3796Sopenharmony_ci    sleep(3);
119ba5c3796Sopenharmony_ci    EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), false);
120ba5c3796Sopenharmony_ci}
121ba5c3796Sopenharmony_ci
122ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, CreateEventHandlerTest, TestSize.Level1)
123ba5c3796Sopenharmony_ci{
124ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().CreateEventHandler(), true);
125ba5c3796Sopenharmony_ci}
126ba5c3796Sopenharmony_ci
127ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, HandleProcessCreateTest, TestSize.Level1)
128ba5c3796Sopenharmony_ci{
129ba5c3796Sopenharmony_ci    int pid = 1234567;
130ba5c3796Sopenharmony_ci    int appId = 111111;
131ba5c3796Sopenharmony_ci    std::string appName = "com.test";
132ba5c3796Sopenharmony_ci    int userId = 234561;
133ba5c3796Sopenharmony_ci    int score = 100;
134ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
135ba5c3796Sopenharmony_ci        AppAction::CREATE_PROCESS_AND_APP);
136ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().NotifyAppStateChanged(para);
137ba5c3796Sopenharmony_ci    sleep(3);
138ba5c3796Sopenharmony_ci    UserMemcg* memcg = MemcgMgr::GetInstance().GetUserMemcg(userId);
139ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg != nullptr, true);
140ba5c3796Sopenharmony_ci    std::string memcgPath = memcg->GetMemcgPath_();
141ba5c3796Sopenharmony_ci    EXPECT_EQ(KernelInterface::GetInstance().IsDirExists(memcgPath), true);
142ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), true);
143ba5c3796Sopenharmony_ci}
144ba5c3796Sopenharmony_ci
145ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, GetReclaimRatiosByScoreTest, TestSize.Level1)
146ba5c3796Sopenharmony_ci{
147ba5c3796Sopenharmony_ci    ReclaimRatios ratios(50, 50, 50);
148ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(0, ratios), true);
149ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(100, ratios), true);
150ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(200, ratios), true);
151ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(500, ratios), true);
152ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().GetReclaimRatiosByScore_(1000, ratios), true);
153ba5c3796Sopenharmony_ci}
154ba5c3796Sopenharmony_ci
155ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, GetValidScoreTest, TestSize.Level1)
156ba5c3796Sopenharmony_ci{
157ba5c3796Sopenharmony_ci    int score = RECLAIM_SCORE_MIN - 1;
158ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().GetValidScore_(score);
159ba5c3796Sopenharmony_ci    EXPECT_EQ(score, RECLAIM_SCORE_MIN);
160ba5c3796Sopenharmony_ci
161ba5c3796Sopenharmony_ci    score = RECLAIM_SCORE_MIN;
162ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().GetValidScore_(score);
163ba5c3796Sopenharmony_ci    EXPECT_EQ(score, RECLAIM_SCORE_MIN);
164ba5c3796Sopenharmony_ci
165ba5c3796Sopenharmony_ci    score = RECLAIM_SCORE_MAX;
166ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().GetValidScore_(score);
167ba5c3796Sopenharmony_ci    EXPECT_EQ(score, RECLAIM_SCORE_MAX);
168ba5c3796Sopenharmony_ci
169ba5c3796Sopenharmony_ci    score = RECLAIM_SCORE_MAX + 1;
170ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().GetValidScore_(score);
171ba5c3796Sopenharmony_ci    EXPECT_EQ(score, RECLAIM_SCORE_MAX);
172ba5c3796Sopenharmony_ci}
173ba5c3796Sopenharmony_ci
174ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, HandleAppStateChangedTest, TestSize.Level1)
175ba5c3796Sopenharmony_ci{
176ba5c3796Sopenharmony_ci    int pid = 1234567;
177ba5c3796Sopenharmony_ci    int appId = 111111;
178ba5c3796Sopenharmony_ci    std::string appName = "com.test";
179ba5c3796Sopenharmony_ci    int userId = 234561;
180ba5c3796Sopenharmony_ci    int userId2 = VALID_USER_ID_MIN - 1;
181ba5c3796Sopenharmony_ci    int score = 100;
182ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
183ba5c3796Sopenharmony_ci        AppAction::OTHERS);
184ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para2 = std::make_shared<ReclaimParam>(pid, appId, appName, userId2, score,
185ba5c3796Sopenharmony_ci        AppAction::OTHERS);
186ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para);
187ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAppStateChanged_(para2), false);
188ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAppStateChanged_(nullptr), false);
189ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), true);
190ba5c3796Sopenharmony_ci}
191ba5c3796Sopenharmony_ci
192ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, HandleAccountDiedTest, TestSize.Level1)
193ba5c3796Sopenharmony_ci{
194ba5c3796Sopenharmony_ci    int pid = 1234567;
195ba5c3796Sopenharmony_ci    int appId = 111111;
196ba5c3796Sopenharmony_ci    std::string appName = "com.test";
197ba5c3796Sopenharmony_ci    int userId = 234561;
198ba5c3796Sopenharmony_ci    int score = 100;
199ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
200ba5c3796Sopenharmony_ci        AppAction::OTHERS);
201ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para);
202ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), true);
203ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), false);
204ba5c3796Sopenharmony_ci    userId = 23456;
205ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), false);
206ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), false);
207ba5c3796Sopenharmony_ci}
208ba5c3796Sopenharmony_ci
209ba5c3796Sopenharmony_ciHWTEST_F(ReclaimStrategyManagerTest, HandleAccountPriorityChangedTest, TestSize.Level1)
210ba5c3796Sopenharmony_ci{
211ba5c3796Sopenharmony_ci    int pid = 1234567;
212ba5c3796Sopenharmony_ci    int appId = 111111;
213ba5c3796Sopenharmony_ci    std::string appName = "com.test";
214ba5c3796Sopenharmony_ci    int userId = 234561;
215ba5c3796Sopenharmony_ci    int score = 100;
216ba5c3796Sopenharmony_ci    std::shared_ptr<ReclaimParam> para = std::make_shared<ReclaimParam>(pid, appId, appName, userId, score,
217ba5c3796Sopenharmony_ci        AppAction::OTHERS);
218ba5c3796Sopenharmony_ci    ReclaimStrategyManager::GetInstance().HandleProcessCreate_(para);
219ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountPriorityChanged_(userId, RECLAIM_SCORE_MIN), true);
220ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(userId), true);
221ba5c3796Sopenharmony_ci    EXPECT_EQ(ReclaimStrategyManager::GetInstance().HandleAccountDied_(RECLAIM_SCORE_MIN), false);
222ba5c3796Sopenharmony_ci    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(userId), false);
223ba5c3796Sopenharmony_ci}
224ba5c3796Sopenharmony_ci}
225ba5c3796Sopenharmony_ci}
226