1 /*
2 * Copyright (c) 2023-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 #include "power_suspend_test.h"
16 #include <fstream>
17 #include <thread>
18 #include <unistd.h>
19
20 #ifdef POWERMGR_GTEST
21 #define private public
22 #define protected public
23 #endif
24
25 #include <datetime_ex.h>
26 #include <input_manager.h>
27 #include <securec.h>
28
29 #include "power_mgr_service.h"
30 #include "power_state_callback_stub.h"
31 #include "power_state_machine.h"
32 #include "setting_helper.h"
33
34 using namespace testing::ext;
35 using namespace OHOS::PowerMgr;
36 using namespace OHOS;
37 using namespace std;
38 static sptr<PowerMgrService> g_service;
39 static constexpr int SLEEP_WAIT_TIME_S = 2;
40 static constexpr size_t WAKEUP_WAIT_TIME = 500;
41 static constexpr size_t USECPERMSEC = 1000;
42
SetUpTestCase(void)43 void PowerSuspendTest::SetUpTestCase(void)
44 {
45 g_service = DelayedSpSingleton<PowerMgrService>::GetInstance();
46 g_service->OnStart();
47 g_service->WakeupControllerInit();
48 g_service->SuspendControllerInit();
49 }
50
TearDownTestCase(void)51 void PowerSuspendTest::TearDownTestCase(void)
52 {
53 g_service->OnStop();
54 DelayedSpSingleton<PowerMgrService>::DestroyInstance();
55 }
56
57 namespace {
58 /**
59 * @tc.name: PowerSuspendTest001
60 * @tc.desc: test simulate powerkey event when screenon
61 * @tc.type: FUNC
62 */
63 HWTEST_F(PowerSuspendTest, PowerSuspendTest001, TestSize.Level0)
64 {
65 POWER_HILOGI(LABEL_TEST, "PowerSuspendTest001: start");
66 g_service->WakeupDevice(
67 static_cast<int64_t>(time(nullptr)), WakeupDeviceType::WAKEUP_DEVICE_POWER_BUTTON, "PowerSuspendTest001");
68 EXPECT_TRUE(g_service->IsScreenOn());
69
70 auto inputManager = MMI::InputManager::GetInstance();
71 std::shared_ptr<MMI::KeyEvent> keyEventPowerkeyDown = MMI::KeyEvent::Create();
72 keyEventPowerkeyDown->SetKeyAction(MMI::KeyEvent::KEY_ACTION_DOWN);
73 keyEventPowerkeyDown->SetKeyCode(MMI::KeyEvent::KEYCODE_POWER);
74 std::shared_ptr<MMI::KeyEvent> keyEventPowerkeyUp = MMI::KeyEvent::Create();
75 keyEventPowerkeyUp->SetKeyAction(MMI::KeyEvent::KEY_ACTION_UP);
76 keyEventPowerkeyUp->SetKeyCode(MMI::KeyEvent::KEYCODE_POWER);
77
78 inputManager->SimulateInputEvent(keyEventPowerkeyDown);
79 inputManager->SimulateInputEvent(keyEventPowerkeyUp);
80 inputManager->SimulateInputEvent(keyEventPowerkeyDown);
81 inputManager->SimulateInputEvent(keyEventPowerkeyUp);
82 sleep(2);
83 // the second powerkey event would interrupt the transition to INACTIVE
84 EXPECT_TRUE(g_service->IsScreenOn());
85 POWER_HILOGI(LABEL_TEST, "PowerSuspendTest001: end");
86 }
87 /**
88 * @tc.name: PowerSuspendTest002
89 * @tc.desc: test simulate powerkey event once when screenon
90 * @tc.type: FUNC
91 */
92 HWTEST_F(PowerSuspendTest, PowerSuspendTest002, TestSize.Level0)
93 {
94 POWER_HILOGI(LABEL_TEST, "PowerSuspendTest002: start");
95 g_service->WakeupDevice(
96 static_cast<int64_t>(time(nullptr)), WakeupDeviceType::WAKEUP_DEVICE_POWER_BUTTON, "PowerSuspendTest002");
97 EXPECT_TRUE(g_service->IsScreenOn());
98
99
100 std::shared_ptr<MMI::KeyEvent> keyEventPowerkeyDown = MMI::KeyEvent::Create();
101 keyEventPowerkeyDown->SetKeyAction(MMI::KeyEvent::KEY_ACTION_DOWN);
102 keyEventPowerkeyDown->SetKeyCode(MMI::KeyEvent::KEYCODE_POWER);
103 std::shared_ptr<MMI::KeyEvent> keyEventPowerkeyUp = MMI::KeyEvent::Create();
104 keyEventPowerkeyUp->SetKeyAction(MMI::KeyEvent::KEY_ACTION_UP);
105 keyEventPowerkeyUp->SetKeyCode(MMI::KeyEvent::KEYCODE_POWER);
106
107 auto inputManager = MMI::InputManager::GetInstance();
108 inputManager->SimulateInputEvent(keyEventPowerkeyDown);
109 inputManager->SimulateInputEvent(keyEventPowerkeyUp);
110 sleep(2);
111 EXPECT_FALSE(g_service->IsScreenOn());
112 POWER_HILOGI(LABEL_TEST, "PowerSuspendTest002: end");
113 }
114 } // namespace