1 /*
2 * Copyright (c) 2022-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 "power_mock_proxy_test.h"
17
18 #include <datetime_ex.h>
19
20 #include "mock_power_remote_object.h"
21 #include "parcel.h"
22 #include "power_log.h"
23 #include "power_mgr_client.h"
24 #include "power_mgr_proxy.h"
25 #include "power_mode_callback_proxy.h"
26 #include "power_state_callback_proxy.h"
27 #include "power_runninglock_callback_proxy.h"
28 #include "power_state_machine_info.h"
29 #include "running_lock.h"
30 #include "running_lock_info.h"
31 #include "running_lock_token_stub.h"
32 #include "power_mgr_async_reply_stub.h"
33
34 using namespace testing::ext;
35 using namespace OHOS::PowerMgr;
36 using namespace OHOS;
37 using namespace std;
38
OnPowerModeChanged(PowerMode mode)39 void PowerMockProxyTest::PowerModeTestCallback::OnPowerModeChanged(PowerMode mode)
40 {
41 POWER_HILOGI(LABEL_TEST, "PowerModeTestCallback::OnPowerModeChanged.");
42 }
43
OnPowerStateChanged(PowerState state)44 void PowerMockProxyTest::PowerStateTestCallback::OnPowerStateChanged(PowerState state)
45 {
46 POWER_HILOGI(LABEL_TEST, "PowerStateTestCallback::OnPowerStateChanged.");
47 }
48
HandleRunningLockMessage(std::string message)49 void PowerMockProxyTest::PowerRunningLockTestCallback::HandleRunningLockMessage(std::string message)
50 {
51 POWER_HILOGI(LABEL_TEST, "PowerRunningLockTestCallback::HandleRunningLockMessage.");
52 }
53 namespace {
54 /**
55 * @tc.name: PowerMockProxyTest001
56 * @tc.desc: Test proxy when the parcel is mock
57 * @tc.type: FUNC
58 */
59 HWTEST_F(PowerMockProxyTest, PowerMockProxyTest001, TestSize.Level2)
60 {
61 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest001 function start!");
62 pid_t uid = 0;
63 pid_t pid = 0;
64 int32_t powerError = 1;
65 int32_t timeOutMs = -1;
66 std::string name;
67 bool lockTypeSupported = false;
68 bool isUsed = false;
69 sptr<IPCObjectStub> remote = new IPCObjectStub();
70 std::shared_ptr<PowerMgrProxy> sptrProxy = std::make_shared<PowerMgrProxy>(remote);
71 sptr<IRemoteObject> token = new RunningLockTokenStub();
72 RunningLockInfo info("test1", RunningLockType::RUNNINGLOCK_SCREEN);
73 sptrProxy->CreateRunningLockIpc(token, info, powerError);
74 EXPECT_FALSE(powerError == static_cast<int32_t>(PowerErrors::ERR_OK));
75 EXPECT_NE(sptrProxy->ReleaseRunningLockIpc(token, name), ERR_OK);
76 sptrProxy->IsRunningLockTypeSupportedIpc(
77 static_cast<int32_t>(RunningLockType::RUNNINGLOCK_BUTT), lockTypeSupported);
78 EXPECT_FALSE(lockTypeSupported);
79 sptrProxy->LockIpc(token, timeOutMs, powerError);
80 EXPECT_FALSE(powerError == static_cast<int32_t>(PowerErrors::ERR_OK));
81 sptrProxy->UnLockIpc(token, name, powerError);
82 EXPECT_FALSE(powerError == static_cast<int32_t>(PowerErrors::ERR_OK));
83 sptrProxy->IsUsedIpc(token, isUsed);
84 EXPECT_FALSE(isUsed);
85 EXPECT_NE(sptrProxy->ProxyRunningLockIpc(true, pid, uid), ERR_OK);
86 std::unique_ptr<VectorPair> vectorPairInfos = std::make_unique<VectorPair>();
87 std::vector<std::pair<pid_t, pid_t>> processInfos;
88 processInfos.emplace_back(pid, uid);
89 vectorPairInfos->SetProcessInfos(processInfos);
90 EXPECT_NE(sptrProxy->ProxyRunningLocksIpc(true, *vectorPairInfos), ERR_OK);
91 EXPECT_NE(sptrProxy->ResetRunningLocksIpc(), ERR_OK);
92 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest001 function end!");
93 }
94
95 /**
96 * @tc.name: PowerMockProxyTest002
97 * @tc.desc: Test proxy when the parcel is mock
98 * @tc.type: FUNC
99 */
100 HWTEST_F(PowerMockProxyTest, PowerMockProxyTest002, TestSize.Level2)
101 {
102 int32_t powerError = 1;
103 int32_t powerMode = 0;
104 int32_t powerState = -1;
105 std::string apiVersion = "-1";
106 bool isScreenOn = false;
107 int32_t ret = 0;
108 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest002 function start!");
109 sptr<IPCObjectStub> remote = new IPCObjectStub();
110 std::shared_ptr<PowerMgrProxy> sptrProxy = std::make_shared<PowerMgrProxy>(remote);
111 int32_t suspendReason = (static_cast<int32_t>(SuspendDeviceType::SUSPEND_DEVICE_REASON_MAX)) + 1;
112 SuspendDeviceType abnormaltype = SuspendDeviceType(suspendReason);
113 ret = sptrProxy->SuspendDeviceIpc(0, static_cast<int32_t>(abnormaltype), false, apiVersion, powerError);
114 EXPECT_EQ(ret, ERR_INVALID_DATA);
115 ret = sptrProxy->WakeupDeviceIpc(GetTickCount(), static_cast<int32_t>(WakeupDeviceType::WAKEUP_DEVICE_APPLICATION),
116 std::string("app call"), apiVersion, powerError);
117 EXPECT_EQ(ret, ERR_INVALID_DATA);
118 int32_t userAttention = static_cast<int32_t>(UserActivityType::USER_ACTIVITY_TYPE_ATTENTION);
119 EXPECT_NE(sptrProxy->RefreshActivityIpc(GetTickCount(), userAttention, true), ERR_OK);
120 sptrProxy->OverrideScreenOffTimeIpc(200, apiVersion, powerError);
121 EXPECT_FALSE(powerError == static_cast<int32_t>(PowerErrors::ERR_OK));
122 sptrProxy->RestoreScreenOffTimeIpc(apiVersion, powerError);
123 EXPECT_FALSE(powerError == static_cast<int32_t>(PowerErrors::ERR_OK));
124 ret = sptrProxy->GetStateIpc(powerState);
125 EXPECT_NE(ret, ERR_OK);
126 sptrProxy->IsScreenOnIpc(true, isScreenOn);
127 EXPECT_FALSE(isScreenOn);
128 sptrProxy->SetDisplaySuspendIpc(true);
129 PowerMode mode1 = PowerMode::NORMAL_MODE;
130 ret = sptrProxy->SetDeviceModeIpc(static_cast<int32_t>(mode1), powerError);
131 EXPECT_EQ(ret, ERR_INVALID_DATA);
132 ret = sptrProxy->GetDeviceModeIpc(powerMode);
133 EXPECT_NE(ret, ERR_OK);
134 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest002 function end!");
135 }
136
137 /**
138 * @tc.name: PowerMockProxyTest003
139 * @tc.desc: Test proxy when the parcel is mock
140 * @tc.type: FUNC
141 */
142 HWTEST_F(PowerMockProxyTest, PowerMockProxyTest003, TestSize.Level2)
143 {
144 int32_t powerError = 1;
145 std::string apiVersion = "-1";
146 int32_t ret = 0;
147 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest003 function start!");
148 sptr<IPCObjectStub> remote = new IPCObjectStub();
149 std::shared_ptr<PowerMgrProxy> sptrProxy = std::make_shared<PowerMgrProxy>(remote);
150 sptr<IPowerStateCallback> cb1 = new PowerStateTestCallback();
151 sptr<IPowerModeCallback> cb3 = new PowerModeTestCallback();
152 sptr<IPowerRunninglockCallback> cb5 =new PowerRunningLockTestCallback();
153 sptr<PowerMgrStubAsync> asyncCallback = new PowerMgrStubAsync();
154 sptr<IPowerMgrAsync> powerProxy = iface_cast<IPowerMgrAsync>(asyncCallback);
155 EXPECT_NE(sptrProxy->RegisterPowerStateCallbackIpc(cb1, true), ERR_OK);
156 EXPECT_NE(sptrProxy->UnRegisterPowerStateCallbackIpc(cb1), ERR_OK);
157 EXPECT_NE(sptrProxy->RegisterPowerStateCallbackIpc(nullptr, true), ERR_OK);
158 EXPECT_NE(sptrProxy->UnRegisterPowerStateCallbackIpc(nullptr), ERR_OK);
159 EXPECT_NE(sptrProxy->RegisterPowerModeCallbackIpc(cb3), ERR_OK);
160 EXPECT_NE(sptrProxy->UnRegisterPowerModeCallbackIpc(cb3), ERR_OK);
161 EXPECT_NE(sptrProxy->RegisterPowerModeCallbackIpc(nullptr), ERR_OK);
162 EXPECT_NE(sptrProxy->UnRegisterPowerModeCallbackIpc(nullptr), ERR_OK);
163 EXPECT_NE(sptrProxy->RegisterRunningLockCallbackIpc(cb5), ERR_OK);
164 EXPECT_NE(sptrProxy->UnRegisterRunningLockCallbackIpc(cb5), ERR_OK);
165 EXPECT_NE(sptrProxy->RegisterRunningLockCallbackIpc(nullptr), ERR_OK);
166 EXPECT_NE(sptrProxy->UnRegisterRunningLockCallbackIpc(nullptr), ERR_OK);
167 ret = sptrProxy->RebootDeviceIpc(" ", powerError);
168 EXPECT_EQ(ret, ERR_INVALID_DATA);
169 ret = sptrProxy->ShutDownDeviceIpc(" ", powerError);
170 EXPECT_EQ(ret, ERR_INVALID_DATA);
171 ret = sptrProxy->ForceSuspendDeviceIpc(0, apiVersion, powerProxy);
172 EXPECT_EQ(ret, ERR_INVALID_DATA);
173 static std::vector<std::string> dumpArgs;
174 dumpArgs.push_back("-a");
175 std::string errorCode;
176 std::string actualDebugInfo;
177 sptrProxy->ShellDumpIpc(dumpArgs, dumpArgs.size(), actualDebugInfo);
178 EXPECT_EQ(errorCode, actualDebugInfo);
179 POWER_HILOGI(LABEL_TEST, "PowerMockProxyTest003 function end!");
180 }
181 } // namespace