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 "reclaim_priority_constants.h" 23ba5c3796Sopenharmony_ci#include "default_multi_account_strategy.h" 24ba5c3796Sopenharmony_ci#include "multi_account_manager.h" 25ba5c3796Sopenharmony_ci#undef private 26ba5c3796Sopenharmony_ci#undef protected 27ba5c3796Sopenharmony_ci 28ba5c3796Sopenharmony_cinamespace OHOS { 29ba5c3796Sopenharmony_cinamespace Memory { 30ba5c3796Sopenharmony_ciusing namespace testing; 31ba5c3796Sopenharmony_ciusing namespace testing::ext; 32ba5c3796Sopenharmony_ci 33ba5c3796Sopenharmony_ciclass MultiAccountManagerTest : public testing::Test { 34ba5c3796Sopenharmony_cipublic: 35ba5c3796Sopenharmony_ci static void SetUpTestCase(); 36ba5c3796Sopenharmony_ci static void TearDownTestCase(); 37ba5c3796Sopenharmony_ci void SetUp(); 38ba5c3796Sopenharmony_ci void TearDown(); 39ba5c3796Sopenharmony_ci}; 40ba5c3796Sopenharmony_ci 41ba5c3796Sopenharmony_civoid MultiAccountManagerTest::SetUpTestCase() 42ba5c3796Sopenharmony_ci{ 43ba5c3796Sopenharmony_ci} 44ba5c3796Sopenharmony_ci 45ba5c3796Sopenharmony_civoid MultiAccountManagerTest::TearDownTestCase() 46ba5c3796Sopenharmony_ci{ 47ba5c3796Sopenharmony_ci} 48ba5c3796Sopenharmony_ci 49ba5c3796Sopenharmony_civoid MultiAccountManagerTest::SetUp() 50ba5c3796Sopenharmony_ci{ 51ba5c3796Sopenharmony_ci} 52ba5c3796Sopenharmony_ci 53ba5c3796Sopenharmony_civoid MultiAccountManagerTest::TearDown() 54ba5c3796Sopenharmony_ci{ 55ba5c3796Sopenharmony_ci} 56ba5c3796Sopenharmony_ci 57ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, InitTest, TestSize.Level1) 58ba5c3796Sopenharmony_ci{ 59ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().Init(); 60ba5c3796Sopenharmony_ci} 61ba5c3796Sopenharmony_ci 62ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, SetAccountPrority, TestSize.Level1) 63ba5c3796Sopenharmony_ci{ 64ba5c3796Sopenharmony_ci int accountId = 2; 65ba5c3796Sopenharmony_ci std::string accountName = "admin"; 66ba5c3796Sopenharmony_ci AccountSA::OsAccountType accountType = AccountSA::OsAccountType::ADMIN; 67ba5c3796Sopenharmony_ci bool isActived = true; 68ba5c3796Sopenharmony_ci 69ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().SetAccountPriority(accountId, accountName, accountType, isActived); 70ba5c3796Sopenharmony_ci std::shared_ptr<AccountPriorityInfo> info = MultiAccountManager::GetInstance().GetAccountPriorityInfo(accountId); 71ba5c3796Sopenharmony_ci 72ba5c3796Sopenharmony_ci EXPECT_EQ(info->GetId(), accountId); 73ba5c3796Sopenharmony_ci EXPECT_STREQ(info->GetName().c_str(), accountName.c_str()); 74ba5c3796Sopenharmony_ci EXPECT_EQ(info->GetType(), accountType); 75ba5c3796Sopenharmony_ci EXPECT_EQ(info->GetIsActived(), isActived); 76ba5c3796Sopenharmony_ci EXPECT_EQ(info->GetPriority(), static_cast<int>(DefaultMultiAccountPriority::HIGH_PRIORITY)); 77ba5c3796Sopenharmony_ci} 78ba5c3796Sopenharmony_ci 79ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, RecalcBundlePriortiy, TestSize.Level1) 80ba5c3796Sopenharmony_ci{ 81ba5c3796Sopenharmony_ci int accountId = 2; 82ba5c3796Sopenharmony_ci std::string accountName = "admin"; 83ba5c3796Sopenharmony_ci AccountSA::OsAccountType accountType = AccountSA::OsAccountType::ADMIN; 84ba5c3796Sopenharmony_ci bool isActived = false; 85ba5c3796Sopenharmony_ci int bundlePriority = RECLAIM_PRIORITY_FOREGROUND; 86ba5c3796Sopenharmony_ci 87ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().SetAccountPriority(accountId, accountName, accountType, isActived); 88ba5c3796Sopenharmony_ci int recalcPriority = MultiAccountManager::GetInstance().RecalcBundlePriority(accountId, bundlePriority); 89ba5c3796Sopenharmony_ci 90ba5c3796Sopenharmony_ci EXPECT_EQ(recalcPriority, RECLAIM_PRIORITY_FOREGROUND + 50); 91ba5c3796Sopenharmony_ci} 92ba5c3796Sopenharmony_ci 93ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, AccountColdSwitch, TestSize.Level1) 94ba5c3796Sopenharmony_ci{ 95ba5c3796Sopenharmony_ci int accountId = 100; 96ba5c3796Sopenharmony_ci std::shared_ptr<AccountBundleInfo> account = std::make_shared<AccountBundleInfo>(accountId); 97ba5c3796Sopenharmony_ci std::shared_ptr<BundlePriorityInfo> bundle = std::make_shared<BundlePriorityInfo>("app", 98ba5c3796Sopenharmony_ci accountId * USER_ID_SHIFT + 1, 100); 99ba5c3796Sopenharmony_ci ProcessPriorityInfo proc1(1001, bundle->uid_, bundle->priority_); 100ba5c3796Sopenharmony_ci ProcessPriorityInfo proc2(1002, bundle->uid_, bundle->priority_); 101ba5c3796Sopenharmony_ci ProcessPriorityInfo proc3(1003, bundle->uid_, bundle->priority_); 102ba5c3796Sopenharmony_ci ProcessPriorityInfo proc4(1004, bundle->uid_, bundle->priority_); 103ba5c3796Sopenharmony_ci 104ba5c3796Sopenharmony_ci std::map<int, std::shared_ptr<AccountBundleInfo>> osAccountsInfoMap; 105ba5c3796Sopenharmony_ci bundle->AddProc(proc1); 106ba5c3796Sopenharmony_ci bundle->AddProc(proc2); 107ba5c3796Sopenharmony_ci bundle->AddProc(proc3); 108ba5c3796Sopenharmony_ci bundle->AddProc(proc4); 109ba5c3796Sopenharmony_ci account->AddBundleToOsAccount(bundle); 110ba5c3796Sopenharmony_ci osAccountsInfoMap.insert(std::make_pair(account->id_, account)); 111ba5c3796Sopenharmony_ci 112ba5c3796Sopenharmony_ci std::vector<int> switchedIds { accountId }; 113ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().HandleAccountColdSwitch(switchedIds, osAccountsInfoMap); 114ba5c3796Sopenharmony_ci} 115ba5c3796Sopenharmony_ci 116ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, AccountHotSwitch, TestSize.Level1) 117ba5c3796Sopenharmony_ci{ 118ba5c3796Sopenharmony_ci int accountId = 100; 119ba5c3796Sopenharmony_ci std::shared_ptr<AccountBundleInfo> account = std::make_shared<AccountBundleInfo>(accountId); 120ba5c3796Sopenharmony_ci std::shared_ptr<BundlePriorityInfo> bundle = std::make_shared<BundlePriorityInfo>("app", 121ba5c3796Sopenharmony_ci accountId * USER_ID_SHIFT + 1, 100); 122ba5c3796Sopenharmony_ci ProcessPriorityInfo proc1(1001, bundle->uid_, bundle->priority_); 123ba5c3796Sopenharmony_ci ProcessPriorityInfo proc2(1002, bundle->uid_, bundle->priority_); 124ba5c3796Sopenharmony_ci ProcessPriorityInfo proc3(1003, bundle->uid_, bundle->priority_); 125ba5c3796Sopenharmony_ci ProcessPriorityInfo proc4(1004, bundle->uid_, bundle->priority_); 126ba5c3796Sopenharmony_ci 127ba5c3796Sopenharmony_ci std::map<int, std::shared_ptr<AccountBundleInfo>> osAccountsInfoMap; 128ba5c3796Sopenharmony_ci bundle->AddProc(proc1); 129ba5c3796Sopenharmony_ci bundle->AddProc(proc2); 130ba5c3796Sopenharmony_ci bundle->AddProc(proc3); 131ba5c3796Sopenharmony_ci bundle->AddProc(proc4); 132ba5c3796Sopenharmony_ci account->AddBundleToOsAccount(bundle); 133ba5c3796Sopenharmony_ci osAccountsInfoMap.insert(std::make_pair(account->id_, account)); 134ba5c3796Sopenharmony_ci 135ba5c3796Sopenharmony_ci std::string accountName = "admin"; 136ba5c3796Sopenharmony_ci AccountSA::OsAccountType accountType = AccountSA::OsAccountType::ADMIN; 137ba5c3796Sopenharmony_ci bool isActived = false; 138ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().SetAccountPriority(accountId, accountName, accountType, isActived); 139ba5c3796Sopenharmony_ci 140ba5c3796Sopenharmony_ci std::vector<int> switchedIds { accountId }; 141ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().HandleAccountHotSwitch(switchedIds, osAccountsInfoMap); 142ba5c3796Sopenharmony_ci 143ba5c3796Sopenharmony_ci EXPECT_EQ(bundle->priority_, 150); 144ba5c3796Sopenharmony_ci} 145ba5c3796Sopenharmony_ci 146ba5c3796Sopenharmony_ci/** 147ba5c3796Sopenharmony_ci * @tc.name: AddAccountPriorityInfo 148ba5c3796Sopenharmony_ci * @tc.desc: Test add value include id_ name_ type_ isActived_ 149ba5c3796Sopenharmony_ci * @tc.type: FUNC 150ba5c3796Sopenharmony_ci */ 151ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, AddAccountPriorityInfoTest, TestSize.Level1) 152ba5c3796Sopenharmony_ci{ 153ba5c3796Sopenharmony_ci int accountId = 3; 154ba5c3796Sopenharmony_ci std::string accountName = "admin"; 155ba5c3796Sopenharmony_ci AccountSA::OsAccountType accountType = AccountSA::OsAccountType::ADMIN; 156ba5c3796Sopenharmony_ci bool isActived = true; 157ba5c3796Sopenharmony_ci 158ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().SetAccountPriority(accountId, accountName, accountType, isActived); 159ba5c3796Sopenharmony_ci std::shared_ptr<AccountPriorityInfo> accountInfo = 160ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().GetAccountPriorityInfo(accountId); 161ba5c3796Sopenharmony_ci MultiAccountManager::GetInstance().AddAccountPriorityInfo(accountInfo); 162ba5c3796Sopenharmony_ci EXPECT_EQ(accountInfo->GetId(), accountId); 163ba5c3796Sopenharmony_ci EXPECT_STREQ(accountInfo->GetName().c_str(), accountName.c_str()); 164ba5c3796Sopenharmony_ci EXPECT_EQ(accountInfo->GetType(), accountType); 165ba5c3796Sopenharmony_ci EXPECT_EQ(accountInfo->GetIsActived(), isActived); 166ba5c3796Sopenharmony_ci} 167ba5c3796Sopenharmony_ci 168ba5c3796Sopenharmony_ci/** 169ba5c3796Sopenharmony_ci * @tc.name: SetMultiAccountStrategy and GetMultiAccountStratgy 170ba5c3796Sopenharmony_ci * @tc.desc: Test set value of strategy_ equals to nullptr 171ba5c3796Sopenharmony_ci * @tc.desc: Test get value of strategy_ 172ba5c3796Sopenharmony_ci * @tc.type: FUNC 173ba5c3796Sopenharmony_ci */ 174ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, SetMultiAccountStrategyTest, TestSize.Level1) 175ba5c3796Sopenharmony_ci{ 176ba5c3796Sopenharmony_ci // strategy_ equals to nullptr 177ba5c3796Sopenharmony_ci std::shared_ptr<MultiAccountStrategy> strategy = nullptr; 178ba5c3796Sopenharmony_ci bool retMul = MultiAccountManager::GetInstance().SetMultiAccountStrategy(strategy); 179ba5c3796Sopenharmony_ci EXPECT_EQ(retMul, false); 180ba5c3796Sopenharmony_ci 181ba5c3796Sopenharmony_ci // set and get value of strategy_ 182ba5c3796Sopenharmony_ci strategy = MultiAccountManager::GetInstance().GetMultiAccountStratgy(); 183ba5c3796Sopenharmony_ci retMul = MultiAccountManager::GetInstance().SetMultiAccountStrategy(strategy); 184ba5c3796Sopenharmony_ci EXPECT_EQ(retMul, true); 185ba5c3796Sopenharmony_ci} 186ba5c3796Sopenharmony_ci 187ba5c3796Sopenharmony_ci/** 188ba5c3796Sopenharmony_ci * @tc.name: GetSwitchedAccountIds 189ba5c3796Sopenharmony_ci * @tc.desc: test GetSwitchedAccountIds into for and if branch 190ba5c3796Sopenharmony_ci * @tc.type: FUNC 191ba5c3796Sopenharmony_ci */ 192ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, GetSwitchedAccountIdsTest, TestSize.Level1) 193ba5c3796Sopenharmony_ci{ 194ba5c3796Sopenharmony_ci MultiAccountManager oldAct; 195ba5c3796Sopenharmony_ci oldAct.oldActiveAccountIds_ = {1, 3, 5, 7, 9}; 196ba5c3796Sopenharmony_ci std::vector<int> accountIds; 197ba5c3796Sopenharmony_ci std::vector<int> accountIds1 = {1, 3, 5, 7, 9}; 198ba5c3796Sopenharmony_ci oldAct.GetSwitchedAccountIds(accountIds); 199ba5c3796Sopenharmony_ci EXPECT_EQ(accountIds, accountIds1); 200ba5c3796Sopenharmony_ci} 201ba5c3796Sopenharmony_ci 202ba5c3796Sopenharmony_ci/** 203ba5c3796Sopenharmony_ci * @tc.name: UpdateAccountPriorityInfo 204ba5c3796Sopenharmony_ci * @tc.desc: test UpdateAccountPriorityInfoTest into for and if branch 205ba5c3796Sopenharmony_ci * @tc.type: FUNC 206ba5c3796Sopenharmony_ci */ 207ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, UpdateAccountPriorityInfoTest, TestSize.Level1) 208ba5c3796Sopenharmony_ci{ 209ba5c3796Sopenharmony_ci std::vector<int> accountIds; 210ba5c3796Sopenharmony_ci EXPECT_EQ(MultiAccountManager::GetInstance().UpdateAccountPriorityInfo(accountIds), true); 211ba5c3796Sopenharmony_ci std::vector<int> accountIds1 = {1, 3, 5, 7, 9}; 212ba5c3796Sopenharmony_ci EXPECT_EQ(MultiAccountManager::GetInstance().UpdateAccountPriorityInfo(accountIds1), false); 213ba5c3796Sopenharmony_ci} 214ba5c3796Sopenharmony_ci 215ba5c3796Sopenharmony_ci/** 216ba5c3796Sopenharmony_ci * @tc.name: HandleOsAccountsChanged 217ba5c3796Sopenharmony_ci * @tc.desc: test initialized_ == false 218ba5c3796Sopenharmony_ci * @tc.desc: test the branch of UpdateAccountPriorityInfo(updatedAccountIds) equals to false 219ba5c3796Sopenharmony_ci * @tc.desc: test the branch of switchMod equals to AccountSA::COLD_SWITCH 220ba5c3796Sopenharmony_ci * @tc.desc: test the branch of switchMod equals to AccountSA::HOT_SWITCH 221ba5c3796Sopenharmony_ci * @tc.type: FUNC 222ba5c3796Sopenharmony_ci */ 223ba5c3796Sopenharmony_ciHWTEST_F(MultiAccountManagerTest, HandleOsAccountsChangedTest, TestSize.Level1) 224ba5c3796Sopenharmony_ci{ 225ba5c3796Sopenharmony_ci MultiAccountManager mulAcc; 226ba5c3796Sopenharmony_ci mulAcc.initialized_ = false; 227ba5c3796Sopenharmony_ci int accountId = 100; 228ba5c3796Sopenharmony_ci AccountSA::OS_ACCOUNT_SWITCH_MOD switchMod1 = AccountSA::OsAccountManager::GetOsAccountSwitchMod(); 229ba5c3796Sopenharmony_ci AccountSA::OS_ACCOUNT_SWITCH_MOD switchMod2 = AccountSA::COLD_SWITCH; 230ba5c3796Sopenharmony_ci AccountSA::OS_ACCOUNT_SWITCH_MOD switchMod3 = AccountSA::HOT_SWITCH; 231ba5c3796Sopenharmony_ci std::map<int, std::shared_ptr<AccountBundleInfo>> osAccountsInfoMap; 232ba5c3796Sopenharmony_ci 233ba5c3796Sopenharmony_ci // the branch of test initialized_ equals to false 234ba5c3796Sopenharmony_ci bool ret = mulAcc.HandleOsAccountsChanged(accountId, switchMod1, osAccountsInfoMap); 235ba5c3796Sopenharmony_ci EXPECT_EQ(ret, false); 236ba5c3796Sopenharmony_ci 237ba5c3796Sopenharmony_ci // the branch of UpdateAccountPriorityInfo(updatedAccountIds) equals to false 238ba5c3796Sopenharmony_ci ret = mulAcc.HandleOsAccountsChanged(accountId, switchMod1, osAccountsInfoMap); 239ba5c3796Sopenharmony_ci EXPECT_EQ(ret, false); 240ba5c3796Sopenharmony_ci 241ba5c3796Sopenharmony_ci // the branch of switchMod equals to AccountSA::COLD_SWITCH 242ba5c3796Sopenharmony_ci ret = MultiAccountManager::GetInstance().HandleOsAccountsChanged(accountId, switchMod2, osAccountsInfoMap); 243ba5c3796Sopenharmony_ci EXPECT_EQ(ret, true); 244ba5c3796Sopenharmony_ci 245ba5c3796Sopenharmony_ci // the branch of switchMod equals to AccountSA::HOT_SWITCH 246ba5c3796Sopenharmony_ci ret = MultiAccountManager::GetInstance().HandleOsAccountsChanged(accountId, switchMod3, osAccountsInfoMap); 247ba5c3796Sopenharmony_ci EXPECT_EQ(ret, true); 248ba5c3796Sopenharmony_ci} 249ba5c3796Sopenharmony_ci 250ba5c3796Sopenharmony_ci} 251ba5c3796Sopenharmony_ci} 252