1ba5c3796Sopenharmony_ci/* 2ba5c3796Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3ba5c3796Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ba5c3796Sopenharmony_ci * you may not use this file except in compliance with the License. 5ba5c3796Sopenharmony_ci * You may obtain a copy of the License at 6ba5c3796Sopenharmony_ci * 7ba5c3796Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ba5c3796Sopenharmony_ci * 9ba5c3796Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ba5c3796Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ba5c3796Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ba5c3796Sopenharmony_ci * See the License for the specific language governing permissions and 13ba5c3796Sopenharmony_ci * limitations under the License. 14ba5c3796Sopenharmony_ci */ 15ba5c3796Sopenharmony_ci 16ba5c3796Sopenharmony_ci#include "gtest/gtest.h" 17ba5c3796Sopenharmony_ci 18ba5c3796Sopenharmony_ci#include "utils.h" 19ba5c3796Sopenharmony_ci 20ba5c3796Sopenharmony_ci#define private public 21ba5c3796Sopenharmony_ci#define protected public 22ba5c3796Sopenharmony_ci#include "memcg.h" 23ba5c3796Sopenharmony_ci#undef private 24ba5c3796Sopenharmony_ci#undef protected 25ba5c3796Sopenharmony_ci 26ba5c3796Sopenharmony_cinamespace OHOS { 27ba5c3796Sopenharmony_cinamespace Memory { 28ba5c3796Sopenharmony_ciusing namespace testing; 29ba5c3796Sopenharmony_ciusing namespace testing::ext; 30ba5c3796Sopenharmony_ci 31ba5c3796Sopenharmony_ciclass MemcgTest : public testing::Test { 32ba5c3796Sopenharmony_cipublic: 33ba5c3796Sopenharmony_ci static void SetUpTestCase(); 34ba5c3796Sopenharmony_ci static void TearDownTestCase(); 35ba5c3796Sopenharmony_ci void SetUp(); 36ba5c3796Sopenharmony_ci void TearDown(); 37ba5c3796Sopenharmony_ci}; 38ba5c3796Sopenharmony_ci 39ba5c3796Sopenharmony_civoid MemcgTest::SetUpTestCase() 40ba5c3796Sopenharmony_ci{ 41ba5c3796Sopenharmony_ci} 42ba5c3796Sopenharmony_ci 43ba5c3796Sopenharmony_civoid MemcgTest::TearDownTestCase() 44ba5c3796Sopenharmony_ci{ 45ba5c3796Sopenharmony_ci} 46ba5c3796Sopenharmony_ci 47ba5c3796Sopenharmony_civoid MemcgTest::SetUp() 48ba5c3796Sopenharmony_ci{ 49ba5c3796Sopenharmony_ci} 50ba5c3796Sopenharmony_ci 51ba5c3796Sopenharmony_civoid MemcgTest::TearDown() 52ba5c3796Sopenharmony_ci{ 53ba5c3796Sopenharmony_ci} 54ba5c3796Sopenharmony_ci 55ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, CreateMemcgTest, TestSize.Level1) 56ba5c3796Sopenharmony_ci{ 57ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 58ba5c3796Sopenharmony_ci EXPECT_EQ(memcg != nullptr, true); 59ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->swapInfo_ != nullptr, true); 60ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->memInfo_ != nullptr, true); 61ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_ != nullptr, true); 62ba5c3796Sopenharmony_ci delete memcg; 63ba5c3796Sopenharmony_ci memcg = nullptr; 64ba5c3796Sopenharmony_ci} 65ba5c3796Sopenharmony_ci 66ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, UpdateMemInfoFromKernelTest, TestSize.Level1) 67ba5c3796Sopenharmony_ci{ 68ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 69ba5c3796Sopenharmony_ci bool ret = memcg->UpdateMemInfoFromKernel(); 70ba5c3796Sopenharmony_ci EXPECT_EQ(ret, true); 71ba5c3796Sopenharmony_ci delete memcg; 72ba5c3796Sopenharmony_ci memcg = nullptr; 73ba5c3796Sopenharmony_ci} 74ba5c3796Sopenharmony_ci 75ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetScoreTest, TestSize.Level1) 76ba5c3796Sopenharmony_ci{ 77ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 78ba5c3796Sopenharmony_ci int score = 0; 79ba5c3796Sopenharmony_ci memcg->SetScore(score); 80ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->score_, score); 81ba5c3796Sopenharmony_ci score = -1; 82ba5c3796Sopenharmony_ci memcg->SetScore(score); 83ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->score_, score); 84ba5c3796Sopenharmony_ci score = 2000; 85ba5c3796Sopenharmony_ci memcg->SetScore(score); 86ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->score_, score); 87ba5c3796Sopenharmony_ci delete memcg; 88ba5c3796Sopenharmony_ci memcg = nullptr; 89ba5c3796Sopenharmony_ci} 90ba5c3796Sopenharmony_ci 91ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetReclaimRatiosTest, TestSize.Level1) 92ba5c3796Sopenharmony_ci{ 93ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 94ba5c3796Sopenharmony_ci memcg->SetReclaimRatios(0, 0, 0); 95ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 0u); 96ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 0u); 97ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 0u); 98ba5c3796Sopenharmony_ci memcg->SetReclaimRatios(100, 100, 100); 99ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 100u); 100ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 100u); 101ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 100u); 102ba5c3796Sopenharmony_ci 103ba5c3796Sopenharmony_ci ReclaimRatios ratios(50, 50, 50); 104ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->SetReclaimRatios(ratios), true); 105ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->mem2zramRatio_, 50u); 106ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->zram2ufsRatio_, 50u); 107ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->reclaimRatios_->refaultThreshold_, 50u); 108ba5c3796Sopenharmony_ci delete memcg; 109ba5c3796Sopenharmony_ci memcg = nullptr; 110ba5c3796Sopenharmony_ci} 111ba5c3796Sopenharmony_ci 112ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetScoreAndReclaimRatiosToKernelTest, TestSize.Level1) 113ba5c3796Sopenharmony_ci{ 114ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 115ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->SetScoreAndReclaimRatiosToKernel(), true); 116ba5c3796Sopenharmony_ci delete memcg; 117ba5c3796Sopenharmony_ci memcg = nullptr; 118ba5c3796Sopenharmony_ci} 119ba5c3796Sopenharmony_ci 120ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SwapInTest, TestSize.Level1) 121ba5c3796Sopenharmony_ci{ 122ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 123ba5c3796Sopenharmony_ci EXPECT_EQ(memcg->SwapIn(), true); 124ba5c3796Sopenharmony_ci delete memcg; 125ba5c3796Sopenharmony_ci memcg = nullptr; 126ba5c3796Sopenharmony_ci} 127ba5c3796Sopenharmony_ci 128ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, GetMemcgPathTest, TestSize.Level1) 129ba5c3796Sopenharmony_ci{ 130ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 131ba5c3796Sopenharmony_ci EXPECT_STREQ(memcg->GetMemcgPath_().c_str(), "/dev/memcg"); 132ba5c3796Sopenharmony_ci delete memcg; 133ba5c3796Sopenharmony_ci memcg = nullptr; 134ba5c3796Sopenharmony_ci} 135ba5c3796Sopenharmony_ci 136ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, ReadScoreAndReclaimRatiosFromKernelTest, TestSize.Level1) 137ba5c3796Sopenharmony_ci{ 138ba5c3796Sopenharmony_ci Memcg* memcg = new Memcg(); 139ba5c3796Sopenharmony_ci int score = 0; 140ba5c3796Sopenharmony_ci unsigned int mem2zramRatio = 0; 141ba5c3796Sopenharmony_ci unsigned int zram2ufsRatio = 0; 142ba5c3796Sopenharmony_ci unsigned int refaultThreshold = 0; 143ba5c3796Sopenharmony_ci bool ret = memcg->ReadScoreAndReclaimRatiosFromKernel_(score, mem2zramRatio, zram2ufsRatio, refaultThreshold); 144ba5c3796Sopenharmony_ci EXPECT_EQ(ret, true); 145ba5c3796Sopenharmony_ci delete memcg; 146ba5c3796Sopenharmony_ci memcg = nullptr; 147ba5c3796Sopenharmony_ci} 148ba5c3796Sopenharmony_ci 149ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetRatiosByValueTest, TestSize.Level1) 150ba5c3796Sopenharmony_ci{ 151ba5c3796Sopenharmony_ci unsigned int mem2zramRatio = 12345; 152ba5c3796Sopenharmony_ci unsigned int zram2ufsRatio = 54321; 153ba5c3796Sopenharmony_ci unsigned int refaultThreshold = 66666; 154ba5c3796Sopenharmony_ci ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold); 155ba5c3796Sopenharmony_ci ratios.SetRatiosByValue(mem2zramRatio, zram2ufsRatio, refaultThreshold); 156ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.mem2zramRatio_, 100); 157ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.zram2ufsRatio_, 100); 158ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.refaultThreshold_, 66666); 159ba5c3796Sopenharmony_ci mem2zramRatio = 58; 160ba5c3796Sopenharmony_ci zram2ufsRatio = 85; 161ba5c3796Sopenharmony_ci refaultThreshold = 77777; 162ba5c3796Sopenharmony_ci ratios.SetRatiosByValue(mem2zramRatio, zram2ufsRatio, refaultThreshold); 163ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.mem2zramRatio_, 58); 164ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.zram2ufsRatio_, 85); 165ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.refaultThreshold_, 77777); 166ba5c3796Sopenharmony_ci} 167ba5c3796Sopenharmony_ci 168ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, SetRatiosTest, TestSize.Level1) 169ba5c3796Sopenharmony_ci{ 170ba5c3796Sopenharmony_ci unsigned int mem2zramRatio = 12345; 171ba5c3796Sopenharmony_ci unsigned int zram2ufsRatio = 54321; 172ba5c3796Sopenharmony_ci unsigned int refaultThreshold = 66666; 173ba5c3796Sopenharmony_ci ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold); 174ba5c3796Sopenharmony_ci ratios.SetRatios(ratios); 175ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.mem2zramRatio_, 100); 176ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.zram2ufsRatio_, 100); 177ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.refaultThreshold_, 66666); 178ba5c3796Sopenharmony_ci mem2zramRatio = 58; 179ba5c3796Sopenharmony_ci zram2ufsRatio = 85; 180ba5c3796Sopenharmony_ci refaultThreshold = 77777; 181ba5c3796Sopenharmony_ci ReclaimRatios ratios2(mem2zramRatio, zram2ufsRatio, refaultThreshold); 182ba5c3796Sopenharmony_ci ratios.SetRatios(ratios2); 183ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.mem2zramRatio_, 58); 184ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.zram2ufsRatio_, 85); 185ba5c3796Sopenharmony_ci EXPECT_EQ(ratios.refaultThreshold_, 77777); 186ba5c3796Sopenharmony_ci} 187ba5c3796Sopenharmony_ci 188ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, ToStringTest, TestSize.Level1) 189ba5c3796Sopenharmony_ci{ 190ba5c3796Sopenharmony_ci unsigned int mem2zramRatio = 12345; 191ba5c3796Sopenharmony_ci unsigned int zram2ufsRatio = 54321; 192ba5c3796Sopenharmony_ci unsigned int refaultThreshold = 66666; 193ba5c3796Sopenharmony_ci ReclaimRatios ratios(mem2zramRatio, zram2ufsRatio, refaultThreshold); 194ba5c3796Sopenharmony_ci std::string ret = ratios.ToString(); 195ba5c3796Sopenharmony_ci EXPECT_EQ(ret, "mem2zramRatio:100 zram2ufsRatio:100 refaultThreshold:66666"); 196ba5c3796Sopenharmony_ci} 197ba5c3796Sopenharmony_ci 198ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, CreateMemcgDirTest, TestSize.Level1) 199ba5c3796Sopenharmony_ci{ 200ba5c3796Sopenharmony_ci unsigned int userId = 23456; 201ba5c3796Sopenharmony_ci UserMemcg usermemcg= UserMemcg(userId); 202ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.CreateMemcgDir(), true); 203ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.RemoveMemcgDir(), true); 204ba5c3796Sopenharmony_ci} 205ba5c3796Sopenharmony_ci 206ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, RemoveMemcgDirTest, TestSize.Level1) 207ba5c3796Sopenharmony_ci{ 208ba5c3796Sopenharmony_ci unsigned int userId = 23456; 209ba5c3796Sopenharmony_ci UserMemcg usermemcg= UserMemcg(userId); 210ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.CreateMemcgDir(), true); 211ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.RemoveMemcgDir(), true); 212ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.RemoveMemcgDir(), false); 213ba5c3796Sopenharmony_ci} 214ba5c3796Sopenharmony_ci 215ba5c3796Sopenharmony_ciHWTEST_F(MemcgTest, AddProcTest, TestSize.Level1) 216ba5c3796Sopenharmony_ci{ 217ba5c3796Sopenharmony_ci unsigned int userId = 23456; 218ba5c3796Sopenharmony_ci UserMemcg usermemcg= UserMemcg(userId); 219ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.CreateMemcgDir(), true); 220ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.AddProc(userId), false); 221ba5c3796Sopenharmony_ci EXPECT_EQ(usermemcg.RemoveMemcgDir(), true); 222ba5c3796Sopenharmony_ci} 223ba5c3796Sopenharmony_ci} 224ba5c3796Sopenharmony_ci} 225