1 /*
2  * Copyright (c) 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 #include <gtest/gtest.h>
17 
18 #define private public
19 #include "ability_manager_service.h"
20 #include "user_controller.h"
21 #undef private
22 #include "scene_board_judgement.h"
23 #include "user_callback_stub.h"
24 using namespace testing;
25 using namespace testing::ext;
26 
27 namespace OHOS {
28 namespace AAFwk {
29 class UserControllerTest : public testing::Test {
30 public:
31     static void SetUpTestCase();
32     static void TearDownTestCase();
33     void SetUp() override;
34     void TearDown() override;
35 };
36 
SetUpTestCase()37 void UserControllerTest::SetUpTestCase()
38 {
39     auto abilityMs = OHOS::DelayedSingleton<AbilityManagerService>::GetInstance();
40     AmsConfigurationParameter::GetInstance().Parse();
41 }
42 
TearDownTestCase()43 void UserControllerTest::TearDownTestCase()
44 {}
45 
SetUp()46 void UserControllerTest::SetUp()
47 {}
48 
TearDown()49 void UserControllerTest::TearDown()
50 {}
51 
52 class TestUserCallback : public UserCallbackStub {
53 public:
54     void OnStopUserDone(int userId, int errcode) override;
55     void OnStartUserDone(int userId, int errcode) override;
56 
57     int errCode_ = -1;
58 };
59 
OnStartUserDone(int userId,int errcode)60 void TestUserCallback::OnStartUserDone(int userId, int errcode)
61 {
62     errCode_ = errcode;
63 }
64 
OnStopUserDone(int userId,int errcode)65 void TestUserCallback::OnStopUserDone(int userId, int errcode) {}
66 
67 /**
68  * @tc.name: UserItemSetState_0100
69  * @tc.desc: UserItemSetState Test
70  * @tc.type: FUNC
71  * @tc.require: issueI581SE
72  */
73 HWTEST_F(UserControllerTest, UserItemSetState_0100, TestSize.Level0)
74 {
75     UserItem item(100);
76     item.SetState(UserState::STATE_BOOTING);
77     EXPECT_TRUE(item.GetState() == UserState::STATE_BOOTING);
78 
79     item.SetState(UserState::STATE_STARTED);
80     EXPECT_TRUE(item.GetState() == UserState::STATE_STARTED);
81 }
82 
83 /**
84  * @tc.name: StartUserTest_0100
85  * @tc.desc: StartUser Test
86  * @tc.type: FUNC
87  * @tc.require: issueI581SE
88  */
89 HWTEST_F(UserControllerTest, StartUserTest_0100, TestSize.Level0)
90 {
91     UserController userController;
92     userController.GetOrCreateUserItem(1000);
93     userController.SetCurrentUserId(1000);
94     sptr<TestUserCallback> callback = new TestUserCallback();
95     userController.StartUser(1000, callback);
96     EXPECT_TRUE(callback->errCode_ == 0);
97 }
98 
99 /**
100  * @tc.name: StartUserTest_0200
101  * @tc.desc: StartUser Test
102  * @tc.type: FUNC
103  * @tc.require: issueI581SE
104  */
105 HWTEST_F(UserControllerTest, StartUserTest_0200, TestSize.Level0)
106 {
107     UserController userController;
108     sptr<TestUserCallback> callback = new TestUserCallback();
109     userController.StartUser(666, callback);
110     EXPECT_TRUE(callback->errCode_ != 0);
111 }
112 
113 /**
114  * @tc.name: StopUserTest_0100
115  * @tc.desc: StopUser Test
116  * @tc.type: FUNC
117  * @tc.require: issueI581SE
118  */
119 HWTEST_F(UserControllerTest, StopUserTest_0100, TestSize.Level0)
120 {
121     UserController userController;
122     userController.StopUser(-1);
123     userController.StopUser(0);
124     EXPECT_TRUE(userController.StopUser(100) == -1);
125 }
126 
127 /**
128  * @tc.name: StopUserTest_0200
129  * @tc.desc: StopUser Test
130  * @tc.type: FUNC
131  * @tc.require: issueI581SE
132  */
133 HWTEST_F(UserControllerTest, StopUserTest_0200, TestSize.Level0)
134 {
135     UserController userController;
136     EXPECT_TRUE(userController.StopUser(666) == -1);
137 }
138 
139 /**
140  * @tc.name: StopUserTest_0300
141  * @tc.desc: StopUser Test
142  * @tc.type: FUNC
143  * @tc.require: issueI581SE
144  */
145 HWTEST_F(UserControllerTest, StopUserTest_0300, TestSize.Level0)
146 {
147     UserController userController;
148     userController.GetOrCreateUserItem(1000);
149     auto result = userController.StopUser(1000);
150     EXPECT_TRUE(result = 1000);
151 }
152 
153 /**
154  * @tc.name: LogoutUserTest_0100
155  * @tc.desc: LogoutUser Test
156  * @tc.type: FUNC
157  * @tc.require: issueI581SE
158  */
159 HWTEST_F(UserControllerTest, LogoutUserTest_0100, TestSize.Level0)
160 {
161     UserController userController;
162     auto result = userController.LogoutUser(-1);
163     if (!Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) {
164         EXPECT_EQ(result, INVALID_USERID_VALUE);
165     }
166     EXPECT_TRUE(userController.GetCurrentUserId() == 0);
167 }
168 
169 /**
170  * @tc.name: LogoutUserTest_0200
171  * @tc.desc: LogoutUser Test
172  * @tc.type: FUNC
173  * @tc.require: issueI581SE
174  */
175 HWTEST_F(UserControllerTest, LogoutUserTest_0200, TestSize.Level0)
176 {
177     UserController userController;
178     auto result = userController.LogoutUser(666);
179     if (!Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) {
180         EXPECT_EQ(result, INVALID_USERID_VALUE);
181     }
182     EXPECT_TRUE(userController.GetCurrentUserId() == 0);
183 }
184 
185 /**
186  * @tc.name: LogoutUserTest_0300
187  * @tc.desc: LogoutUser Test
188  * @tc.type: FUNC
189  * @tc.require: issueI581SE
190  */
191 HWTEST_F(UserControllerTest, LogoutUserTest_0300, TestSize.Level0)
192 {
193     UserController userController;
194     userController.GetOrCreateUserItem(1000);
195     auto result = userController.LogoutUser(1000);
196     EXPECT_TRUE(result = 1000);
197 }
198 
199 /**
200  * @tc.name: HandleContinueUserSwitchTest_0100
201  * @tc.desc: HandleContinueUserSwitch Test
202  * @tc.type: FUNC
203  * @tc.require: issueI581SE
204  */
205 HWTEST_F(UserControllerTest, HandleContinueUserSwitchTest_0100, TestSize.Level0)
206 {
207     UserController userController;
208     auto userItem = std::make_shared<UserItem>(1000);
209     userController.HandleContinueUserSwitch(1000, 1000, userItem);
210     auto result = userController.GetCurrentUserId();
211     EXPECT_TRUE(result == 0);
212 }
213 
214 /**
215  * @tc.name: SendUserSwitchDoneTest_0100
216  * @tc.desc: SendUserSwitchDone Test
217  * @tc.type: FUNC
218  * @tc.require: issueI581SE
219  */
220 HWTEST_F(UserControllerTest, SendUserSwitchDoneTest_0100, TestSize.Level0)
221 {
222     UserController userController;
223     userController.SendUserSwitchDone(1000);
224     userController.Init();
225     userController.SendUserSwitchDone(1001);
226     auto result = userController.GetCurrentUserId();
227     EXPECT_TRUE(result == 0);
228 }
229 
230 /**
231  * @tc.name: SendContinueUserSwitchTest_0200
232  * @tc.desc: SendContinueUserSwitch Test
233  * @tc.type: FUNC
234  * @tc.require: issueI581SE
235  */
236 HWTEST_F(UserControllerTest, SendContinueUserSwitchTest_0200, TestSize.Level0)
237 {
238     UserController userController;
239     auto userItem = std::make_shared<UserItem>(1000);
240     userController.SendContinueUserSwitch(1000, 1000, userItem);
241     userController.Init();
242     userController.SendContinueUserSwitch(1000, 1000, userItem);
243     auto result = userController.GetCurrentUserId();
244     EXPECT_TRUE(result == 0);
245 }
246 
247 /**
248  * @tc.name: SendUserSwitchTimeoutTest_0100
249  * @tc.desc: SendUserSwitchTimeout Test
250  * @tc.type: FUNC
251  * @tc.require: issueI581SE
252  */
253 HWTEST_F(UserControllerTest, SendUserSwitchTimeoutTest_0100, TestSize.Level0)
254 {
255     UserController userController;
256     auto userItem = std::make_shared<UserItem>(1000);
257     userController.SendUserSwitchTimeout(1000, 1000, userItem);
258     userController.Init();
259     userController.SendUserSwitchTimeout(1000, 1000, userItem);
260     auto result = userController.GetCurrentUserId();
261     EXPECT_TRUE(result == 0);
262 }
263 
264 /**
265  * @tc.name: SendReportUserSwitchTest_0100
266  * @tc.desc: SendReportUserSwitch Test
267  * @tc.type: FUNC
268  * @tc.require: issueI581SE
269  */
270 HWTEST_F(UserControllerTest, SendReportUserSwitchTest_0100, TestSize.Level0)
271 {
272     UserController userController;
273     auto userItem = std::make_shared<UserItem>(1000);
274     userController.SendReportUserSwitch(1000, 1000, userItem);
275     userController.Init();
276     userController.SendReportUserSwitch(1000, 1000, userItem);
277     auto result = userController.GetCurrentUserId();
278     EXPECT_TRUE(result == 0);
279 }
280 
281 /**
282  * @tc.name: SendSystemUserCurrentTest_0100
283  * @tc.desc: SendSystemUserCurrent Test
284  * @tc.type: FUNC
285  * @tc.require: issueI581SE
286  */
287 HWTEST_F(UserControllerTest, SendSystemUserCurrentTest_0100, TestSize.Level0)
288 {
289     UserController userController;
290     userController.SendSystemUserCurrent(1000, 1000);
291     userController.Init();
292     userController.SendSystemUserCurrent(1000, 1000);
293     auto result = userController.GetCurrentUserId();
294     EXPECT_TRUE(result == 0);
295 }
296 
297 /**
298  * @tc.name: SendSystemUserStartTest_0100
299  * @tc.desc: SendSystemUserStart Test
300  * @tc.type: FUNC
301  * @tc.require: issueI581SE
302  */
303 HWTEST_F(UserControllerTest, SendSystemUserStartTest_0100, TestSize.Level0)
304 {
305     UserController userController;
306     userController.SendSystemUserStart(1000);
307     userController.Init();
308     userController.SendSystemUserStart(1000);
309     auto result = userController.GetCurrentUserId();
310     EXPECT_TRUE(result == 0);
311 }
312 }  // namespace AAFwk
313 }  // namespace OHOS
314