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