1 /*
2  * Copyright (c) 2021-2023 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 "display_power_mgr_service_test.h"
17 
18 #include <iservice_registry.h>
19 #include <system_ability_definition.h>
20 #include <vector>
21 
22 #include "display_power_mgr_client.h"
23 #include "display_log.h"
24 
25 using namespace testing::ext;
26 using namespace OHOS;
27 using namespace OHOS::DisplayPowerMgr;
28 
SetUp()29 void DisplayPowerMgrServiceTest::SetUp()
30 {
31     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
32 }
33 
TearDown()34 void DisplayPowerMgrServiceTest::TearDown()
35 {
36     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
37 }
38 
39 namespace {
40 /**
41  * @tc.name: DisplayPowerMgrService001
42  * @tc.desc: Test DisplayPowerMgrService service ready.
43  * @tc.type: FUNC
44  */
45 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService001, TestSize.Level0)
46 {
47     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService01 is start");
48     sptr<ISystemAbilityManager> sam = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
49     EXPECT_TRUE(sam != nullptr) << "DisplayPowerMgrService01 fail to get GetSystemAbilityManager";
50     sptr<IRemoteObject> remoteObject_ = sam->CheckSystemAbility(DISPLAY_MANAGER_SERVICE_ID);
51     EXPECT_TRUE(remoteObject_ != nullptr) << "GetSystemAbility failed.";
52 }
53 
54 /**
55  * @tc.name: DisplayPowerMgrService002
56  * @tc.desc: Test set screen state off
57  * @tc.type: FUNC
58  */
59 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService002, TestSize.Level0)
60 {
61     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService002 is start");
62     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
63     EXPECT_TRUE(ret);
64 }
65 
66 /**
67  * @tc.name: DisplayPowerMgrService003
68  * @tc.desc: Test set screen state on
69  * @tc.type: FUNC
70  */
71 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService003, TestSize.Level0)
72 {
73     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService003 is start");
74     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
75     EXPECT_TRUE(ret);
76 }
77 
78 /**
79  * @tc.name: DisplayPowerMgrService004
80  * @tc.desc: Test set screen state dim
81  * @tc.type: FUNC
82  */
83 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService004, TestSize.Level0)
84 {
85     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService004 is start");
86     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_DIM);
87     EXPECT_TRUE(ret);
88 }
89 
90 /**
91  * @tc.name: DisplayPowerMgrService005
92  * @tc.desc: Test set screen state suspend
93  * @tc.type: FUNC
94  */
95 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService005, TestSize.Level0)
96 {
97     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService005 is start");
98     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_SUSPEND);
99     EXPECT_TRUE(ret);
100 }
101 
102 /**
103  * @tc.name: DisplayPowerMgrService006
104  * @tc.desc: Test set screen state unknown
105  * @tc.type: FUNC
106  */
107 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService006, TestSize.Level0)
108 {
109     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService006 is start");
110     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_UNKNOWN);
111     EXPECT_TRUE(ret);
112 }
113 
114 /**
115  * @tc.name: DisplayPowerMgrService007
116  * @tc.desc: Test set screen state on
117  * @tc.type: FUNC
118  */
119 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService007, TestSize.Level0)
120 {
121     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService007 is start");
122     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
123     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
124     EXPECT_TRUE(ret);
125     DisplayState state = DisplayPowerMgrClient::GetInstance().GetDisplayState();
126     EXPECT_TRUE(state == DisplayState::DISPLAY_ON);
127 }
128 
129 /**
130  * @tc.name: DisplayPowerMgrService008
131  * @tc.desc: Test set screen state dim
132  * @tc.type: FUNC
133  */
134 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService008, TestSize.Level0)
135 {
136     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService008 is start");
137     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_DIM);
138     EXPECT_TRUE(ret);
139     DisplayState state = DisplayPowerMgrClient::GetInstance().GetDisplayState();
140     EXPECT_TRUE(state == DisplayState::DISPLAY_DIM);
141 }
142 
143 /**
144  * @tc.name: DisplayPowerMgrService009
145  * @tc.desc: Test set screen state off
146  * @tc.type: FUNC
147  */
148 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService009, TestSize.Level0)
149 {
150     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService009 is start");
151     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
152     EXPECT_TRUE(ret);
153     DisplayState state = DisplayPowerMgrClient::GetInstance().GetDisplayState();
154     EXPECT_TRUE(state == DisplayState::DISPLAY_OFF);
155 }
156 
157 /**
158  * @tc.name: DisplayPowerMgrService010
159  * @tc.desc: Test set screen state suspend
160  * @tc.type: FUNC
161  */
162 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService010, TestSize.Level0)
163 {
164     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService010 is start");
165     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_SUSPEND);
166     EXPECT_TRUE(ret);
167     DisplayState state = DisplayPowerMgrClient::GetInstance().GetDisplayState();
168     EXPECT_TRUE(state == DisplayState::DISPLAY_SUSPEND);
169 }
170 
171 /**
172  * @tc.name: DisplayPowerMgrService011
173  * @tc.desc: Test set screen state unknown
174  * @tc.type: FUNC
175  */
176 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService011, TestSize.Level0)
177 {
178     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService011 is start");
179     auto ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_UNKNOWN);
180     EXPECT_TRUE(ret);
181     DisplayState state = DisplayPowerMgrClient::GetInstance().GetDisplayState();
182     EXPECT_TRUE(state == DisplayState::DISPLAY_UNKNOWN);
183 }
184 
185 /**
186  * @tc.name: DisplayPowerMgrService012
187  * @tc.desc: Test GetDisplayIds
188  * @tc.type: FUNC
189  */
190 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService012, TestSize.Level0)
191 {
192     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService012 is start");
193     std::vector<uint32_t> ret = DisplayPowerMgrClient::GetInstance().GetDisplayIds();
194     EXPECT_TRUE(ret.size() != 0);
195 }
196 
197 /**
198  * @tc.name: DisplayPowerMgrService013
199  * @tc.desc: Test GetMainDisplayId
200  * @tc.type: FUNC
201  */
202 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService013, TestSize.Level0)
203 {
204     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService013 is start");
205     int32_t ret = DisplayPowerMgrClient::GetInstance().GetMainDisplayId();
206     EXPECT_TRUE(ret == 0);
207 }
208 
209 /**
210  * @tc.name: DisplayPowerMgrService014
211  * @tc.desc: Test AutoAdjustBrightness
212  * @tc.type: FUNC
213  */
214 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService014, TestSize.Level0)
215 {
216     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService014 is start");
217     bool ret = DisplayPowerMgrClient::GetInstance().AutoAdjustBrightness(true);
218     if (ret) {
219         DISPLAY_HILOGI(LABEL_TEST, "AutoAdjustBrightness: is supported");
220         ret = DisplayPowerMgrClient::GetInstance().AutoAdjustBrightness(false);
221         EXPECT_TRUE(ret);
222     } else {
223         DISPLAY_HILOGI(LABEL_TEST, "AutoAdjustBrightness: is not supported");
224         EXPECT_FALSE(ret);
225     }
226 }
227 
228 /**
229  * @tc.name: DisplayPowerMgrService015
230  * @tc.desc: Test GetError
231  * @tc.type: FUNC
232  */
233 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService015, TestSize.Level0)
234 {
235     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService015 is start");
236     DisplayErrors error = DisplayPowerMgrClient::GetInstance().GetError();
237     DISPLAY_HILOGI(LABEL_TEST, "get error %{public}d", static_cast<int32_t>(error));
238     EXPECT_TRUE(error == DisplayErrors::ERR_OK);
239 }
240 
241 /**
242  * @tc.name: DisplayPowerMgrService016
243  * @tc.desc: Test RegisterCallback(Input callback is nullptr, function return false)
244  * @tc.type: FUNC
245  * @tc.require: issueI63PTF
246  */
247 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService016, TestSize.Level0)
248 {
249     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService016 is start");
250     bool result = DisplayPowerMgrClient::GetInstance().RegisterCallback(nullptr);
251     EXPECT_EQ(result, false);
252 }
253 
254 /**
255  * @tc.name: DisplayPowerMgrService017
256  * @tc.desc: Test OverrideDisplayOffDelay para
257  * @tc.type: FUNC
258  */
259 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService017, TestSize.Level0)
260 {
261     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService017 is start");
262     bool ret = DisplayPowerMgrClient::GetInstance().OverrideDisplayOffDelay(0);
263     EXPECT_FALSE(ret);
264 }
265 
266 /**
267  * @tc.name: DisplayPowerMgrService018
268  * @tc.desc: Test prohibitting writing delay screen off time in screen off state
269  * @tc.type: FUNC
270  */
271 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService018, TestSize.Level0)
272 {
273     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService018 is start");
274     DisplayState State = DisplayPowerMgrClient::GetInstance().GetDisplayState();
275     if (State != DisplayState::DISPLAY_OFF) {
276         DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
277     }
278     uint32_t delayTime = 10; //delay time is 10ms
279     bool ret = DisplayPowerMgrClient::GetInstance().OverrideDisplayOffDelay(delayTime);
280     EXPECT_FALSE(ret);
281 }
282 
283 /**
284  * @tc.name: DisplayPowerMgrService019
285  * @tc.desc: Test srceen delay off
286  * @tc.type: FUNC
287  */
288 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService019, TestSize.Level0)
289 {
290     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService019 is start");
291     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
292     uint32_t delayTime = 10; //delay time is 10ms
293     DisplayPowerMgrClient::GetInstance().OverrideDisplayOffDelay(delayTime);
294     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
295     DisplayState delayState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
296     EXPECT_TRUE(delayState == DisplayState::DISPLAY_DELAY_OFF);
297     //Callback for waiting window
298     int sleepTime = 3; // sleep time is 3s
299     sleep(sleepTime);
300     DisplayState offState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
301     EXPECT_TRUE(offState == DisplayState::DISPLAY_OFF);
302 }
303 
304 /**
305  * @tc.name: DisplayPowerMgrService020
306  * @tc.desc: Test srceen delay off interrupt
307  * @tc.type: FUNC
308  */
309 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService020, TestSize.Level0)
310 {
311     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService020 is start");
312     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
313     uint32_t delayTime = 200; //delay time is 200ms
314     DisplayPowerMgrClient::GetInstance().OverrideDisplayOffDelay(delayTime);
315     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
316     int sleepTime = 100000; // sleep time is 100ms
317     usleep(sleepTime);
318     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
319     sleepTime = 300000; // sleep time is 300ms
320     usleep(sleepTime);
321     DisplayState onState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
322     EXPECT_TRUE(onState == DisplayState::DISPLAY_ON);
323 }
324 
325 /**
326  * @tc.name: DisplayPowerMgrService021
327  * @tc.desc: Test set coordinated and set display state
328  * @tc.type: FUNC
329  * @tc.require: issueI8JBT4
330  */
331 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService021, TestSize.Level0)
332 {
333     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService021 is start");
334     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
335     int sleepTime = 2;
336     //Callback for waiting window 2s
337     sleep(sleepTime);
338     bool coordinated = true;
339     auto ret = DisplayPowerMgrClient::GetInstance().SetCoordinated(coordinated);
340     EXPECT_TRUE(ret);
341     // Prepare test environment.
342     // If the state of display is DISPLAY_ON, change it to DISPLAY_OFF.
343     DisplayPowerMgrClient::GetInstance().SetDisplayState(
344         DisplayState::DISPLAY_OFF, PowerMgr::StateChangeReason::STATE_CHANGE_REASON_APPLICATION);
345     sleep(sleepTime);
346     ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(
347         DisplayState::DISPLAY_ON, PowerMgr::StateChangeReason::STATE_CHANGE_REASON_APPLICATION);
348     EXPECT_TRUE(ret);
349     ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(
350         DisplayState::DISPLAY_OFF, PowerMgr::StateChangeReason::STATE_CHANGE_REASON_APPLICATION);
351     EXPECT_TRUE(ret);
352 }
353 
354 /**
355  * @tc.name: DisplayPowerMgrService022
356  * @tc.desc: Test set display state in Pre-light the screen
357  * @tc.type: FUNCs
358  * @tc.require: issue#I9AJ1S
359  */
360 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService022, TestSize.Level0)
361 {
362     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService022 is start");
363     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON);
364     DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
365     int sleepTime = 2;
366     //Callback for waiting window 2s
367     sleep(sleepTime);
368     DisplayState currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
369     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
370 
371     bool ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON,
372         PowerMgr::StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT);
373     EXPECT_FALSE(ret);
374     currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
375     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
376 }
377 
378 /**
379  * @tc.name: DisplayPowerMgrService023
380  * @tc.desc: Test set display state in Pre-light the screen and auth success
381  * @tc.type: FUNC
382  * @tc.require: issue#I9AJ1S
383  */
384 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService023, TestSize.Level0)
385 {
386     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService023 is start");
387     bool ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
388     int sleepTime = 2;
389     //Callback for waiting window 2s
390     sleep(sleepTime);
391     DisplayState currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
392     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
393 
394     ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON,
395         PowerMgr::StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_SUCCESS);
396     EXPECT_TRUE(ret);
397     currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
398     EXPECT_TRUE(currentState == DisplayState::DISPLAY_ON);
399 }
400 
401 /**
402  * @tc.name: DisplayPowerMgrService024
403  * @tc.desc: Test set display state in Pre-light the screen and auth failed but screen on
404  * @tc.type: FUNC
405  * @tc.require: issue#I9AJ1S
406  */
407 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService024, TestSize.Level0)
408 {
409     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService024 is start");
410     bool ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
411     int sleepTime = 2;
412     //Callback for waiting window 2s
413     sleep(sleepTime);
414     DisplayState currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
415     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
416 
417     ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_ON,
418         PowerMgr::StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_ON);
419     EXPECT_TRUE(ret);
420     currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
421     EXPECT_TRUE(currentState == DisplayState::DISPLAY_ON);
422 }
423 
424 /**
425  * @tc.name: DisplayPowerMgrService025
426  * @tc.desc: Test set display state in Pre-light the screen and auth failed but screen on
427  * @tc.type: FUNC
428  * @tc.require: issue#I9AJ1S
429  */
430 HWTEST_F(DisplayPowerMgrServiceTest, DisplayPowerMgrService025, TestSize.Level0)
431 {
432     DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrService025 is start");
433     bool ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF);
434     int sleepTime = 2;
435     //Callback for waiting window 2s
436     sleep(sleepTime);
437     DisplayState currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
438     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
439 
440     ret = DisplayPowerMgrClient::GetInstance().SetDisplayState(DisplayState::DISPLAY_OFF,
441         PowerMgr::StateChangeReason::STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_OFF);
442     sleep(sleepTime);
443     EXPECT_FALSE(ret);
444     currentState = DisplayPowerMgrClient::GetInstance().GetDisplayState();
445     EXPECT_TRUE(currentState == DisplayState::DISPLAY_OFF);
446 }
447 
448 } // namespace
449