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 "ipc_skeleton.h" 21 #include "log_print.h" 22 23 namespace { 24 using namespace OHOS::DistributedKv; 25 using namespace testing::ext; 26 class AccountObserver : public AccountDelegate::Observer { 27 public: OnAccountChanged(const AccountEventInfo & info)28 void OnAccountChanged(const AccountEventInfo &info) override 29 { 30 } 31 // must specify unique name for observer Name()32 std::string Name() override 33 { 34 return name_; 35 } 36 GetLevel()37 LevelType GetLevel() override 38 { 39 return LevelType::LOW; 40 } 41 SetName(const std::string & name)42 void SetName(const std::string &name) 43 { 44 name_ = name; 45 } 46 private: 47 std::string name_ = "accountTestObserver"; 48 }; 49 50 class AccountDelegateTest : public testing::Test { 51 public: SetUpTestCase(void)52 static void SetUpTestCase(void) {} TearDownTestCase(void)53 static void TearDownTestCase(void) {} SetUp()54 void SetUp() {} TearDown()55 void TearDown() {} 56 57 protected: 58 static const std::string DEFAULT_OHOS_ACCOUNT_UID; 59 static const uint32_t INVALID_TOKEN_ID; 60 static const int32_t INVALID_USER; 61 }; 62 const std::string AccountDelegateTest::DEFAULT_OHOS_ACCOUNT_UID = "ohosAnonymousUid"; 63 const uint32_t AccountDelegateTest::INVALID_TOKEN_ID = -1; 64 const int32_t AccountDelegateTest::INVALID_USER = -1; 65 66 /** 67 * @tc.name: Subscribe001 68 * @tc.desc: subscribe user change, the observer is invalid 69 * @tc.type: FUNC 70 * @tc.require: AR000D08K2 AR000CQDUM 71 * @tc.author: hongbo 72 */ 73 HWTEST_F(AccountDelegateTest, Subscribe001, TestSize.Level0) 74 { 75 auto account = AccountDelegate::GetInstance(); 76 EXPECT_NE(account, nullptr); 77 auto status = account->Subscribe(nullptr); 78 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 79 auto observer = std::make_shared<AccountObserver>(); 80 observer->SetName(""); 81 status = account->Subscribe(observer); 82 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 83 } 84 85 /** 86 * @tc.name: Subscribe002 87 * @tc.desc: subscribe user change 88 * @tc.type: FUNC 89 * @tc.require: 90 * @tc.author: zuojiangjiang 91 */ 92 HWTEST_F(AccountDelegateTest, Subscribe002, TestSize.Level0) 93 { 94 auto account = AccountDelegate::GetInstance(); 95 EXPECT_NE(account, nullptr); 96 auto observer = std::make_shared<AccountObserver>(); 97 auto status = account->Subscribe(observer); 98 EXPECT_EQ(status, Status::SUCCESS); 99 observer->SetName("Subscribe002Observer"); 100 status = account->Subscribe(observer); 101 EXPECT_EQ(status, Status::SUCCESS); 102 } 103 104 /** 105 * @tc.name: Unsubscribe001 106 * @tc.desc: unsubscribe user change, the observer is invalid 107 * @tc.type: FUNC 108 * @tc.require: 109 * @tc.author: zuojiangjiang 110 */ 111 HWTEST_F(AccountDelegateTest, Unsubscribe001, TestSize.Level0) 112 { 113 auto account = AccountDelegate::GetInstance(); 114 EXPECT_NE(account, nullptr); 115 auto status = account->Unsubscribe(nullptr); 116 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 117 auto observer = std::make_shared<AccountObserver>(); 118 observer->SetName(""); 119 status = account->Unsubscribe(observer); 120 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 121 observer->SetName("Unsubscribe001Observer"); 122 status = account->Unsubscribe(observer); 123 EXPECT_EQ(status, Status::INVALID_ARGUMENT); 124 } 125 126 /** 127 * @tc.name: Unsubscribe002 128 * @tc.desc: unsubscribe user change 129 * @tc.type: FUNC 130 * @tc.require: 131 * @tc.author: zuojiangjiang 132 */ 133 HWTEST_F(AccountDelegateTest, Unsubscribe002, TestSize.Level0) 134 { 135 auto account = AccountDelegate::GetInstance(); 136 EXPECT_NE(account, nullptr); 137 auto observer = std::make_shared<AccountObserver>(); 138 account->Subscribe(observer); 139 auto status = account->Unsubscribe(observer); 140 EXPECT_EQ(status, Status::SUCCESS); 141 observer->SetName("Unsubscribe002ObserverPre"); 142 status = account->Subscribe(observer); 143 EXPECT_EQ(status, Status::SUCCESS); 144 observer->SetName("Unsubscribe002ObserverAfter"); 145 status = account->Subscribe(observer); 146 EXPECT_EQ(status, Status::SUCCESS); 147 status = account->Unsubscribe(observer); 148 EXPECT_EQ(status, Status::SUCCESS); 149 observer->SetName("Unsubscribe002ObserverPre"); 150 status = account->Unsubscribe(observer); 151 EXPECT_EQ(status, Status::SUCCESS); 152 } 153 154 /** 155 * @tc.name: GetCurrentAccountId 156 * @tc.desc: get current account Id 157 * @tc.type: FUNC 158 * @tc.require: 159 * @tc.author: zuojiangjiang 160 */ 161 HWTEST_F(AccountDelegateTest, GetCurrentAccountId, TestSize.Level0) 162 { 163 auto accountId = AccountDelegate::GetInstance()->GetCurrentAccountId(); 164 EXPECT_EQ(accountId, DEFAULT_OHOS_ACCOUNT_UID); 165 } 166 167 /** 168 * @tc.name: GetUserByToken 169 * @tc.desc: get user by token 170 * @tc.type: FUNC 171 * @tc.require: 172 * @tc.author: zuojiangjiang 173 */ 174 HWTEST_F(AccountDelegateTest, GetUserByToken, TestSize.Level0) 175 { 176 auto user = AccountDelegate::GetInstance()->GetUserByToken(INVALID_TOKEN_ID); 177 EXPECT_EQ(user, INVALID_USER); 178 user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); 179 EXPECT_EQ(user, 0); 180 } 181 182 /** 183 * @tc.name: QueryUsers 184 * @tc.desc: query users 185 * @tc.type: FUNC 186 * @tc.require: 187 * @tc.author: zuojiangjiang 188 */ 189 HWTEST_F(AccountDelegateTest, QueryUsers, TestSize.Level0) 190 { 191 std::vector<int32_t> users; 192 AccountDelegate::GetInstance()->QueryUsers(users); 193 EXPECT_GT(users.size(), 0); 194 } 195 } // namespace 196