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