• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <ctime>
17 #include <gtest/gtest.h>
18 #include <iostream>
19 #include <string>
20 #include <unistd.h>
21 #include <vector>
22 
23 #include "common_define.h"
24 #include "common_utils.h"
25 #include "hitrace_event_listener.h"
26 #include "hisysevent_manager.h"
27 
28 using namespace OHOS::HiviewDFX;
29 using namespace testing::ext;
30 using namespace std;
31 
32 namespace OHOS {
33 namespace HiviewDFX {
34 static std::string g_traceRootPath;
35 const int TRACING_ON_CLOSED = 2003;
36 
37 class HitraceEventTest : public testing::Test {
38 public:
39     static void SetUpTestCase(void);
TearDownTestCase(void)40     static void TearDownTestCase(void) {}
SetUp()41     void SetUp() {}
TearDown()42     void TearDown() {}
43 };
44 
SetUpTestCase()45 void HitraceEventTest::SetUpTestCase()
46 {
47     if (access((DEBUGFS_TRACING_DIR + TRACE_MARKER_NODE).c_str(), F_OK) != -1) {
48         g_traceRootPath = DEBUGFS_TRACING_DIR;
49     } else if (access((TRACEFS_DIR + TRACE_MARKER_NODE).c_str(), F_OK) != -1) {
50         g_traceRootPath = TRACEFS_DIR;
51     } else {
52         GTEST_LOG_(INFO) << "Error: Finding trace folder failed";
53     }
54 }
55 
RunCmd(const string & cmdstr)56 bool RunCmd(const string& cmdstr)
57 {
58     if (cmdstr.empty()) {
59         return false;
60     }
61     FILE *fp = popen(cmdstr.c_str(), "r");
62     if (fp == nullptr) {
63         return false;
64     }
65     char res[4096] = { '\0' };
66     while (fgets(res, sizeof(res), fp) != nullptr) {
67         std::cout << res;
68     }
69     pclose(fp);
70     return true;
71 }
72 
73 /**
74  * @tc.name: HitraceEventTest001
75  * @tc.desc: test Report DumpTextTrace HitraceEvent in HandleRecordingLongFinish with tracing_on opened
76  * @tc.type: FUNC
77  */
78 HWTEST_F(HitraceEventTest, HitraceEventTest001, TestSize.Level2)
79 {
80     ASSERT_TRUE(RunCmd("hitrace --stop_bgsrv >> /data/local/tmp/test.txt"));
81     TraceSysEventParams traceEventParams;
82     traceEventParams.caller = "CMD";
83     traceEventParams.opt = "DumpTextTrace";
84     traceEventParams.errorCode = TRACING_ON_CLOSED;
85     traceEventParams.errorMessage = "Warning: tracing on is closed, no trace can be read.";
86     std::shared_ptr<HitraceEventListener> traceListener = std::make_shared<HitraceEventListener>();
87     ListenerRule tagRule("PROFILER", "HITRACE_USAGE", RuleType::WHOLE_WORD);
88     std::vector<ListenerRule> sysRules;
89     sysRules.push_back(tagRule);
90     HiSysEventManager::AddListener(traceListener, sysRules);
91     traceListener->SetEvent(traceEventParams);
92     ASSERT_TRUE(RunCmd("hitrace --trace_finish -o /data/local/tmp/test.ftrace"));
93     ASSERT_TRUE(traceListener->CheckKeywordInReasons());
94     HiSysEventManager::RemoveListener(traceListener);
95     ASSERT_TRUE(RunCmd("hitrace --start_bgsrv >> /data/local/tmp/test.txt"));
96 }
97 
98 /**
99  * @tc.name: HitraceEventTest002
100  * @tc.desc: test Report DumpTextTrace HitraceEvent in HandleRecordingLongFinish  with tracing_on opened
101  * @tc.type: FUNC
102  */
103 HWTEST_F(HitraceEventTest, HitraceEventTest002, TestSize.Level2)
104 {
105     ASSERT_TRUE(RunCmd("hitrace --trace_begin app >> /data/local/tmp/test.txt"));
106     TraceSysEventParams traceEventParams;
107     traceEventParams.caller = "CMD";
108     traceEventParams.opt = "DumpTextTrace";
109     std::shared_ptr<HitraceEventListener> traceListener = std::make_shared<HitraceEventListener>();
110     ListenerRule tagRule("PROFILER", "HITRACE_USAGE", RuleType::WHOLE_WORD);
111     std::vector<ListenerRule> sysRules;
112     sysRules.push_back(tagRule);
113     HiSysEventManager::AddListener(traceListener, sysRules);
114     traceListener->SetEvent(traceEventParams);
115     ASSERT_TRUE(RunCmd("hitrace --trace_finish -o /data/local/tmp/test.ftrace"));
116     ASSERT_TRUE(traceListener->CheckKeywordInReasons());
117     HiSysEventManager::RemoveListener(traceListener);
118 }
119 
120 /**
121  * @tc.name: HitraceEventTest003
122  * @tc.desc: test Report DumpTextTrace HitraceEvent in HandleRecordingShortText
123  * @tc.type: FUNC
124  */
125 HWTEST_F(HitraceEventTest, HitraceEventTest003, TestSize.Level2)
126 {
127     TraceSysEventParams traceEventParams;
128     traceEventParams.caller = "CMD";
129     traceEventParams.opt = "DumpTextTrace";
130     std::shared_ptr<HitraceEventListener> traceListener = std::make_shared<HitraceEventListener>();
131     ListenerRule tagRule("PROFILER", "HITRACE_USAGE", RuleType::WHOLE_WORD);
132     std::vector<ListenerRule> sysRules;
133     sysRules.push_back(tagRule);
134     HiSysEventManager::AddListener(traceListener, sysRules);
135     traceListener->SetEvent(traceEventParams);
136     ASSERT_TRUE(RunCmd("hitrace -t 5 app -o /data/local/tmp/test.ftrace"));
137     ASSERT_TRUE(traceListener->CheckKeywordInReasons());
138     HiSysEventManager::RemoveListener(traceListener);
139 }
140 
141 /**
142  * @tc.name: HitraceEventTest004
143  * @tc.desc: test Report ShowListCategory HitraceEvent
144  * @tc.type: FUNC
145  */
146 HWTEST_F(HitraceEventTest, HitraceEventTest004, TestSize.Level2)
147 {
148     TraceSysEventParams traceEventParams;
149     traceEventParams.caller = "CMD";
150     traceEventParams.opt = "ShowListCategory";
151     std::shared_ptr<HitraceEventListener> traceListener = std::make_shared<HitraceEventListener>();
152     ListenerRule tagRule("PROFILER", "HITRACE_USAGE", RuleType::WHOLE_WORD);
153     std::vector<ListenerRule> sysRules;
154     sysRules.push_back(tagRule);
155     HiSysEventManager::AddListener(traceListener, sysRules);
156     traceListener->SetEvent(traceEventParams);
157     ASSERT_TRUE(RunCmd("hitrace -l >> /data/local/tmp/showlist.txt"));
158     ASSERT_TRUE(traceListener->CheckKeywordInReasons());
159     HiSysEventManager::RemoveListener(traceListener);
160 }
161 
162 /**
163  * @tc.name: HitraceEventTest005
164  * @tc.desc: test Report ShowHelp HitraceEvent
165  * @tc.type: FUNC
166  */
167 HWTEST_F(HitraceEventTest, HitraceEventTest005, TestSize.Level2)
168 {
169     TraceSysEventParams traceEventParams;
170     traceEventParams.caller = "CMD";
171     traceEventParams.opt = "ShowHelp";
172     std::shared_ptr<HitraceEventListener> traceListener = std::make_shared<HitraceEventListener>();
173     ListenerRule tagRule("PROFILER", "HITRACE_USAGE", RuleType::WHOLE_WORD);
174     std::vector<ListenerRule> sysRules;
175     sysRules.push_back(tagRule);
176     HiSysEventManager::AddListener(traceListener, sysRules);
177     traceListener->SetEvent(traceEventParams);
178     ASSERT_TRUE(RunCmd("hitrace --help >> /data/local/tmp/showhelp.txt"));
179     ASSERT_TRUE(traceListener->CheckKeywordInReasons());
180     HiSysEventManager::RemoveListener(traceListener);
181 }
182 } // namespace HiviewDFX
183 } // namespace OHOS
184