1 /*
2 * Copyright (c) 2024 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 #include "multi_user_manager_test.h"
17
18 #define private public
19 #include "multi_user_manager.h"
20 #undef private
21 #include "test_log.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace DistributedSchedule {
28 namespace {
29 const std::string TYPE = "type";
30 }
31
SetUpTestCase()32 void MultiUserManagerTest::SetUpTestCase()
33 {
34 DTEST_LOG << "MultiUserManagerTest::SetUpTestCase" << std::endl;
35 }
36
TearDownTestCase()37 void MultiUserManagerTest::TearDownTestCase()
38 {
39 DTEST_LOG << "MultiUserManagerTest::TearDownTestCase" << std::endl;
40 }
41
TearDown()42 void MultiUserManagerTest::TearDown()
43 {
44 DTEST_LOG << "MultiUserManagerTest::TearDown" << std::endl;
45 }
46
SetUp()47 void MultiUserManagerTest::SetUp()
48 {
49 DTEST_LOG << "MultiUserManagerTest::SetUp" << std::endl;
50 }
51
OnCallback(const uint32_t ContinueState,const std::string & srcDeviceId,const std::string & bundleName,const std::string & continueType,const std::string & srcBundleName)52 void RemoteOnListenerStubTest::OnCallback(const uint32_t ContinueState, const std::string& srcDeviceId,
53 const std::string &bundleName, const std::string &continueType, const std::string &srcBundleName)
54 {
55 }
56
57 /**
58 * @tc.name: MultiUserManager_Init_001
59 * @tc.desc: test Init
60 * @tc.type: FUNC
61 */
62 HWTEST_F(MultiUserManagerTest, MultiUserManager_Init_001, TestSize.Level3)
63 {
64 DTEST_LOG << "MultiUserManager_Init_001 start" << std::endl;
65 /**
66 * @tc.steps: step1. test Init with set currentUserId_ sendMgr recvMgr;
67 */
68 int32_t accountId = 100;
69 MultiUserManager::GetInstance().Init();
70 EXPECT_EQ(MultiUserManager::GetInstance().currentUserId_, accountId);
71 auto sendMgr = MultiUserManager::GetInstance().sendMgrMap_.find(accountId);
72 EXPECT_NE(sendMgr->second, nullptr);
73 auto recvMgr = MultiUserManager::GetInstance().recvMgrMap_.find(accountId);
74 EXPECT_NE(recvMgr->second, nullptr);
75 MultiUserManager::GetInstance().UnInit();
76 DTEST_LOG << "MultiUserManager_Init_001 end" << std::endl;
77 }
78
79 /**
80 * @tc.name: MultiUserManager_UnInit_001
81 * @tc.desc: test UnInit
82 * @tc.type: FUNC
83 */
84 HWTEST_F(MultiUserManagerTest, MultiUserManager_UnInit_001, TestSize.Level3)
85 {
86 DTEST_LOG << "MultiUserManager_UnInit_001 start" << std::endl;
87 /**
88 * @tc.steps: step1. test UnInit with delete sendMgr recvMgr;
89 */
90 MultiUserManager::GetInstance().Init();
91 MultiUserManager::GetInstance().UnInit();
92
93 EXPECT_TRUE(MultiUserManager::GetInstance().sendMgrMap_.empty());
94 EXPECT_TRUE(MultiUserManager::GetInstance().recvMgrMap_.empty());
95
96 DTEST_LOG << "MultiUserManager_UnInit_001 end" << std::endl;
97 }
98
99 /**
100 * @tc.name: MultiUserManager_OnUserSwitched_001
101 * @tc.desc: test OnUserSwitched
102 * @tc.type: FUNC
103 */
104 HWTEST_F(MultiUserManagerTest, MultiUserManager_OnUserSwitched_001, TestSize.Level3)
105 {
106 DTEST_LOG << "MultiUserManager_OnUserSwitched_001 start" << std::endl;
107 /**
108 * @tc.steps: step1. test OnUserSwitched with no cache switched user;
109 */
110 int32_t switchedAccountId = 101;
111 MultiUserManager::GetInstance().Init();
112 MultiUserManager::GetInstance().OnUserSwitched(switchedAccountId);
113 EXPECT_EQ(MultiUserManager::GetInstance().currentUserId_, switchedAccountId);
114 MultiUserManager::GetInstance().UnInit();
115 DTEST_LOG << "MultiUserManager_OnUserSwitched_001 end" << std::endl;
116 }
117
118 /**
119 * @tc.name: MultiUserManager_OnUserSwitched_002
120 * @tc.desc: test OnUserSwitched
121 * @tc.type: FUNC
122 */
123 HWTEST_F(MultiUserManagerTest, MultiUserManager_OnUserSwitched_002, TestSize.Level3)
124 {
125 DTEST_LOG << "MultiUserManager_OnUserSwitched_002 start" << std::endl;
126 /**
127 * @tc.steps: step1. test OnUserSwitched with cache switched user;
128 */
129 int32_t switchedAccountId = 100;
130 MultiUserManager::GetInstance().Init();
131
132 std::map<std::string, sptr<IRemoteObject>> param;
133 sptr<IRemoteObject> obj(new RemoteOnListenerStubTest());
134 param.emplace(TYPE, obj);
135 MultiUserManager::GetInstance().listenerCache_.emplace(switchedAccountId, param);
136
137 MultiUserManager::GetInstance().OnUserSwitched(switchedAccountId);
138 EXPECT_EQ(MultiUserManager::GetInstance().currentUserId_, switchedAccountId);
139 EXPECT_TRUE(MultiUserManager::GetInstance().listenerCache_.empty());
140 MultiUserManager::GetInstance().UnInit();
141 DTEST_LOG << "MultiUserManager_OnUserSwitched_002 end" << std::endl;
142 }
143
144 /**
145 * @tc.name: MultiUserManager_OnUserRemoved_001
146 * @tc.desc: test OnUserRemoved
147 * @tc.type: FUNC
148 */
149 HWTEST_F(MultiUserManagerTest, MultiUserManager_OnUserRemoved_001, TestSize.Level3)
150 {
151 DTEST_LOG << "MultiUserManager_OnUserRemoved_001 start" << std::endl;
152 /**
153 * @tc.steps: step1. test OnUserRemoved with remove by accountId sendMgr recvMgr;
154 */
155 int32_t accountId = 100;
156 MultiUserManager::GetInstance().Init();
157 MultiUserManager::GetInstance().OnUserRemoved(accountId);
158
159 auto sendMgr = MultiUserManager::GetInstance().sendMgrMap_.find(accountId);
160 EXPECT_TRUE(sendMgr == MultiUserManager::GetInstance().sendMgrMap_.end());
161 auto recvMgr = MultiUserManager::GetInstance().recvMgrMap_.find(accountId);
162 EXPECT_TRUE(recvMgr == MultiUserManager::GetInstance().recvMgrMap_.end());
163
164 MultiUserManager::GetInstance().UnInit();
165 DTEST_LOG << "MultiUserManager_OnUserRemoved_001 end" << std::endl;
166 }
167
168 /**
169 * @tc.name: MultiUserManager_CreateNewSendMgr_001
170 * @tc.desc: test CreateNewSendMgr
171 * @tc.type: FUNC
172 */
173 HWTEST_F(MultiUserManagerTest, MultiUserManager_CreateNewSendMgr_001, TestSize.Level3)
174 {
175 DTEST_LOG << "MultiUserManager_CreateNewSendMgr_001 start" << std::endl;
176 /**
177 * @tc.steps: step1. test OnUserRemoved with create current user sendMgr;
178 */
179 int32_t ret = MultiUserManager::GetInstance().CreateNewSendMgrLocked();
180 EXPECT_EQ(ret, ERR_OK);
181 DTEST_LOG << "MultiUserManager_CreateNewSendMgr_001 end" << std::endl;
182 }
183
184 /**
185 * @tc.name: MultiUserManager_CreateNewRecvMgr_001
186 * @tc.desc: test CreateNewRecvMgr
187 * @tc.type: FUNC
188 */
189 HWTEST_F(MultiUserManagerTest, MultiUserManager_CreateNewRecvMgr_001, TestSize.Level3)
190 {
191 DTEST_LOG << "MultiUserManager_CreateNewRecvMgr_001 start" << std::endl;
192 /**
193 * @tc.steps: step1. test OnUserRemoved with create current user recvMgr;
194 */
195 int32_t ret = MultiUserManager::GetInstance().CreateNewRecvMgrLocked();
196 EXPECT_EQ(ret, ERR_OK);
197 DTEST_LOG << "MultiUserManager_CreateNewRecvMgr_001 end" << std::endl;
198 }
199
200 /**
201 * @tc.name: MultiUserManager_CreateNewRecomMgr_001
202 * @tc.desc: test CreateNewRecomMgr
203 * @tc.type: FUNC
204 */
205 HWTEST_F(MultiUserManagerTest, MultiUserManager_CreateNewRecomMgr_001, TestSize.Level3)
206 {
207 DTEST_LOG << "MultiUserManager_CreateNewRecomMgr_001 start" << std::endl;
208 /**
209 * @tc.steps: step1. test OnUserRemoved with create current user recomMgr;
210 */
211 int32_t ret = MultiUserManager::GetInstance().CreateNewRecomMgrLocked();
212 EXPECT_EQ(ret, ERR_OK);
213 DTEST_LOG << "MultiUserManager_CreateNewRecomMgr_001 end" << std::endl;
214 }
215
216 /**
217 * @tc.name: MultiUserManager_GetCurrentSendMgr_001
218 * @tc.desc: test GetCurrentSendMgr
219 * @tc.type: FUNC
220 */
221 HWTEST_F(MultiUserManagerTest, MultiUserManager_GetCurrentSendMgr_001, TestSize.Level3)
222 {
223 DTEST_LOG << "MultiUserManager_GetCurrentSendMgr_001 start" << std::endl;
224 /**
225 * @tc.steps: step1. test OnUserRemoved with create current user sendMgr;
226 */
227 int32_t accountId = 100;
228 MultiUserManager::GetInstance().Init();
229 auto sendMgr = MultiUserManager::GetInstance().sendMgrMap_.find(accountId)->second;
230
231 auto ret = MultiUserManager::GetInstance().GetCurrentSendMgr();
232 EXPECT_EQ(ret, sendMgr);
233
234 MultiUserManager::GetInstance().sendMgrMap_.insert({accountId, nullptr});
235 ret = MultiUserManager::GetInstance().GetCurrentSendMgr();
236 EXPECT_NE(ret, nullptr);
237
238 MultiUserManager::GetInstance().UnInit();
239 DTEST_LOG << "MultiUserManager_GetCurrentSendMgr_001 end" << std::endl;
240 }
241
242 /**
243 * @tc.name: MultiUserManager_GetCurrentRecvMgr_001
244 * @tc.desc: test GetCurrentRecvMgr
245 * @tc.type: FUNC
246 */
247 HWTEST_F(MultiUserManagerTest, MultiUserManager_GetCurrentRecvMgr_001, TestSize.Level3)
248 {
249 DTEST_LOG << "MultiUserManager_GetCurrentRecvMgr_001 start" << std::endl;
250 /**
251 * @tc.steps: step1. test OnUserRemoved with create current user recvMgr;
252 */
253 int32_t accountId = 100;
254 MultiUserManager::GetInstance().Init();
255 auto recvMgr = MultiUserManager::GetInstance().recvMgrMap_.find(accountId)->second;
256 MultiUserManager::GetInstance().hasRegSoftbusEventListener_ = true;
257 auto ret = MultiUserManager::GetInstance().GetCurrentRecvMgr();
258 EXPECT_EQ(ret, recvMgr);
259
260 MultiUserManager::GetInstance().recvMgrMap_.insert({accountId, nullptr});
261 ret = MultiUserManager::GetInstance().GetCurrentRecvMgr();
262 EXPECT_NE(ret, nullptr);
263
264
265 MultiUserManager::GetInstance().UnInit();
266 DTEST_LOG << "MultiUserManager_GetCurrentRecvMgr_001 end" << std::endl;
267 }
268
269 /**
270 * @tc.name: MultiUserManager_GetCurrentRecomMgr_001
271 * @tc.desc: test GetCurrentRecomMgr
272 * @tc.type: FUNC
273 */
274 HWTEST_F(MultiUserManagerTest, MultiUserManager_GetCurrentRecomMgr_001, TestSize.Level3)
275 {
276 DTEST_LOG << "MultiUserManager_GetCurrentRecomMgr_001 start" << std::endl;
277 /**
278 * @tc.steps: step1. test OnUserRemoved with create current user recomMgr;
279 */
280 int32_t accountId = 100;
281 MultiUserManager::GetInstance().Init();
282 auto recomMgr = MultiUserManager::GetInstance().recomMgrMap_.find(accountId)->second;
283 MultiUserManager::GetInstance().hasRegSoftbusEventListener_ = true;
284 auto ret = MultiUserManager::GetInstance().GetCurrentRecomMgr();
285 EXPECT_EQ(ret, recomMgr);
286
287 MultiUserManager::GetInstance().recomMgrMap_.insert({accountId, nullptr});
288 ret = MultiUserManager::GetInstance().GetCurrentRecomMgr();
289 EXPECT_NE(ret, nullptr);
290
291
292 MultiUserManager::GetInstance().UnInit();
293 DTEST_LOG << "MultiUserManager_GetCurrentRecomMgr_001 end" << std::endl;
294 }
295
296 /**
297 * @tc.name: MultiUserManager_CheckRegSoftbusListener_001
298 * @tc.desc: test CheckRegSoftbusListener
299 * @tc.type: FUNC
300 */
301 HWTEST_F(MultiUserManagerTest, MultiUserManager_CheckRegSoftbusListener_001, TestSize.Level3)
302 {
303 DTEST_LOG << "MultiUserManager_CheckRegSoftbusListener_001 start" << std::endl;
304 /**
305 * @tc.steps: step1. test OnUserRemoved with create current user recvMgr;
306 */
307 MultiUserManager::GetInstance().hasRegSoftbusEventListener_ = false;
308 EXPECT_FALSE(MultiUserManager::GetInstance().CheckRegSoftbusListener());
309 MultiUserManager::GetInstance().RegisterSoftbusListener();
310 EXPECT_TRUE(MultiUserManager::GetInstance().hasRegSoftbusEventListener_);
311 EXPECT_TRUE(MultiUserManager::GetInstance().CheckRegSoftbusListener());
312 DTEST_LOG << "MultiUserManager_CheckRegSoftbusListener_001 end" << std::endl;
313 }
314
315 /**
316 * @tc.name: MultiUserManager_OnRegisterOnListener_001
317 * @tc.desc: test OnRegisterOnListener
318 * @tc.type: FUNC
319 */
320 HWTEST_F(MultiUserManagerTest, MultiUserManager_OnRegisterOnListener_001, TestSize.Level3)
321 {
322 DTEST_LOG << "MultiUserManager_OnRegisterOnListener_001 start" << std::endl;
323 /**
324 * @tc.steps: step1. test OnUserRemoved with register listener
325 */
326 MultiUserManager::GetInstance().Init();
327
328 int32_t callingUid = 0;
329 sptr<IRemoteObject> obj(new RemoteOnListenerStubTest());
330 auto ret = MultiUserManager::GetInstance().OnRegisterOnListener(TYPE, obj, callingUid);
331 EXPECT_EQ(ret, ERR_OK);
332
333 MultiUserManager::GetInstance().UnInit();
334 DTEST_LOG << "MultiUserManager_OnRegisterOnListener_001 end" << std::endl;
335 }
336
337 /**
338 * @tc.name: MultiUserManager_OnRegisterOffListener_001
339 * @tc.desc: test OnRegisterOffListener
340 * @tc.type: FUNC
341 */
342 HWTEST_F(MultiUserManagerTest, MultiUserManager_OnRegisterOffListener_001, TestSize.Level3)
343 {
344 DTEST_LOG << "MultiUserManager_OnRegisterOffListener_001 start" << std::endl;
345 /**
346 * @tc.steps: step1. test OnUserRemoved with unregister listener
347 */
348 MultiUserManager::GetInstance().Init();
349
350 int32_t callingUid = 0;
351 sptr<IRemoteObject> obj(new RemoteOnListenerStubTest());
352 auto ret = MultiUserManager::GetInstance().OnRegisterOffListener(TYPE, obj, callingUid);
353 EXPECT_EQ(ret, DMS_NOT_FOREGROUND_USER);
354
355 MultiUserManager::GetInstance().UnInit();
356 DTEST_LOG << "MultiUserManager_OnRegisterOffListener_001 end" << std::endl;
357 }
358
359 /**
360 * @tc.name: MultiUserManager_GetForegroundUser_001
361 * @tc.desc: test GetForegroundUser
362 * @tc.type: FUNC
363 */
364 HWTEST_F(MultiUserManagerTest, MultiUserManager_GetForegroundUser_001, TestSize.Level3)
365 {
366 DTEST_LOG << "MultiUserManager_GetForegroundUser_001 start" << std::endl;
367 /**
368 * @tc.steps: step1. test OnUserRemoved with get currrent accountid
369 */
370 int32_t accountId = 100;
371 int32_t ret = MultiUserManager::GetInstance().GetForegroundUser();
372 EXPECT_EQ(ret, accountId);
373
374 DTEST_LOG << "MultiUserManager_GetForegroundUser_001 end" << std::endl;
375 }
376
377 /**
378 * @tc.name: MultiUserManager_IsUserForeground_001
379 * @tc.desc: test IsUserForeground
380 * @tc.type: FUNC
381 */
382 HWTEST_F(MultiUserManagerTest, MultiUserManager_IsUserForeground_001, TestSize.Level3)
383 {
384 DTEST_LOG << "MultiUserManager_IsUserForeground_001 start" << std::endl;
385 /**
386 * @tc.steps: step1. test OnUserRemoved with is foreground user
387 */
388 int32_t accountId = 100;
389 int32_t otherAccountId = 101;
390
391 bool ret = MultiUserManager::GetInstance().IsUserForeground(accountId);
392 EXPECT_TRUE(ret);
393
394 ret = MultiUserManager::GetInstance().IsUserForeground(otherAccountId);
395 EXPECT_FALSE(ret);
396
397 DTEST_LOG << "MultiUserManager_IsCallerForeground_001 end" << std::endl;
398 }
399 } // namespace DistributedSchedule
400 } // namespace OHOS
401