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