1 /*
2 * Copyright (c) 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 "shutdown_client_test.h"
17
18 #include <condition_variable>
19 #include <future>
20 #include <mutex>
21 #include "power_log.h"
22 #include "power_mgr_client.h"
23 #include "power_mgr_service.h"
24 #include "shutdown/shutdown_client.h"
25
26 namespace OHOS {
27 namespace PowerMgr {
28 namespace UnitTest {
29 namespace {
30 MessageParcel g_reply;
31 MessageOption g_option;
32 bool g_isOnAsyncShutdown = false;
33 bool g_isOnSyncShutdown = false;
34 bool g_isOnTakeOverShutdown = false;
35 }
36 using namespace testing::ext;
37
SetUpTestCase()38 void ShutdownClientTest::SetUpTestCase()
39 {
40 }
41
TearDownTestCase()42 void ShutdownClientTest::TearDownTestCase()
43 {
44 }
45
SetUp()46 void ShutdownClientTest::SetUp()
47 {
48 g_isOnAsyncShutdown = false;
49 g_isOnSyncShutdown = false;
50 g_isOnTakeOverShutdown = false;
51 }
52
TearDown()53 void ShutdownClientTest::TearDown()
54 {}
55
OnAsyncShutdown()56 void ShutdownClientTest::AsyncShutdownCallback::OnAsyncShutdown()
57 {
58 g_isOnAsyncShutdown = true;
59 }
60
OnSyncShutdown()61 void ShutdownClientTest::SyncShutdownCallback::OnSyncShutdown()
62 {
63 g_isOnSyncShutdown = true;
64 }
65
OnTakeOverShutdown(bool isReboot)66 bool ShutdownClientTest::TakeOverShutdownCallback::OnTakeOverShutdown(bool isReboot)
67 {
68 g_isOnTakeOverShutdown = true;
69 return true;
70 }
71
72 /**
73 * @tc.name: RegisterShutdownCallback
74 * @tc.desc: Test RegisterShutdownCallback
75 * @tc.type: FUNC
76 */
77 HWTEST_F(ShutdownClientTest, RegisterShutdownCallback001, TestSize.Level0)
78 {
79 POWER_HILOGD(LABEL_TEST, "RegisterShutdownCallback001 start");
80 sptr<IAsyncShutdownCallback> asyncShutdownCallback = new AsyncShutdownCallback();
81 sptr<ISyncShutdownCallback> syncShutdownCallback = new SyncShutdownCallback();
82 sptr<ITakeOverShutdownCallback> takeOverShutdownCallback = new TakeOverShutdownCallback();
83 auto& shutdownClient = ShutdownClient::GetInstance();
84 shutdownClient.RegisterShutdownCallback(asyncShutdownCallback);
85 shutdownClient.RegisterShutdownCallback(syncShutdownCallback);
86 shutdownClient.RegisterShutdownCallback(takeOverShutdownCallback);
87
88 auto& powerMgrClient = PowerMgrClient::GetInstance();
89 powerMgrClient.RebootDevice("RegisterShutdownCallback001");
90 EXPECT_FALSE(g_isOnAsyncShutdown);
91 EXPECT_FALSE(g_isOnSyncShutdown);
92 EXPECT_TRUE(g_isOnTakeOverShutdown);
93
94 powerMgrClient.ShutDownDevice("RegisterShutdownCallback001");
95 EXPECT_FALSE(g_isOnAsyncShutdown);
96 EXPECT_FALSE(g_isOnSyncShutdown);
97 EXPECT_TRUE(g_isOnTakeOverShutdown);
98 POWER_HILOGD(LABEL_TEST, "RegisterShutdownCallback001 end");
99 }
100
101 /**
102 * @tc.name: UnRegisterShutdownCallback
103 * @tc.desc: Test UnRegisterShutdownCallback
104 * @tc.type: FUNC
105 */
106 HWTEST_F(ShutdownClientTest, UnRegisterShutdownCallback002, TestSize.Level0)
107 {
108 POWER_HILOGD(LABEL_TEST, "UnRegisterShutdownCallback002 start");
109 sptr<IAsyncShutdownCallback> asyncShutdownCallback = new AsyncShutdownCallback();
110 sptr<ISyncShutdownCallback> syncShutdownCallback = new SyncShutdownCallback();
111 sptr<ITakeOverShutdownCallback> takeOverShutdownCallback = new TakeOverShutdownCallback();
112 auto& shutdownClient = ShutdownClient::GetInstance();
113 shutdownClient.RegisterShutdownCallback(asyncShutdownCallback);
114 shutdownClient.UnRegisterShutdownCallback(asyncShutdownCallback);
115 shutdownClient.RegisterShutdownCallback(syncShutdownCallback);
116 shutdownClient.UnRegisterShutdownCallback(syncShutdownCallback);
117 shutdownClient.RegisterShutdownCallback(takeOverShutdownCallback);
118 shutdownClient.UnRegisterShutdownCallback(takeOverShutdownCallback);
119
120 auto& powerMgrClient = PowerMgrClient::GetInstance();
121 powerMgrClient.RebootDevice("UnRegisterShutdownCallback002");
122 EXPECT_FALSE(g_isOnAsyncShutdown);
123 EXPECT_FALSE(g_isOnSyncShutdown);
124 EXPECT_TRUE(g_isOnTakeOverShutdown);
125
126 powerMgrClient.ShutDownDevice("UnRegisterShutdownCallback002");
127 EXPECT_FALSE(g_isOnAsyncShutdown);
128 EXPECT_FALSE(g_isOnSyncShutdown);
129 EXPECT_TRUE(g_isOnTakeOverShutdown);
130 POWER_HILOGD(LABEL_TEST, "UnRegisterShutdownCallback002 end");
131 }
132
133 /**
134 * @tc.name: AsyncShutdownCallbackStub
135 * @tc.desc: Test AsyncShutdownCallbackStub
136 * @tc.type: FUNC
137 * @tc.require: issueI7MNRN
138 */
139 HWTEST_F(ShutdownClientTest, AsyncShutdownCallbackStub003, TestSize.Level0)
140 {
141 POWER_HILOGD(LABEL_TEST, "AsyncShutdownCallbackStub003 start");
142 uint32_t code = 0;
143 MessageParcel data;
144 AsyncShutdownCallback asyncShutdownCallback;
145 asyncShutdownCallback.AsyncShutdownCallbackStub::OnAsyncShutdown();
146 EXPECT_FALSE(g_isOnAsyncShutdown);
147 data.WriteInterfaceToken(AsyncShutdownCallback::GetDescriptor());
148 int32_t ret = asyncShutdownCallback.OnRemoteRequest(code, data, g_reply, g_option);
149 EXPECT_EQ(ret, ERR_OK);
150 POWER_HILOGD(LABEL_TEST, "AsyncShutdownCallbackStub003 end");
151 }
152
153 /**
154 * @tc.name: SyncShutdownCallbackStub
155 * @tc.desc: Test SyncShutdownCallbackStub
156 * @tc.type: FUNC
157 * @tc.require: issueI7MNRN
158 */
159 HWTEST_F(ShutdownClientTest, SyncShutdownCallbackStub004, TestSize.Level0)
160 {
161 POWER_HILOGD(LABEL_TEST, "SyncShutdownCallbackStub004 start");
162 uint32_t code = 0;
163 MessageParcel data;
164 SyncShutdownCallback syncShutdownCallback;
165 syncShutdownCallback.SyncShutdownCallbackStub::OnSyncShutdown();
166 EXPECT_FALSE(g_isOnSyncShutdown);
167 data.WriteInterfaceToken(SyncShutdownCallback::GetDescriptor());
168 int32_t ret = syncShutdownCallback.OnRemoteRequest(code, data, g_reply, g_option);
169 EXPECT_EQ(ret, ERR_OK);
170 POWER_HILOGD(LABEL_TEST, "SyncShutdownCallbackStub004 end");
171 }
172
173 /**
174 * @tc.name: TakeOverShutdownCallbackStub
175 * @tc.desc: Test TakeOverShutdownCallbackStub
176 * @tc.type: FUNC
177 * @tc.require: issueI7MNRN
178 */
179 HWTEST_F(ShutdownClientTest, TakeOverShutdownCallbackStub005, TestSize.Level0)
180 {
181 POWER_HILOGD(LABEL_TEST, "TakeOverShutdownCallbackStub005 start");
182 uint32_t code = 0;
183 MessageParcel data;
184 TakeOverShutdownCallback takeOverShutdownCallback;
185 data.WriteInterfaceToken(TakeOverShutdownCallback::GetDescriptor());
186 int32_t ret = takeOverShutdownCallback.OnRemoteRequest(code, data, g_reply, g_option);
187 EXPECT_EQ(ret, E_READ_PARCEL_ERROR);
188 bool retVal = takeOverShutdownCallback.TakeOverShutdownCallbackStub::OnTakeOverShutdown(false);
189 EXPECT_EQ(retVal, false);
190 POWER_HILOGD(LABEL_TEST, "TakeOverShutdownCallbackStub005 end");
191 }
192 } // namespace UnitTest
193 } // namespace PowerMgr
194 } // namespace OHOS
195