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
26namespace OHOS {
27namespace Memory {
28using namespace testing;
29using namespace testing::ext;
30
31class MemcgTest : public testing::Test {
32public:
33    static void SetUpTestCase();
34    static void TearDownTestCase();
35    void SetUp();
36    void TearDown();
37};
38
39void MemcgTest::SetUpTestCase()
40{
41}
42
43void MemcgTest::TearDownTestCase()
44{
45}
46
47void MemcgTest::SetUp()
48{
49}
50
51void MemcgTest::TearDown()
52{
53}
54
55HWTEST_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
66HWTEST_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
75HWTEST_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
91HWTEST_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
112HWTEST_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
120HWTEST_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
128HWTEST_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
136HWTEST_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
149HWTEST_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
168HWTEST_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
188HWTEST_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
198HWTEST_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
206HWTEST_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
215HWTEST_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