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