1 /*
2  * Copyright (c) 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 #define private public
17 #define protected public
18 #undef private
19 #undef protected
20 
21 #include <gtest/gtest.h>
22 #include <gtest/hwext/gtest-multithread.h>
23 #include "socperf_client.h"
24 #include "socperf.h"
25 #include "iservice_registry.h"
26 #include "system_ability_definition.h"
27 
28 using namespace testing::ext;
29 using namespace testing::mt;
30 
31 namespace OHOS {
32 namespace SOCPERF {
33 class SocPerfSubTest : public testing::Test {
34 public:
35     static void SetUpTestCase(void);
36     static void TearDownTestCase(void);
37     void SetUp();
38     void TearDown();
39 };
40 
SetUpTestCase(void)41 void SocPerfSubTest::SetUpTestCase(void)
42 {
43 }
44 
TearDownTestCase(void)45 void SocPerfSubTest::TearDownTestCase(void)
46 {
47 }
48 
SetUp(void)49 void SocPerfSubTest::SetUp(void)
50 {
51 }
52 
TearDown(void)53 void SocPerfSubTest::TearDown(void)
54 {
55 }
56 
57 /*
58  * @tc.name: SocPerfSubTest_ActionType_001
59  * @tc.desc: action type perf
60  * @tc.type FUNC
61  * @tc.require: issueI78T3V
62  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_001, Function | MediumTest | Level0)63 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_001, Function | MediumTest | Level0)
64 {
65     EXPECT_EQ(OHOS::SOCPERF::ActionType::ACTION_TYPE_PERF, 0);
66 }
67 
68 /*
69  * @tc.name: SocPerfSubTest_ActionType_002
70  * @tc.desc: action type power
71  * @tc.type FUNC
72  * @tc.require: issueI78T3V
73  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_002, Function | MediumTest | Level0)74 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_002, Function | MediumTest | Level0)
75 {
76     EXPECT_EQ(OHOS::SOCPERF::ActionType::ACTION_TYPE_POWER, 1);
77 }
78 
79 /*
80  * @tc.name: SocPerfSubTest_ActionType_003
81  * @tc.desc: action type THERMAL
82  * @tc.type FUNC
83  * @tc.require: issueI78T3V
84  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_003, Function | MediumTest | Level0)85 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_003, Function | MediumTest | Level0)
86 {
87     EXPECT_EQ(OHOS::SOCPERF::ActionType::ACTION_TYPE_THERMAL, 2);
88 }
89 
90 /*
91  * @tc.name: SocPerfSubTest_ActionType_004
92  * @tc.desc: action type max
93  * @tc.type FUNC
94  * @tc.require: issueI78T3V
95  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_004, Function | MediumTest | Level0)96 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ActionType_004, Function | MediumTest | Level0)
97 {
98     EXPECT_EQ(OHOS::SOCPERF::ActionType::ACTION_TYPE_MAX, 4);
99 }
100 
101 /*
102  * @tc.name: SocPerfSubTest_EventType_001
103  * @tc.desc: event type off
104  * @tc.type FUNC
105  * @tc.require: issueI78T3V
106  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_001, Function | MediumTest | Level0)107 HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_001, Function | MediumTest | Level0)
108 {
109     EXPECT_EQ(OHOS::SOCPERF::EventType::EVENT_OFF, 0);
110 }
111 
112 /*
113  * @tc.name: SocPerfSubTest_EventType_002
114  * @tc.desc: event type on
115  * @tc.type FUNC
116  * @tc.require: issueI78T3V
117  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_002, Function | MediumTest | Level0)118 HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_002, Function | MediumTest | Level0)
119 {
120     EXPECT_EQ(OHOS::SOCPERF::EventType::EVENT_ON, 1);
121 }
122 
123 /*
124  * @tc.name: SocPerfSubTest_EventType_003
125  * @tc.desc: event type invalid
126  * @tc.type FUNC
127  * @tc.require: issueI78T3V
128  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_003, Function | MediumTest | Level0)129 HWTEST_F(SocPerfSubTest, SocPerfSubTest_EventType_003, Function | MediumTest | Level0)
130 {
131     EXPECT_EQ(OHOS::SOCPERF::EventType::EVENT_INVALID, -1);
132 }
133 
134 /*
135  * @tc.name: SocPerfSubTest_InnerEventId_001
136  * @tc.desc: init res node info
137  * @tc.type FUNC
138  * @tc.require: issueI78T3V
139  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_001, Function | MediumTest | Level0)140 HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_001, Function | MediumTest | Level0)
141 {
142     EXPECT_EQ(INNER_EVENT_ID_INIT_RESOURCE_NODE_INFO, 0);
143 }
144 
145 /*
146  * @tc.name: SocPerfSubTest_InnerEventId_002
147  * @tc.desc: do freq action
148  * @tc.type FUNC
149  * @tc.require: issueI78T3V
150  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_003, Function | MediumTest | Level0)151 HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_003, Function | MediumTest | Level0)
152 {
153     EXPECT_EQ(INNER_EVENT_ID_DO_FREQ_ACTION, 1);
154 }
155 
156 /*
157  * @tc.name: SocPerfSubTest_InnerEventId_003
158  * @tc.desc: do freq action delayed
159  * @tc.type FUNC
160  * @tc.require: issueI78T3V
161  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_004, Function | MediumTest | Level0)162 HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_004, Function | MediumTest | Level0)
163 {
164     EXPECT_EQ(INNER_EVENT_ID_DO_FREQ_ACTION_DELAYED, 3);
165 }
166 
167 /*
168  * @tc.name: SocPerfSubTest_InnerEventId_004
169  * @tc.desc: power limit boost freq
170  * @tc.type FUNC
171  * @tc.require: issueI78T3V
172  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_005, Function | MediumTest | Level0)173 HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_005, Function | MediumTest | Level0)
174 {
175     EXPECT_EQ(INNER_EVENT_ID_POWER_LIMIT_BOOST_FREQ, 4);
176 }
177 
178 /*
179  * @tc.name: SocPerfSubTest_InnerEventId_005
180  * @tc.desc: thermal limit boost freq
181  * @tc.type FUNC
182  * @tc.require: issueI78T3V
183  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_006, Function | MediumTest | Level0)184 HWTEST_F(SocPerfSubTest, SocPerfSubTest_InnerEventId_006, Function | MediumTest | Level0)
185 {
186     EXPECT_EQ(INNER_EVENT_ID_THERMAL_LIMIT_BOOST_FREQ, 5);
187 }
188 
189 /*
190  * @tc.name: SocPerfSubTest_GetService_001
191  * @tc.desc: get socperf service
192  * @tc.type FUNC
193  * @tc.require: issueI78T3V
194  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_001, Function | MediumTest | Level0)195 HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_001, Function | MediumTest | Level0)
196 {
197     sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
198     EXPECT_NE(samgr, nullptr);
199 
200     sptr<IRemoteObject> object = samgr->GetSystemAbility(SOC_PERF_SERVICE_SA_ID);
201     EXPECT_NE(object, nullptr);
202 }
203 
204 /*
205  * @tc.name: SocPerfSubTest_GetService_002
206  * @tc.desc: get socperf service
207  * @tc.type FUNC
208  * @tc.require: issueI78T3V
209  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_002, Function | MediumTest | Level0)210 HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_002, Function | MediumTest | Level0)
211 {
212     sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
213     EXPECT_NE(samgr, nullptr);
214 }
215 
SocPerfSubTestGetServiceTask()216 static void SocPerfSubTestGetServiceTask()
217 {
218     sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
219     EXPECT_NE(samgr, nullptr);
220 
221     sptr<IRemoteObject> object = samgr->GetSystemAbility(SOC_PERF_SERVICE_SA_ID);
222     EXPECT_NE(object, nullptr);
223 }
224 
225 /*
226  * @tc.name: SocPerfSubTest_GetService_003
227  * @tc.desc: Test get socperf service in multithreading
228  * @tc.type FUNC
229  * @tc.require: issueI7G8VT
230  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_003, Function | MediumTest | Level0)231 HWTEST_F(SocPerfSubTest, SocPerfSubTest_GetService_003, Function | MediumTest | Level0)
232 {
233     SET_THREAD_NUM(10);
234     GTEST_RUN_TASK(SocPerfSubTestGetServiceTask);
235 }
236 
237 /*
238  * @tc.name: SocPerfSubTest_PerfRequest_001
239  * @tc.desc: PerfRequest
240  * @tc.type FUNC
241  * @tc.require: issueI78T3V
242  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_001, Function | MediumTest | Level0)243 HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_001, Function | MediumTest | Level0)
244 {
245     std::string msg = "";
246     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(10000, msg);
247     EXPECT_EQ(msg, "");
248 }
249 
250 /*
251  * @tc.name: SocPerfSubTest_PerfRequest_002
252  * @tc.desc: PerfRequestEx ON
253  * @tc.type FUNC
254  * @tc.require: issueI78T3V
255  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_002, Function | MediumTest | Level0)256 HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_002, Function | MediumTest | Level0)
257 {
258     std::string msg = "";
259     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, true, msg);
260     EXPECT_EQ(msg, "");
261 }
262 
263 /*
264  * @tc.name: SocPerfSubTest_PerfRequest_003
265  * @tc.desc: PerfRequestEx OFF
266  * @tc.type FUNC
267  * @tc.require: issueI78T3V
268  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_003, Function | MediumTest | Level0)269 HWTEST_F(SocPerfSubTest, SocPerfSubTest_PerfRequest_003, Function | MediumTest | Level0)
270 {
271     std::string msg = "";
272     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, false, msg);
273     EXPECT_EQ(msg, "");
274 }
275 
276 /*
277  * @tc.name: SocPerfSubTest_PowerLimitBoost_001
278  * @tc.desc: PowerLimitBoost ON
279  * @tc.type FUNC
280  * @tc.require: issueI78T3V
281  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_PowerLimitBoost_001, Function | MediumTest | Level0)282 HWTEST_F(SocPerfSubTest, SocPerfSubTest_PowerLimitBoost_001, Function | MediumTest | Level0)
283 {
284     std::string msg = "";
285     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(true, msg);
286     EXPECT_EQ(msg, "");
287 }
288 
289 /*
290  * @tc.name: SocPerfSubTest_PowerLimitBoost_001
291  * @tc.desc: PowerLimitBoost OFF
292  * @tc.type FUNC
293  * @tc.require: issueI78T3V
294  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_PowerLimitBoost_002, Function | MediumTest | Level0)295 HWTEST_F(SocPerfSubTest, SocPerfSubTest_PowerLimitBoost_002, Function | MediumTest | Level0)
296 {
297     std::string msg = "";
298     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(false, msg);
299     EXPECT_EQ(msg, "");
300 }
301 
302 /*
303  * @tc.name: SocPerfSubTest_ThermalLimitBoost_001
304  * @tc.desc: ThermalLimitBoost ON
305  * @tc.type FUNC
306  * @tc.require: issueI78T3V
307  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ThermalLimitBoost_001, Function | MediumTest | Level0)308 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ThermalLimitBoost_001, Function | MediumTest | Level0)
309 {
310     std::string msg = "";
311     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(true, msg);
312     EXPECT_EQ(msg, "");
313 }
314 
315 /*
316  * @tc.name: SocPerfSubTest_ThermalLimitBoost_002
317  * @tc.desc: ThermalLimitBoost OFF
318  * @tc.type FUNC
319  * @tc.require: issueI78T3V
320  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ThermalLimitBoost_002, Function | MediumTest | Level0)321 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ThermalLimitBoost_002, Function | MediumTest | Level0)
322 {
323     std::string msg = "";
324     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(false, msg);
325     EXPECT_EQ(msg, "");
326 }
327 
328 /*
329  * @tc.name: SocPerfSubTest_RequestCmdIdCount_001
330  * @tc.desc: RequestCmdIdCount
331  * @tc.type FUNC
332  * @tc.require: issueI9H4NS
333  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_RequestCmdIdCount_001, Function | MediumTest | Level0)334 HWTEST_F(SocPerfSubTest, SocPerfSubTest_RequestCmdIdCount_001, Function | MediumTest | Level0)
335 {
336     std::string msg = "";
337     OHOS::SOCPERF::SocPerfClient::GetInstance().RequestCmdIdCount("");
338     EXPECT_EQ(msg, "");
339 }
340 
341 /*
342  * @tc.name: SocPerfSubTest_LimitRequest_001
343  * @tc.desc: LimitRequest thermal
344  * @tc.type FUNC
345  * @tc.require: issueI78T3V
346  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_001, Function | MediumTest | Level0)347 HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_001, Function | MediumTest | Level0)
348 {
349     int32_t clientId_power = ACTION_TYPE_POWER;
350     std::vector<int32_t> tags;
351     tags.push_back(1001);
352     std::vector<int64_t> configs;
353     EXPECT_NE(tags.size(), configs.size());
354     configs.push_back(1608000);
355     EXPECT_EQ(tags.size(), configs.size());
356     OHOS::SOCPERF::SocPerfClient::GetInstance().LimitRequest(clientId_power, tags, configs, "");
357 }
358 
359 /*
360  * @tc.name: SocPerfSubTest_LimitRequest_002
361  * @tc.desc: LimitRequest thermal
362  * @tc.type FUNC
363  * @tc.require: issueI78T3V
364  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_002, Function | MediumTest | Level0)365 HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_002, Function | MediumTest | Level0)
366 {
367     int32_t clientId_thermal = ACTION_TYPE_THERMAL;
368     std::vector<int32_t> tags;
369     tags.push_back(1000);
370     tags.push_back(1001);
371     std::vector<int64_t> configs;
372     EXPECT_NE(tags.size(), configs.size());
373     configs.push_back(1800000);
374     configs.push_back(1992000);
375     EXPECT_EQ(tags.size(), configs.size());
376     OHOS::SOCPERF::SocPerfClient::GetInstance().LimitRequest(clientId_thermal, tags, configs, "");
377 }
378 
SocPerfSubTestLimitRequestTask()379 static void SocPerfSubTestLimitRequestTask()
380 {
381     int32_t clientId_power = ACTION_TYPE_POWER;
382     std::vector<int32_t> tags;
383     constexpr int resId = 1001;
384     tags.push_back(resId);
385     std::vector<int64_t> configs;
386     EXPECT_NE(tags.size(), configs.size());
387     constexpr int freqValue = 1416000;
388     configs.push_back(freqValue);
389     EXPECT_EQ(tags.size(), configs.size());
390     OHOS::SOCPERF::SocPerfClient::GetInstance().LimitRequest(clientId_power, tags, configs, "");
391     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(true, "");
392     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(false, "");
393 }
394 
395 /*
396  * @tc.name: SocPerfSubTest_LimitRequest_003
397  * @tc.desc: Test LimitRequest thermal in multithreading
398  * @tc.type FUNC
399  * @tc.require: issueI7G8VT
400  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_003, Function | MediumTest | Level0)401 HWTEST_F(SocPerfSubTest, SocPerfSubTest_LimitRequest_003, Function | MediumTest | Level0)
402 {
403     SET_THREAD_NUM(10);
404     GTEST_RUN_TASK(SocPerfSubTestLimitRequestTask);
405 }
406 
407 /*
408  * @tc.name: SocPerfSubTest_ResetClient_001
409  * @tc.desc: ResetClient
410  * @tc.type FUNC
411  * @tc.require: issueI78T3V
412  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_ResetClient_001, Function | MediumTest | Level0)413 HWTEST_F(SocPerfSubTest, SocPerfSubTest_ResetClient_001, Function | MediumTest | Level0)
414 {
415     std::string msg = "";
416     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(10000, msg);
417     EXPECT_EQ(msg, "");
418     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, true, msg);
419     EXPECT_EQ(msg, "");
420     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, false, msg);
421     EXPECT_EQ(msg, "");
422     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(true, msg);
423     EXPECT_EQ(msg, "");
424     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(false, msg);
425     EXPECT_EQ(msg, "");
426     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(true, msg);
427     EXPECT_EQ(msg, "");
428     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(false, msg);
429     EXPECT_EQ(msg, "");
430     OHOS::SOCPERF::SocPerfClient::GetInstance().SetRequestStatus(false, msg);
431     EXPECT_EQ(msg, "");
432     OHOS::SOCPERF::SocPerfClient::GetInstance().SetRequestStatus(true, msg);
433     EXPECT_EQ(msg, "");
434     OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode("test", true);
435     EXPECT_EQ(msg, "");
436     OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode("test", false);
437     EXPECT_EQ(msg, "");
438     OHOS::SOCPERF::SocPerfClient::GetInstance().ResetClient();
439 }
440 
441 /*
442  * @tc.name: SocPerfSubTest_SetThermalLvl_001
443  * @tc.desc: perf request lvl client API
444  * @tc.type FUNC
445  * @tc.require: issue#I95U8S
446  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_SetThermalLevel_001, Function | MediumTest | Level0)447 HWTEST_F(SocPerfSubTest, SocPerfSubTest_SetThermalLevel_001, Function | MediumTest | Level0)
448 {
449     int level = 3;
450     OHOS::SOCPERF::SocPerfClient::GetInstance().SetThermalLevel(level);
451     EXPECT_EQ(level, 3);
452 }
453 
SocPerfSubTestMultithreadingTask()454 static void SocPerfSubTestMultithreadingTask()
455 {
456     std::string msg = "";
457     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(10000, msg);
458     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, true, msg);
459     OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(10000, false, msg);
460     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(true, msg);
461     OHOS::SOCPERF::SocPerfClient::GetInstance().PowerLimitBoost(false, msg);
462     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(true, msg);
463     OHOS::SOCPERF::SocPerfClient::GetInstance().ThermalLimitBoost(false, msg);
464     EXPECT_EQ(msg, "");
465 }
466 
467 /*
468  * @tc.name: SocPerfSubTest_Multithreading_001
469  * @tc.desc: Test the service above in multithreading
470  * @tc.type FUNC
471  * @tc.require: issueI7G8VT
472  */
HWTEST_F(SocPerfSubTest, SocPerfSubTest_Multithreading_001, Function | MediumTest | Level0)473 HWTEST_F(SocPerfSubTest, SocPerfSubTest_Multithreading_001, Function | MediumTest | Level0)
474 {
475     SET_THREAD_NUM(10);
476     GTEST_RUN_TASK(SocPerfSubTestMultithreadingTask);
477 }
478 } // namespace SOCPERF
479 } // namespace OHOS
480