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