• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "hiperf_client_test.h"
17 
18 #include <algorithm>
19 #include <chrono>
20 #include <cinttypes>
21 #include <thread>
22 
23 #include "utilities.h"
24 
25 using namespace testing::ext;
26 using namespace std;
27 using namespace OHOS::HiviewDFX;
28 namespace OHOS {
29 namespace Developtools {
30 namespace HiPerf {
31 class HiperfClientTest : public testing::Test {
32 public:
33     static void SetUpTestCase(void);
34     static void TearDownTestCase(void);
35     void SetUp();
36     void TearDown();
37 
38     static void TestCaseOption(const HiperfClient::RecordOption &opt);
39 };
40 
SetUpTestCase()41 void HiperfClientTest::SetUpTestCase() {}
42 
TearDownTestCase()43 void HiperfClientTest::TearDownTestCase()
44 {
45     DebugLogger::GetInstance()->Reset();
46 }
47 
SetUp()48 void HiperfClientTest::SetUp() {}
49 
TearDown()50 void HiperfClientTest::TearDown()
51 {
52 }
53 
54 /**
55  * @tc.name:
56  * @tc.desc: record
57  * @tc.type: FUNC
58  */
59 HWTEST_F(HiperfClientTest, NoPara, TestSize.Level1)
60 {
61     StdoutRecord stdoutRecord;
62     stdoutRecord.Start();
63 
64     HiperfClient::Client myHiperf;
65     myHiperf.SetDebugMode();
66     ASSERT_TRUE(myHiperf.Start());
67 
68     ASSERT_TRUE(myHiperf.Pause());
69     this_thread::sleep_for(1s);
70 
71     ASSERT_TRUE(myHiperf.Resume());
72     this_thread::sleep_for(1s);
73 
74     ASSERT_TRUE(myHiperf.Stop());
75 
76     stdoutRecord.Stop();
77 }
78 
79 HWTEST_F(HiperfClientTest, OutDir, TestSize.Level1)
80 {
81     StdoutRecord stdoutRecord;
82     stdoutRecord.Start();
83 
84     HiperfClient::Client myHiperf("/data/local/tmp/");
85     ASSERT_EQ(myHiperf.GetOutputDir(), "/data/local/tmp/");
86     myHiperf.SetDebugMode();
87     ASSERT_TRUE(myHiperf.Start());
88 
89     ASSERT_TRUE(myHiperf.Pause());
90     this_thread::sleep_for(1s);
91 
92     ASSERT_TRUE(myHiperf.Resume());
93     this_thread::sleep_for(1s);
94 
95     ASSERT_TRUE(myHiperf.Stop());
96 
97     stdoutRecord.Stop();
98 }
99 
100 HWTEST_F(HiperfClientTest, DebugMuchMode, TestSize.Level1)
101 {
102     StdoutRecord stdoutRecord;
103     stdoutRecord.Start();
104 
105     HiperfClient::Client myHiperf;
106     myHiperf.SetDebugMuchMode();
107     ASSERT_TRUE(myHiperf.Start());
108 
109     ASSERT_TRUE(myHiperf.Pause());
110     this_thread::sleep_for(1s);
111 
112     ASSERT_TRUE(myHiperf.Resume());
113     this_thread::sleep_for(1s);
114 
115     ASSERT_TRUE(myHiperf.Stop());
116 
117     stdoutRecord.Stop();
118 }
119 
120 HWTEST_F(HiperfClientTest, EnableHilog, TestSize.Level1)
121 {
122     StdoutRecord stdoutRecord;
123     stdoutRecord.Start();
124 
125     HiperfClient::Client myHiperf;
126     myHiperf.SetDebugMode();
127     myHiperf.EnableHilog();
128     ASSERT_TRUE(myHiperf.Start());
129 
130     ASSERT_TRUE(myHiperf.Pause());
131     this_thread::sleep_for(1s);
132 
133     ASSERT_TRUE(myHiperf.Resume());
134     this_thread::sleep_for(1s);
135 
136     ASSERT_TRUE(myHiperf.Stop());
137 
138     stdoutRecord.Stop();
139 }
140 
141 HWTEST_F(HiperfClientTest, GetCommandPath, TestSize.Level1)
142 {
143     StdoutRecord stdoutRecord;
144     stdoutRecord.Start();
145 
146     HiperfClient::Client myHiperf("/data/local/tmp/");
147     ASSERT_EQ(myHiperf.GetCommandPath().empty(), false);
148 
149     stdoutRecord.Stop();
150 }
151 
TestCaseOption(const HiperfClient::RecordOption & opt)152 void HiperfClientTest::TestCaseOption(const HiperfClient::RecordOption &opt)
153 {
154     StdoutRecord stdoutRecord;
155     stdoutRecord.Start();
156     HiperfClient::Client myHiperf;
157     myHiperf.SetDebugMode();
158 
159     ASSERT_TRUE(myHiperf.IsReady());
160     ASSERT_TRUE(myHiperf.Start(opt));
161 
162     bool retPause = true;
163     bool retResume = true;
164     bool retStop = true;
165     if (!myHiperf.Pause()) {
166         retPause = false;
167     }
168     this_thread::sleep_for(1s);
169 
170     if (!myHiperf.Resume()) {
171         retResume = false;
172     }
173     this_thread::sleep_for(1s);
174 
175     if (!myHiperf.Stop()) {
176         retStop = false;
177     }
178 
179     ASSERT_TRUE(retPause);
180     ASSERT_TRUE(retResume);
181     ASSERT_TRUE(retStop);
182 
183     stdoutRecord.Stop();
184 }
185 
186 HWTEST_F(HiperfClientTest, SetTargetSystemWide, TestSize.Level1)
187 {
188     HiperfClient::RecordOption opt;
189     opt.SetTargetSystemWide(true);
190 
191     TestCaseOption(opt);
192 }
193 
194 HWTEST_F(HiperfClientTest, SetCompressData, TestSize.Level1)
195 {
196     HiperfClient::RecordOption opt;
197     vector<pid_t> selectPids = {getpid()};
198     opt.SetSelectPids(selectPids);
199     opt.SetCompressData(true);
200     TestCaseOption(opt);
201 }
202 
203 HWTEST_F(HiperfClientTest, SetSelectCpus, TestSize.Level1)
204 {
205     HiperfClient::RecordOption opt;
206     vector<pid_t> selectPids = {getpid()};
207     opt.SetSelectPids(selectPids);
208     vector<int> cpus = {0, 1};
209     opt.SetSelectCpus(cpus);
210 
211     TestCaseOption(opt);
212 }
213 
214 HWTEST_F(HiperfClientTest, SetTimeStopSec, TestSize.Level1)
215 {
216     HiperfClient::RecordOption opt;
217     vector<pid_t> selectPids = {getpid()};
218     opt.SetSelectPids(selectPids);
219     opt.SetTimeStopSec(40);
220 
221     HiperfClient::Client myHiperf;
222     ASSERT_TRUE(myHiperf.IsReady());
223     ASSERT_TRUE(myHiperf.Start(opt));
224 }
225 
226 HWTEST_F(HiperfClientTest, SetFrequency, TestSize.Level1)
227 {
228     HiperfClient::RecordOption opt;
229     vector<pid_t> selectPids = {getpid()};
230     opt.SetSelectPids(selectPids);
231     opt.SetFrequency(500);
232 
233     TestCaseOption(opt);
234 }
235 
236 HWTEST_F(HiperfClientTest, SetPeriod, TestSize.Level1)
237 {
238     HiperfClient::RecordOption opt;
239     vector<pid_t> selectPids = {getpid()};
240     opt.SetSelectPids(selectPids);
241     opt.SetPeriod(3);
242 
243     TestCaseOption(opt);
244 }
245 
246 HWTEST_F(HiperfClientTest, SetSelectEvents, TestSize.Level1)
247 {
248     HiperfClient::RecordOption opt;
249     vector<pid_t> selectPids = {getpid()};
250     opt.SetSelectPids(selectPids);
251     vector<string> selectEvents = {"sw-cpu-clock:k"};
252     opt.SetSelectEvents(selectEvents);
253 
254     TestCaseOption(opt);
255 }
256 
257 HWTEST_F(HiperfClientTest, SetSelectGroups, TestSize.Level1)
258 {
259     HiperfClient::RecordOption opt;
260     vector<pid_t> selectPids = {getpid()};
261     opt.SetSelectPids(selectPids);
262     vector<string> selectEvents = {"hw-cpu-cycles:u"};
263     opt.SetSelectGroups(selectEvents);
264     TestCaseOption(opt);
265 }
266 
267 HWTEST_F(HiperfClientTest, SetNoInherit, TestSize.Level1)
268 {
269     HiperfClient::RecordOption opt;
270     vector<pid_t> selectPids = {getpid()};
271     opt.SetSelectPids(selectPids);
272     opt.SetNoInherit(true);
273 
274     TestCaseOption(opt);
275 }
276 
277 HWTEST_F(HiperfClientTest, SetSelectPids, TestSize.Level1)
278 {
279     HiperfClient::RecordOption opt;
280     vector<pid_t> selectPids = {getpid()};
281     opt.SetSelectPids(selectPids);
282 
283     TestCaseOption(opt);
284 }
285 
286 HWTEST_F(HiperfClientTest, SetCallStackSamplingConfigs, TestSize.Level1)
287 {
288     HiperfClient::RecordOption opt;
289     vector<pid_t> selectPids = {getpid()};
290     opt.SetSelectPids(selectPids);
291     opt.SetCallStackSamplingConfigs(1);
292 
293     HiperfClient::Client myHiperf;
294     ASSERT_TRUE(myHiperf.IsReady());
295     ASSERT_TRUE(myHiperf.Start(opt));
296 }
297 
298 HWTEST_F(HiperfClientTest, SetSelectTids, TestSize.Level1)
299 {
300     HiperfClient::RecordOption opt;
301     vector<pid_t> selectTids = {gettid()};
302     opt.SetSelectTids(selectTids);
303 
304     TestCaseOption(opt);
305 }
306 
307 HWTEST_F(HiperfClientTest, SetExcludePerf, TestSize.Level1)
308 {
309     HiperfClient::RecordOption opt;
310     opt.SetTargetSystemWide(true);
311     opt.SetExcludePerf(true);
312 
313     TestCaseOption(opt);
314 }
315 
316 HWTEST_F(HiperfClientTest, SetCpuPercent, TestSize.Level1)
317 {
318     HiperfClient::RecordOption opt;
319     vector<pid_t> selectPids = {getpid()};
320     opt.SetSelectPids(selectPids);
321     opt.SetCpuPercent(50);
322 
323     TestCaseOption(opt);
324 }
325 
326 HWTEST_F(HiperfClientTest, SetOffCPU, TestSize.Level1)
327 {
328     HiperfClient::RecordOption opt;
329     vector<pid_t> selectPids = {getpid()};
330     opt.SetSelectPids(selectPids);
331     opt.SetOffCPU(true);
332 
333     TestCaseOption(opt);
334 }
335 
336 HWTEST_F(HiperfClientTest, SetCallStack, TestSize.Level1)
337 {
338     HiperfClient::RecordOption opt;
339     vector<pid_t> selectPids = {getpid()};
340     opt.SetSelectPids(selectPids);
341     opt.SetCallGraph("fp");
342 
343     TestCaseOption(opt);
344 }
345 
346 HWTEST_F(HiperfClientTest, SetDelayUnwind, TestSize.Level1)
347 {
348     HiperfClient::RecordOption opt;
349     vector<pid_t> selectPids = {getpid()};
350     opt.SetSelectPids(selectPids);
351     opt.SetDelayUnwind(true);
352 
353     TestCaseOption(opt);
354 }
355 
356 HWTEST_F(HiperfClientTest, SetDisableUnwind, TestSize.Level1)
357 {
358     HiperfClient::RecordOption opt;
359     vector<pid_t> selectPids = {getpid()};
360     opt.SetSelectPids(selectPids);
361     opt.SetDisableUnwind(true);
362 
363     TestCaseOption(opt);
364 }
365 
366 HWTEST_F(HiperfClientTest, SetDisableCallstackMerge, TestSize.Level1)
367 {
368     HiperfClient::RecordOption opt;
369     vector<pid_t> selectPids = {getpid()};
370     opt.SetSelectPids(selectPids);
371     opt.SetDisableCallstackMerge(true);
372 
373     TestCaseOption(opt);
374 }
375 
376 HWTEST_F(HiperfClientTest, SetOutputFilename, TestSize.Level1)
377 {
378     HiperfClient::RecordOption opt;
379     vector<pid_t> selectPids = {getpid()};
380     opt.SetSelectPids(selectPids);
381     opt.SetOutputFilename("perf.data.ut");
382 
383     TestCaseOption(opt);
384 }
385 
386 HWTEST_F(HiperfClientTest, SetSymbolDir, TestSize.Level1)
387 {
388     HiperfClient::RecordOption opt;
389     vector<pid_t> selectPids = {getpid()};
390     opt.SetSelectPids(selectPids);
391     opt.SetSymbolDir("/data/local/tmp/");
392 
393     TestCaseOption(opt);
394 }
395 
396 HWTEST_F(HiperfClientTest, SetDataLimit, TestSize.Level1)
397 {
398     HiperfClient::RecordOption opt;
399     vector<pid_t> selectPids = {getpid()};
400     opt.SetSelectPids(selectPids);
401     opt.SetDataLimit("100M");
402 
403     TestCaseOption(opt);
404 }
405 
406 HWTEST_F(HiperfClientTest, SetAppPackage, TestSize.Level1)
407 {
408     HiperfClient::RecordOption opt;
409     opt.SetAppPackage("com.ohos.launcher");
410 
411     TestCaseOption(opt);
412 }
413 
414 HWTEST_F(HiperfClientTest, SetClockId, TestSize.Level1)
415 {
416     HiperfClient::RecordOption opt;
417     vector<pid_t> selectPids = {getpid()};
418     opt.SetSelectPids(selectPids);
419     opt.SetClockId("monotonic");
420 
421     TestCaseOption(opt);
422 }
423 
424 HWTEST_F(HiperfClientTest, SetMmapPages, TestSize.Level1)
425 {
426     HiperfClient::RecordOption opt;
427     vector<pid_t> selectPids = {getpid()};
428     opt.SetSelectPids(selectPids);
429     opt.SetMmapPages(64);
430 
431     TestCaseOption(opt);
432 }
433 
434 HWTEST_F(HiperfClientTest, SetVecBranchSampleTypes, TestSize.Level1)
435 {
436     StdoutRecord stdoutRecord;
437     stdoutRecord.Start();
438 
439     HiperfClient::RecordOption opt;
440     vector<pid_t> selectPids = {getpid()};
441     opt.SetSelectPids(selectPids);
442     std::vector<std::string> vecBranchSampleTypes = {"any", "any_call", "any_ret", "ind_call", "u", "k"};
443     opt.SetVecBranchSampleTypes(vecBranchSampleTypes);
444     HiperfClient::Client myHiperf;
445     myHiperf.SetDebugMode();
446 
447     ASSERT_TRUE(myHiperf.IsReady());
448 #ifdef is_ohos
449     ASSERT_EQ(myHiperf.Start(opt), false);
450 #else
451     ASSERT_TRUE(myHiperf.Start(opt));
452     ASSERT_TRUE(myHiperf.Pause());
453     this_thread::sleep_for(1s);
454 
455     ASSERT_TRUE(myHiperf.Resume());
456     this_thread::sleep_for(1s);
457 
458     ASSERT_TRUE(myHiperf.Stop());
459 #endif
460     stdoutRecord.Stop();
461 }
462 } // namespace HiPerf
463 } // namespace Developtools
464 } // namespace OHOS
465