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