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#include "kernel_interface.h"
20
21#define private public
22#define protected public
23#include "memcg_mgr.h"
24#undef private
25#undef protected
26
27namespace OHOS {
28namespace Memory {
29using namespace testing;
30using namespace testing::ext;
31
32class MemcgMgrTest : public testing::Test {
33public:
34    static void SetUpTestCase();
35    static void TearDownTestCase();
36    void SetUp();
37    void TearDown();
38};
39
40void MemcgMgrTest::SetUpTestCase()
41{
42}
43
44void MemcgMgrTest::TearDownTestCase()
45{
46}
47
48void MemcgMgrTest::SetUp()
49{
50}
51
52void MemcgMgrTest::TearDown()
53{
54}
55
56HWTEST_F(MemcgMgrTest, GetRootMemcgTest, TestSize.Level1)
57{
58    Memcg* memcg = MemcgMgr::GetInstance().GetRootMemcg();
59    EXPECT_EQ(memcg != nullptr, true);
60    EXPECT_STREQ(memcg->GetMemcgPath_().c_str(), "/dev/memcg");
61}
62
63HWTEST_F(MemcgMgrTest, SetRootMemcgParaTest, TestSize.Level1)
64{
65    EXPECT_EQ(MemcgMgr::GetInstance().SetRootMemcgPara(), true);
66}
67
68HWTEST_F(MemcgMgrTest, GetUserMemcgTest, TestSize.Level1)
69{
70    unsigned int memcgId = 123456u; // ensure it is a new ID
71    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) == nullptr, true);
72}
73
74HWTEST_F(MemcgMgrTest, AddUserMemcgTest, TestSize.Level1)
75{
76    unsigned int memcgId = 123456u; // ensure it is a new ID
77    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) == nullptr, true);
78    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
79    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) != nullptr, true);
80    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
81    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) == nullptr, true);
82}
83
84HWTEST_F(MemcgMgrTest, RemoveUserMemcgTest, TestSize.Level1)
85{
86    unsigned int memcgId = 123456u; // ensure it is a new ID
87    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
88    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
89    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) == nullptr, true);
90    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), false);
91}
92
93HWTEST_F(MemcgMgrTest, UpdateMemcgScoreAndReclaimRatiosTest, TestSize.Level1)
94{
95    unsigned int memcgId = 123456u; // ensure it is a new ID
96    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
97    ReclaimRatios ratios;
98    EXPECT_EQ(MemcgMgr::GetInstance().UpdateMemcgScoreAndReclaimRatios(memcgId, 200, ratios), true);
99    MemcgMgr::GetInstance().RemoveUserMemcg(memcgId);
100}
101
102HWTEST_F(MemcgMgrTest, AddProcToMemcgTest, TestSize.Level1)
103{
104    unsigned int memcgId = 123456u; // ensure it is a new ID
105    EXPECT_EQ(MemcgMgr::GetInstance().AddProcToMemcg(1234567, memcgId), false);
106    EXPECT_EQ(MemcgMgr::GetInstance().AddProcToMemcg(1, memcgId), true);
107    EXPECT_EQ(MemcgMgr::GetInstance().GetUserMemcg(memcgId) != nullptr, true);
108    KernelInterface::GetInstance().WriteToFile("/dev/memcg/cgroup.procs", "1", false);
109    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
110}
111
112HWTEST_F(MemcgMgrTest, SwapInMemcgTest, TestSize.Level1)
113{
114    unsigned int memcgId = 123456u; // ensure it is a new ID
115    EXPECT_EQ(MemcgMgr::GetInstance().SwapInMemcg(memcgId), false);
116    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
117    EXPECT_EQ(MemcgMgr::GetInstance().SwapInMemcg(memcgId), true);
118    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
119}
120
121HWTEST_F(MemcgMgrTest, GetMemcgSwapInfoTest, TestSize.Level1)
122{
123    unsigned int memcgId = 123456u; // ensure it is a new ID
124    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgSwapInfo(memcgId) == nullptr, true);
125    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
126    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgSwapInfo(memcgId) != nullptr, true);
127    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
128    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgSwapInfo(memcgId) == nullptr, true);
129}
130
131HWTEST_F(MemcgMgrTest, GetMemcgMemInfoTest, TestSize.Level1)
132{
133    unsigned int memcgId = 123456u; // ensure it is a new ID
134    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgMemInfo(memcgId) == nullptr, true);
135    EXPECT_EQ(MemcgMgr::GetInstance().AddUserMemcg(memcgId) != nullptr, true);
136    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgMemInfo(memcgId) != nullptr, true);
137    EXPECT_EQ(MemcgMgr::GetInstance().RemoveUserMemcg(memcgId), true);
138    EXPECT_EQ(MemcgMgr::GetInstance().GetMemcgMemInfo(memcgId) == nullptr, true);
139}
140}
141}
142