1 /*
2  * Copyright (c) 2022-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 "thermal_mock_stub_test.h"
17 
18 #include <vector>
19 
20 #ifdef THERMAL_GTEST
21 #define private   public
22 #define protected public
23 #endif
24 
25 #include "thermal_action_callback_stub.h"
26 #include "thermal_level_callback_stub.h"
27 #include "thermal_log.h"
28 #include "thermal_mgr_errors.h"
29 #include "thermal_service.h"
30 #include "thermal_srv_ipc_interface_code.h"
31 #include "thermal_srv_proxy.h"
32 #include "thermal_srv_stub.h"
33 #include "thermal_temp_callback_stub.h"
34 
35 using namespace testing::ext;
36 using namespace OHOS::PowerMgr;
37 using namespace OHOS;
38 using namespace std;
39 
40 namespace {
41 MessageParcel g_data;
42 MessageParcel g_reply;
43 MessageOption g_option;
44 sptr<ThermalService> g_service = nullptr;
45 } // namespace
46 
SetUpTestCase()47 void ThermalMockStubTest::SetUpTestCase()
48 {
49     g_service = ThermalService::GetInstance();
50     g_service->InitSystemTestModules();
51     g_service->OnStart();
52 }
53 
54 namespace {
55 /**
56  * @tc.name: ThermalMockStubTest001
57  * @tc.desc: proxy test
58  * @tc.type: FUNC
59  * @tc.require: issueI5YZQ2
60  */
61 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest001, TestSize.Level0)
62 {
63     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest001 start.");
64     uint32_t code = 0;
65     MessageParcel data;
66     MessageParcel reply;
67     MessageOption option;
68     sptr<ThermalActionCallbackStub> actionStub = new ThermalActionCallbackStub();
69     ASSERT_FALSE(actionStub == nullptr);
70     EXPECT_EQ(E_GET_THERMAL_SERVICE_FAILED, actionStub->OnRemoteRequest(code, data, reply, option));
71     sptr<ThermalLevelCallbackStub> levelStub = new ThermalLevelCallbackStub();
72     ASSERT_FALSE(levelStub == nullptr);
73     EXPECT_EQ(E_GET_THERMAL_SERVICE_FAILED, levelStub->OnRemoteRequest(code, data, reply, option));
74     sptr<ThermalTempCallbackStub> tempStub = new ThermalTempCallbackStub();
75     ASSERT_FALSE(tempStub == nullptr);
76     EXPECT_EQ(E_GET_THERMAL_SERVICE_FAILED, tempStub->OnRemoteRequest(code, data, reply, option));
77     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest001 end.");
78 }
79 
80 /**
81  * @tc.name: ThermalMockStubTest002
82  * @tc.desc: OnRemoteRequest all
83  * @tc.type: FUNC
84  * @tc.require: issueI6KRS8
85  */
86 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest002, TestSize.Level0)
87 {
88     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest002 start.");
89     uint32_t begin = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::REG_THERMAL_TEMP_CALLBACK);
90     uint32_t end = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::SHELL_DUMP);
91     for (uint32_t code = begin; code <= end; ++code) {
92         g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
93         auto ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
94         EXPECT_TRUE(ret == E_READ_PARCEL_ERROR_THERMAL || ret == E_GET_SYSTEM_ABILITY_MANAGER_FAILED_THERMAL ||
95             ret == 0);
96     }
97     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest002 end.");
98 }
99 
100 /**
101  * @tc.name: ThermalMockStubTest003
102  * @tc.desc: OnRemoteRequest ReadInterfaceToken
103  * @tc.type: FUNC
104  */
105 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest003, TestSize.Level0)
106 {
107     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest003 start.");
108     uint32_t code = 0;
109     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
110     EXPECT_EQ(ret, E_GET_THERMAL_SERVICE_FAILED) << "code: " << code << " ret:" << ret;
111     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest003 end.");
112 }
113 
114 /**
115  * @tc.name: ThermalMockStubTest004
116  * @tc.desc: OnRemoteRequest Invalid code
117  * @tc.type: FUNC
118  */
119 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest004, TestSize.Level0)
120 {
121     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest004 start.");
122     uint32_t code = 9999;
123     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
124     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
125     EXPECT_EQ(ret, IPC_STUB_UNKNOW_TRANS_ERR) << "code: " << code << " ret:" << ret;
126     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest004 end.");
127 }
128 
129 /**
130  * @tc.name: ThermalMockStubTest005
131  * @tc.desc: SubscribeThermalTempCallbackStub
132  * @tc.type: FUNC
133  */
134 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest005, TestSize.Level0)
135 {
136     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest005 start.");
137 
138     sptr<ThermalTempCallbackStub> tempStub = new ThermalTempCallbackStub();
139     std::vector<std::string> typeList;
140     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
141     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, tempStub->AsObject());
142     THERMAL_WRITE_PARCEL_NO_RET(g_data, StringVector, typeList);
143     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::REG_THERMAL_TEMP_CALLBACK);
144     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
145     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
146 
147     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
148     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, tempStub->AsObject());
149     code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::UNREG_THERMAL_TEMP_CALLBACK);
150     ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
151     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
152     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest005 end.");
153 }
154 
155 /**
156  * @tc.name: ThermalMockStubTest006
157  * @tc.desc: SubscribeThermalLevelCallbackStub
158  * @tc.type: FUNC
159  */
160 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest006, TestSize.Level0)
161 {
162     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest006 start.");
163 
164     MessageParcel data;
165     sptr<ThermalLevelCallbackStub> levelStub = new ThermalLevelCallbackStub();
166     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
167     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, levelStub->AsObject());
168     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::REG_THERMAL_LEVEL_CALLBACK);
169     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
170     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
171 
172     code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::UNREG_THERMAL_LEVEL_CALLBACK);
173     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
174     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, levelStub->AsObject());
175     ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
176     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
177 
178     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest006 end.");
179 }
180 
181 /**
182  * @tc.name: ThermalMockStubTest007
183  * @tc.desc: SubscribeThermalActionCallbackStub
184  * @tc.type: FUNC
185  */
186 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest007, TestSize.Level0)
187 {
188     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest007 start.");
189 
190     sptr<ThermalActionCallbackStub> actionStub = new ThermalActionCallbackStub();
191     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
192     std::vector<std::string> actionList;
193     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, actionStub->AsObject());
194     THERMAL_WRITE_PARCEL_NO_RET(g_data, StringVector, actionList);
195     THERMAL_WRITE_PARCEL_NO_RET(g_data, String, "ThermalMockStubTest007");
196     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::REG_THERMAL_ACTION_CALLBACK);
197     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
198     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
199 
200     code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::UNREG_THERMAL_ACTION_CALLBACK);
201     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
202     THERMAL_WRITE_PARCEL_NO_RET(g_data, RemoteObject, actionStub->AsObject());
203     ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
204     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
205 
206     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest007 end.");
207 }
208 
209 /**
210  * @tc.name: ThermalMockStubTest008
211  * @tc.desc: GetThermalSrvSensorInfo
212  * @tc.type: FUNC
213  */
214 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest008, TestSize.Level0)
215 {
216     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest008 start.");
217 
218     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
219     THERMAL_WRITE_PARCEL_NO_RET(g_data, Uint32, static_cast<uint32_t>(SensorType::BATTERY));
220     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::GET_SENSOR_INFO);
221     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
222     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
223 
224     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest008 end.");
225 }
226 
227 /**
228  * @tc.name: ThermalMockStubTest009
229  * @tc.desc: SetSceneStub
230  * @tc.type: FUNC
231  */
232 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest009, TestSize.Level0)
233 {
234     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest009 start.");
235 
236     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
237     THERMAL_WRITE_PARCEL_NO_RET(g_data, String, "test");
238     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::SET_SCENE);
239     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
240     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
241 
242     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest009 end.");
243 }
244 
245 /**
246  * @tc.name: ThermalMockStubTest010
247  * @tc.desc: ShellDumpStub
248  * @tc.type: FUNC
249  */
250 HWTEST_F(ThermalMockStubTest, ThermalMockStubTest010, TestSize.Level0)
251 {
252     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest010 start.");
253 
254     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
255     const int32_t PARAM_MAX_NUM = 100;
256     g_data.WriteUint32(PARAM_MAX_NUM);
257     uint32_t code = static_cast<uint32_t>(PowerMgr::ThermalMgrInterfaceCode::SHELL_DUMP);
258     int32_t ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
259     EXPECT_EQ(ret, E_EXCEED_PARAM_LIMIT) << " ret:" << ret;
260 
261     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
262     g_data.WriteUint32(1);
263     g_data.WriteString("");
264     ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
265     EXPECT_EQ(ret, E_READ_PARCEL_ERROR_THERMAL) << " ret:" << ret;
266 
267     g_data.WriteInterfaceToken(ThermalSrvProxy::GetDescriptor());
268     g_data.WriteUint32(1);
269     g_data.WriteString("123");
270     ret = g_service->OnRemoteRequest(code, g_data, g_reply, g_option);
271     EXPECT_EQ(ret, ERR_OK) << " ret:" << ret;
272 
273     THERMAL_HILOGD(LABEL_TEST, "ThermalMockStubTest010 end.");
274 }
275 } // namespace
276