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