1 /* 2 * Copyright (c) 2021-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 #define LOG_TAG "AccountDelegateTest" 17 #include <gtest/gtest.h> 18 #include <memory.h> 19 #include "account_delegate.h" 20 #include "account_delegate_impl.h" 21 #include "account_delegate_normal_impl.h" 22 #include "ipc_skeleton.h" 23 #include "ohos_account_kits.h" 24 #include "os_account_manager.h" 25 #include "log_print.h" 26 namespace { 27 using namespace OHOS::DistributedKv; 28 using namespace testing::ext; 29 class AccountObserver : public AccountDelegate::Observer { 30 public: OnAccountChanged(const AccountEventInfo & info)31 void OnAccountChanged(const AccountEventInfo &info) override 32 { 33 } 34 // must specify unique name for observer Name()35 std::string Name() override 36 { 37 return name_; 38 } 39 GetLevel()40 LevelType GetLevel() override 41 { 42 return LevelType::LOW; 43 } 44 SetName(const std::string & name)45 void SetName(const std::string &name) 46 { 47 name_ = name; 48 } 49 private: 50 std::string name_ = "accountTestObserver"; 51 }; 52 53 class AccountDelegateTest : public testing::Test { 54 public: SetUpTestCase(void)55 static void SetUpTestCase(void) {} TearDownTestCase(void)56 static void TearDownTestCase(void) {} SetUp()57 void SetUp() {} TearDown()58 void TearDown() {} 59 60 protected: 61 static const std::string DEFAULT_OHOS_ACCOUNT_UID; 62 static const uint32_t INVALID_TOKEN_ID; 63 static const int32_t INVALID_USER; 64 static const int userId; 65 }; 66 const std::string AccountDelegateTest::DEFAULT_OHOS_ACCOUNT_UID = "ohosAnonymousUid"; 67 const uint32_t AccountDelegateTest::INVALID_TOKEN_ID = -1; 68 const int32_t AccountDelegateTest::INVALID_USER = -1; 69 const int AccountDelegateTest::userId = 100; 70 71 /** 72 * @tc.name: Subscribe001 73 * @tc.desc: subscribe user change, the observer is invalid 74 * @tc.type: FUNC 75 * @tc.require: AR000D08K2 AR000CQDUM 76 * @tc.author: hongbo 77 */ 78 HWTEST_F(AccountDelegateTest, Subscribe001, TestSize.Level0) 79 { 80 auto account = AccountDelegate::GetInstance(); 81 EXPECT_NE(account, nullptr); 82 auto status = account->Subscribe(nullptr); 83 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 84 auto observer = std::make_shared<AccountObserver>(); 85 observer->SetName(""); 86 status = account->Subscribe(observer); 87 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 88 } 89 90 /** 91 * @tc.name: Subscribe002 92 * @tc.desc: subscribe user change 93 * @tc.type: FUNC 94 * @tc.require: 95 * @tc.author: zuojiangjiang 96 */ 97 HWTEST_F(AccountDelegateTest, Subscribe002, TestSize.Level0) 98 { 99 auto account = AccountDelegate::GetInstance(); 100 EXPECT_NE(account, nullptr); 101 auto observer = std::make_shared<AccountObserver>(); 102 auto status = account->Subscribe(observer); 103 EXPECT_EQ(status, Status::SUCCESS); 104 observer->SetName("Subscribe002Observer"); 105 status = account->Subscribe(observer); 106 EXPECT_EQ(status, Status::SUCCESS); 107 } 108 109 /** 110 * @tc.name: Subscribe003 111 * @tc.desc: subscribe user change, the observer is invalid 112 * @tc.type: FUNC 113 * @tc.author: nhj 114 */ 115 HWTEST_F(AccountDelegateTest, Subscribe003, TestSize.Level0) 116 { 117 auto account = AccountDelegate::GetInstance(); 118 EXPECT_NE(account, nullptr); 119 auto observer = std::make_shared<AccountObserver>(); 120 auto status = account->Subscribe(observer); 121 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 122 observer->SetName("Subscribe003Observer"); 123 status = account->Subscribe(observer); 124 EXPECT_EQ(status, Status::SUCCESS); 125 observer->SetName("Subscribe002ObserverAfter"); 126 status = account->Subscribe(observer); 127 EXPECT_EQ(status, Status::SUCCESS); 128 } 129 130 /** 131 * @tc.name: Unsubscribe001 132 * @tc.desc: unsubscribe user change, the observer is invalid 133 * @tc.type: FUNC 134 * @tc.require: 135 * @tc.author: zuojiangjiang 136 */ 137 HWTEST_F(AccountDelegateTest, Unsubscribe001, TestSize.Level0) 138 { 139 auto account = AccountDelegate::GetInstance(); 140 EXPECT_NE(account, nullptr); 141 auto status = account->Unsubscribe(nullptr); 142 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 143 auto observer = std::make_shared<AccountObserver>(); 144 observer->SetName(""); 145 status = account->Unsubscribe(observer); 146 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 147 observer->SetName("Unsubscribe001Observer"); 148 status = account->Unsubscribe(observer); 149 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 150 } 151 152 /** 153 * @tc.name: Unsubscribe002 154 * @tc.desc: unsubscribe user change 155 * @tc.type: FUNC 156 * @tc.require: 157 * @tc.author: zuojiangjiang 158 */ 159 HWTEST_F(AccountDelegateTest, Unsubscribe002, TestSize.Level0) 160 { 161 auto account = AccountDelegate::GetInstance(); 162 EXPECT_NE(account, nullptr); 163 auto observer = std::make_shared<AccountObserver>(); 164 account->Subscribe(observer); 165 auto status = account->Unsubscribe(observer); 166 EXPECT_EQ(status, Status::SUCCESS); 167 observer->SetName("Unsubscribe002ObserverPre"); 168 status = account->Subscribe(observer); 169 EXPECT_EQ(status, Status::SUCCESS); 170 observer->SetName("Unsubscribe002ObserverAfter"); 171 status = account->Subscribe(observer); 172 EXPECT_EQ(status, Status::SUCCESS); 173 status = account->Unsubscribe(observer); 174 EXPECT_EQ(status, Status::SUCCESS); 175 observer->SetName("Unsubscribe002ObserverPre"); 176 status = account->Unsubscribe(observer); 177 EXPECT_EQ(status, Status::SUCCESS); 178 } 179 180 /** 181 * @tc.name: GetCurrentAccountId 182 * @tc.desc: get current account Id 183 * @tc.type: FUNC 184 * @tc.require: 185 * @tc.author: zuojiangjiang 186 */ 187 HWTEST_F(AccountDelegateTest, GetCurrentAccountId, TestSize.Level0) 188 { 189 auto accountId = AccountDelegate::GetInstance()->GetCurrentAccountId(); 190 EXPECT_EQ(accountId, DEFAULT_OHOS_ACCOUNT_UID); 191 } 192 193 /** 194 * @tc.name: GetUserByToken 195 * @tc.desc: get user by token 196 * @tc.type: FUNC 197 * @tc.require: 198 * @tc.author: zuojiangjiang 199 */ 200 HWTEST_F(AccountDelegateTest, GetUserByToken, TestSize.Level0) 201 { 202 auto user = AccountDelegate::GetInstance()->GetUserByToken(INVALID_TOKEN_ID); 203 EXPECT_EQ(user, INVALID_USER); 204 user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); 205 EXPECT_EQ(user, 0); 206 } 207 208 /** 209 * @tc.name: QueryUsers 210 * @tc.desc: query users 211 * @tc.type: FUNC 212 * @tc.require: 213 * @tc.author: zuojiangjiang 214 */ 215 HWTEST_F(AccountDelegateTest, QueryUsers, TestSize.Level0) 216 { 217 std::vector<int32_t> users; 218 AccountDelegate::GetInstance()->QueryUsers(users); 219 EXPECT_GT(users.size(), 0); 220 } 221 222 /** 223 * @tc.name: IsVerified 224 * @tc.desc: query users 225 * @tc.type: FUNC 226 * @tc.author: nhj 227 */ 228 HWTEST_F(AccountDelegateTest, IsVerified, TestSize.Level0) 229 { 230 auto user = AccountDelegate::GetInstance()->IsVerified(userId); 231 EXPECT_EQ(user, true); 232 } 233 234 /** 235 * @tc.name: UnsubscribeAccountEvent 236 * @tc.desc: get current account Id 237 * @tc.type: FUNC 238 * @tc.author: nhj 239 */ 240 HWTEST_F(AccountDelegateTest, UnsubscribeAccountEvent, TestSize.Level0) 241 { 242 auto account = AccountDelegate::GetInstance(); 243 auto observer = std::make_shared<AccountObserver>(); 244 account->Subscribe(observer); 245 auto executor = std::make_shared<OHOS::ExecutorPool>(12, 5); 246 AccountDelegate::GetInstance()->UnsubscribeAccountEvent(); 247 AccountDelegate::GetInstance()->BindExecutor(executor); 248 auto status = account->Unsubscribe(observer); 249 EXPECT_EQ(status, Status::SUCCESS); 250 } 251 252 /** 253 * @tc.name: QueryForegroundUsers 254 * @tc.desc: query foreground users 255 * @tc.type: FUNC 256 * @tc.require: 257 * @tc.author: ht 258 */ 259 HWTEST_F(AccountDelegateTest, QueryForegroundUsers, TestSize.Level0) 260 { 261 std::vector<int32_t> users; 262 EXPECT_TRUE(AccountDelegate::GetInstance()->QueryForegroundUsers(users)); 263 std::vector<OHOS::AccountSA::ForegroundOsAccount> accounts; 264 OHOS::AccountSA::OsAccountManager::GetForegroundOsAccounts(accounts); 265 EXPECT_EQ(accounts.size(), users.size()); 266 for (int i = 0; i < users.size(); i++) { 267 EXPECT_EQ(users[i], accounts[i].localId); 268 } 269 } 270 } // namespace 271