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 "memcg.h"
23ba5c3796Sopenharmony_ci#undef private
24ba5c3796Sopenharmony_ci#undef protected
25ba5c3796Sopenharmony_ci
26ba5c3796Sopenharmony_cinamespace OHOS {
27ba5c3796Sopenharmony_cinamespace Memory {
28ba5c3796Sopenharmony_ciusing namespace testing;
29ba5c3796Sopenharmony_ciusing namespace testing::ext;
30ba5c3796Sopenharmony_ci
31ba5c3796Sopenharmony_ciclass MemcgTest : public testing::Test {
32ba5c3796Sopenharmony_cipublic:
33ba5c3796Sopenharmony_ci    static void SetUpTestCase();
34ba5c3796Sopenharmony_ci    static void TearDownTestCase();
35ba5c3796Sopenharmony_ci    void SetUp();
36ba5c3796Sopenharmony_ci    void TearDown();
37ba5c3796Sopenharmony_ci};
38ba5c3796Sopenharmony_ci
39ba5c3796Sopenharmony_civoid MemcgTest::SetUpTestCase()
40ba5c3796Sopenharmony_ci{
41ba5c3796Sopenharmony_ci}
42ba5c3796Sopenharmony_ci
43ba5c3796Sopenharmony_civoid MemcgTest::TearDownTestCase()
44ba5c3796Sopenharmony_ci{
45ba5c3796Sopenharmony_ci}
46ba5c3796Sopenharmony_ci
47ba5c3796Sopenharmony_civoid MemcgTest::SetUp()
48ba5c3796Sopenharmony_ci{
49ba5c3796Sopenharmony_ci}
50ba5c3796Sopenharmony_ci
51ba5c3796Sopenharmony_civoid MemcgTest::TearDown()
52ba5c3796Sopenharmony_ci{
53ba5c3796Sopenharmony_ci}
54ba5c3796Sopenharmony_ci
55ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, CreateMemcgTest, TestSize.Level1)
56ba5c3796Sopenharmony_ci{
57ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
58ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg != nullptr, true);
59ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->swapInfo_ != nullptr, true);
60ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->memInfo_ != nullptr, true);
61ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_ != nullptr, true);
62ba5c3796Sopenharmony_ci    delete memcg;
63ba5c3796Sopenharmony_ci    memcg = nullptr;
64ba5c3796Sopenharmony_ci}
65ba5c3796Sopenharmony_ci
66ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, UpdateMemInfoFromKernelTest, TestSize.Level1)
67ba5c3796Sopenharmony_ci{
68ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
69ba5c3796Sopenharmony_ci    bool ret = memcg->UpdateMemInfoFromKernel();
70ba5c3796Sopenharmony_ci    EXPECT_EQ(ret, true);
71ba5c3796Sopenharmony_ci    delete memcg;
72ba5c3796Sopenharmony_ci    memcg = nullptr;
73ba5c3796Sopenharmony_ci}
74ba5c3796Sopenharmony_ci
75ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetScoreTest, TestSize.Level1)
76ba5c3796Sopenharmony_ci{
77ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
78ba5c3796Sopenharmony_ci    int score = 0;
79ba5c3796Sopenharmony_ci    memcg->SetScore(score);
80ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->score_, score);
81ba5c3796Sopenharmony_ci    score = -1;
82ba5c3796Sopenharmony_ci    memcg->SetScore(score);
83ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->score_, score);
84ba5c3796Sopenharmony_ci    score = 2000;
85ba5c3796Sopenharmony_ci    memcg->SetScore(score);
86ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->score_, score);
87ba5c3796Sopenharmony_ci    delete memcg;
88ba5c3796Sopenharmony_ci    memcg = nullptr;
89ba5c3796Sopenharmony_ci}
90ba5c3796Sopenharmony_ci
91ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetReclaimRatiosTest, TestSize.Level1)
92ba5c3796Sopenharmony_ci{
93ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
94ba5c3796Sopenharmony_ci    memcg->SetReclaimRatios(0, 0, 0);
95ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 0u);
96ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 0u);
97ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 0u);
98ba5c3796Sopenharmony_ci    memcg->SetReclaimRatios(100, 100, 100);
99ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 100u);
100ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 100u);
101ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 100u);
102ba5c3796Sopenharmony_ci
103ba5c3796Sopenharmony_ci    ReclaimRatios ratios(50, 50, 50);
104ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->SetReclaimRatios(ratios), true);
105ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 50u);
106ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 50u);
107ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 50u);
108ba5c3796Sopenharmony_ci    delete memcg;
109ba5c3796Sopenharmony_ci    memcg = nullptr;
110ba5c3796Sopenharmony_ci}
111ba5c3796Sopenharmony_ci
112ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetScoreAndReclaimRatiosToKernelTest, TestSize.Level1)
113ba5c3796Sopenharmony_ci{
114ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
115ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->SetScoreAndReclaimRatiosToKernel(), true);
116ba5c3796Sopenharmony_ci    delete memcg;
117ba5c3796Sopenharmony_ci    memcg = nullptr;
118ba5c3796Sopenharmony_ci}
119ba5c3796Sopenharmony_ci
120ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SwapInTest, TestSize.Level1)
121ba5c3796Sopenharmony_ci{
122ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
123ba5c3796Sopenharmony_ci    EXPECT_EQ(memcg->SwapIn(), true);
124ba5c3796Sopenharmony_ci    delete memcg;
125ba5c3796Sopenharmony_ci    memcg = nullptr;
126ba5c3796Sopenharmony_ci}
127ba5c3796Sopenharmony_ci
128ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, GetMemcgPathTest, TestSize.Level1)
129ba5c3796Sopenharmony_ci{
130ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
131ba5c3796Sopenharmony_ci    EXPECT_STREQ(memcg->GetMemcgPath_().c_str(), "/dev/memcg");
132ba5c3796Sopenharmony_ci    delete memcg;
133ba5c3796Sopenharmony_ci    memcg = nullptr;
134ba5c3796Sopenharmony_ci}
135ba5c3796Sopenharmony_ci
136ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, ReadScoreAndReclaimRatiosFromKernelTest, TestSize.Level1)
137ba5c3796Sopenharmony_ci{
138ba5c3796Sopenharmony_ci    Memcg* memcg = new Memcg();
139ba5c3796Sopenharmony_ci    int score = 0;
140ba5c3796Sopenharmony_ci    unsigned int mem2zramRatio = 0;
141ba5c3796Sopenharmony_ci    unsigned int zram2ufsRatio = 0;
142ba5c3796Sopenharmony_ci    unsigned int refaultThreshold = 0;
143ba5c3796Sopenharmony_ci    bool ret = memcg->ReadScoreAndReclaimRatiosFromKernel_(score, mem2zramRatio, zram2ufsRatio, refaultThreshold);
144ba5c3796Sopenharmony_ci    EXPECT_EQ(ret, true);
145ba5c3796Sopenharmony_ci    delete memcg;
146ba5c3796Sopenharmony_ci    memcg = nullptr;
147ba5c3796Sopenharmony_ci}
148ba5c3796Sopenharmony_ci
149ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetRatiosByValueTest, TestSize.Level1)
150ba5c3796Sopenharmony_ci{
151ba5c3796Sopenharmony_ci    unsigned int mem2zramRatio = 12345;
152ba5c3796Sopenharmony_ci    unsigned int zram2ufsRatio = 54321;
153ba5c3796Sopenharmony_ci    unsigned int refaultThreshold = 66666;
154ba5c3796Sopenharmony_ci    ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold);
155ba5c3796Sopenharmony_ci    ratios.SetRatiosByValue(mem2zramRatio, zram2ufsRatio, refaultThreshold);
156ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.mem2zramRatio_, 100);
157ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.zram2ufsRatio_, 100);
158ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.refaultThreshold_, 66666);
159ba5c3796Sopenharmony_ci    mem2zramRatio = 58;
160ba5c3796Sopenharmony_ci    zram2ufsRatio = 85;
161ba5c3796Sopenharmony_ci    refaultThreshold = 77777;
162ba5c3796Sopenharmony_ci    ratios.SetRatiosByValue(mem2zramRatio, zram2ufsRatio, refaultThreshold);
163ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.mem2zramRatio_, 58);
164ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.zram2ufsRatio_, 85);
165ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.refaultThreshold_, 77777);
166ba5c3796Sopenharmony_ci}
167ba5c3796Sopenharmony_ci
168ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetRatiosTest, TestSize.Level1)
169ba5c3796Sopenharmony_ci{
170ba5c3796Sopenharmony_ci    unsigned int mem2zramRatio = 12345;
171ba5c3796Sopenharmony_ci    unsigned int zram2ufsRatio = 54321;
172ba5c3796Sopenharmony_ci    unsigned int refaultThreshold = 66666;
173ba5c3796Sopenharmony_ci    ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold);
174ba5c3796Sopenharmony_ci    ratios.SetRatios(ratios);
175ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.mem2zramRatio_, 100);
176ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.zram2ufsRatio_, 100);
177ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.refaultThreshold_, 66666);
178ba5c3796Sopenharmony_ci    mem2zramRatio = 58;
179ba5c3796Sopenharmony_ci    zram2ufsRatio = 85;
180ba5c3796Sopenharmony_ci    refaultThreshold = 77777;
181ba5c3796Sopenharmony_ci    ReclaimRatios ratios2(mem2zramRatio, zram2ufsRatio, refaultThreshold);
182ba5c3796Sopenharmony_ci    ratios.SetRatios(ratios2);
183ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.mem2zramRatio_, 58);
184ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.zram2ufsRatio_, 85);
185ba5c3796Sopenharmony_ci    EXPECT_EQ(ratios.refaultThreshold_, 77777);
186ba5c3796Sopenharmony_ci}
187ba5c3796Sopenharmony_ci
188ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, ToStringTest, TestSize.Level1)
189ba5c3796Sopenharmony_ci{
190ba5c3796Sopenharmony_ci    unsigned int mem2zramRatio = 12345;
191ba5c3796Sopenharmony_ci    unsigned int zram2ufsRatio = 54321;
192ba5c3796Sopenharmony_ci    unsigned int refaultThreshold = 66666;
193ba5c3796Sopenharmony_ci    ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold);
194ba5c3796Sopenharmony_ci    std::string ret = ratios.ToString();
195ba5c3796Sopenharmony_ci    EXPECT_EQ(ret, "mem2zramRatio:100 zram2ufsRatio:100 refaultThreshold:66666");
196ba5c3796Sopenharmony_ci}
197ba5c3796Sopenharmony_ci
198ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, CreateMemcgDirTest, TestSize.Level1)
199ba5c3796Sopenharmony_ci{
200ba5c3796Sopenharmony_ci    unsigned int userId = 23456;
201ba5c3796Sopenharmony_ci    UserMemcg usermemcg= UserMemcg(userId);
202ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.CreateMemcgDir(), true);
203ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.RemoveMemcgDir(), true);
204ba5c3796Sopenharmony_ci}
205ba5c3796Sopenharmony_ci
206ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, RemoveMemcgDirTest, TestSize.Level1)
207ba5c3796Sopenharmony_ci{
208ba5c3796Sopenharmony_ci    unsigned int userId = 23456;
209ba5c3796Sopenharmony_ci    UserMemcg usermemcg= UserMemcg(userId);
210ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.CreateMemcgDir(), true);
211ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.RemoveMemcgDir(), true);
212ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.RemoveMemcgDir(), false);
213ba5c3796Sopenharmony_ci}
214ba5c3796Sopenharmony_ci
215ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, AddProcTest, TestSize.Level1)
216ba5c3796Sopenharmony_ci{
217ba5c3796Sopenharmony_ci    unsigned int userId = 23456;
218ba5c3796Sopenharmony_ci    UserMemcg usermemcg= UserMemcg(userId);
219ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.CreateMemcgDir(), true);
220ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.AddProc(userId), false);
221ba5c3796Sopenharmony_ci    EXPECT_EQ(usermemcg.RemoveMemcgDir(), true);
222ba5c3796Sopenharmony_ci}
223ba5c3796Sopenharmony_ci}
224ba5c3796Sopenharmony_ci}
225