• 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 <hwext/gtest-ext.h>
17 #include <hwext/gtest-tag.h>
18 #include "hi_sysevent_measure_filter.h"
19 #include "htrace_hisysevent_parser.h"
20 #include "string_to_numerical.h"
21 #include "trace_streamer_selector.h"
22 
23 using namespace testing::ext;
24 using namespace SysTuning::TraceStreamer;
25 namespace SysTuning {
26 namespace TraceStreamer {
27 class HtraceHisysEventParserTest : public ::testing::Test {
28 public:
SetUp()29     void SetUp()
30     {
31         stream_.InitFilter();
32     }
33 
TearDown()34     void TearDown() {}
35 
36 public:
37     SysTuning::TraceStreamer::TraceStreamerSelector stream_ = {};
38 };
39 namespace base {
40 auto num0 = SysTuning::base::number(15, SysTuning::base::INTEGER_RADIX_TYPE_DEC);
41 auto num1 = SysTuning::base::number(15, SysTuning::base::INTEGER_RADIX_TYPE_HEX);
42 } // namespace base
43 /**
44  * @tc.name: ParseNoArray
45  * @tc.desc: Parse a piece of data without array
46  * @tc.type: FUNC
47  */
48 HWTEST_F(HtraceHisysEventParserTest, ParseNoArray, TestSize.Level1)
49 {
50     TS_LOGI("test9-1");
51     std::string jsMessage =
52         "{\"domain_\":\"POWERTHERMAL\",\"name_\":\"POWER_IDE_BATTERY\",\"type_\":1,\"time_\":22611696002,\"tz_\":\"+"
53         "0000\",\"pid_\":722,\"tid_\":3462,\"uid_\":1201,\"START_TIME\":22611696002,\"END_TIME\":23617705010,\"GAS_"
54         "GAUGE\":124,\"LEVEL\":33,\"SCREEN\":11,\"CHARGE\":21,\"CURRENT\":-404,\"CAPACITY\":9898,\"level_\":\"MINOR\","
55         "\"id_\":\"16494176919818340149\",\"info_\":\"\"}";
56     json jMessage;
57     JsonData jData;
58     size_t maxArraySize = 0;
59     uint64_t serial = 1;
60     std::vector<size_t> noArrayIndex;
61     std::vector<size_t> arrayIndex;
62     std::stringstream ss;
63     ss << jsMessage;
64     ss >> jMessage;
65     HtraceHisyseventParser hisysEvent(stream_.traceDataCache_.get(), stream_.streamFilters_.get());
66     (void)stream_.streamFilters_->hiSysEventMeasureFilter_->JGetData(jMessage, jData, maxArraySize, noArrayIndex,
67                                                                      arrayIndex);
68     EXPECT_TRUE(jData.eventName == "POWER_IDE_BATTERY");
69     EXPECT_EQ(jData.timeStamp, 22611696002000000);
70     EXPECT_EQ(maxArraySize, 0);
71     EXPECT_EQ(noArrayIndex.size(), 17);
72     EXPECT_EQ(arrayIndex.size(), 0);
73     DataIndex eventSourceIndex = stream_.traceDataCache_->GetDataIndex(jData.eventName);
74     (void)stream_.streamFilters_->hiSysEventMeasureFilter_->CommonDataParser(jData, eventSourceIndex, serial);
75     auto size = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Size();
76     EXPECT_EQ(size, 17);
77     auto anticipate = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Serial()[0];
78     EXPECT_EQ(anticipate, serial);
79     EXPECT_TRUE(base::num0 == "15");
80     EXPECT_TRUE(base::num1 == "f");
81 }
82 /**
83  * @tc.name: ParseHaveArrayData
84  * @tc.desc: Parse a piece of data with array
85  * @tc.type: FUNC
86  */
87 HWTEST_F(HtraceHisysEventParserTest, ParseHaveArrayData, TestSize.Level1)
88 {
89     TS_LOGI("test9-2");
90     std::string jsMessage =
91         "{\"domain_\":\"POWERTHERMAL\",\"name_\":\"POWER_IDE_WIFISCAN\",\"type_\":2,\"time_\":16611696002,\"tz_\":\"+"
92         "0000\",\"pid_\":722,\"tid_\":17827,\"uid_\":1201,\"START_TIME\":1661783047454,\"END_TIME\":1661783050455,"
93         "\"COUNT\":1,\"APPNAME\":[\"com.ohos.settings\",\"com.ohos.settings_js\",\"com.ohos.settings_app\"],"
94         "\"FOREGROUND_COUNT\":[43,41,65],\"FOREGROUND_ENERGY\":[120,134,532],\"BACKGROUND_COUNT\":[27,856,378],"
95         "\"BACKGROUND_ENERGY\":[638,65,12],\"SCREEN_ON_COUNT\":[23,558,75],\"SCREEN_ON_ENERGY\":[552,142,120],\"SCREEN_"
96         "OFF_COUNT\":[78,354,21],\"SCREEN_OFF_ENERGY\":[352,65,436],\"level_\":\"MINOR\",\"id_\":"
97         "\"17560016619580787102\",\"info_\":\"\"}";
98     json jMessage;
99     JsonData jData;
100     size_t maxArraySize = 0;
101     uint64_t serial = 1;
102     std::vector<size_t> noArrayIndex;
103     std::vector<size_t> arrayIndex;
104     std::stringstream ss;
105     ss << jsMessage;
106     ss >> jMessage;
107     HtraceHisyseventParser hisysEvent(stream_.traceDataCache_.get(), stream_.streamFilters_.get());
108     (void)stream_.streamFilters_->hiSysEventMeasureFilter_->JGetData(jMessage, jData, maxArraySize, noArrayIndex,
109                                                                      arrayIndex);
110     EXPECT_TRUE(jData.eventName == "POWER_IDE_WIFISCAN");
111     EXPECT_EQ(jData.timeStamp, 16611696002000000);
112     EXPECT_EQ(maxArraySize, 3);
113     EXPECT_EQ(noArrayIndex.size(), 12);
114     EXPECT_EQ(arrayIndex.size(), 9);
115     DataIndex eventSourceIndex = stream_.traceDataCache_->GetDataIndex(jData.eventName);
116     (void)stream_.streamFilters_->hiSysEventMeasureFilter_->NoArrayDataParse(jData, noArrayIndex, eventSourceIndex,
117                                                                              serial);
118     (void)stream_.streamFilters_->hiSysEventMeasureFilter_->ArrayDataParse(jData, arrayIndex, eventSourceIndex,
119                                                                            maxArraySize, serial);
120     auto size = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Size();
121     EXPECT_EQ(size, (9 * 3 + 12));
122     auto anticipate = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Serial()[0];
123     EXPECT_EQ(anticipate, serial);
124 }
125 const std::string JS_MESSAGE1 =
126     "{\"domain_\":\"POWERTHERMAL\",\"name_\":\"POWER_IDE_BATTERY\",\"type_\":1,\"time_\":22611696002,\"tz_\":\"+"
127     "0000\",\"pid_\":722,\"tid_\":3462,\"uid_\":1201,\"START_TIME\":22611696002,\"END_TIME\":23617705010,\"GAS_"
128     "GAUGE\":124,\"LEVEL\":33,\"SCREEN\":11,\"CHARGE\":21,\"CURRENT\":-404,\"CAPACITY\":9898,\"level_\":\"MINOR\","
129     "\"id_\":\"16494176919818340149\",\"info_\":\"\"}";
130 const std::string JS_MESSAGE2 =
131     "{\"domain_\":\"POWERTHERMAL\",\"name_\":\"POWER_IDE_WIFISCAN\",\"type_\":2,\"time_\":16611696002,\"tz_\":\"+"
132     "0000\",\"pid_\":722,\"tid_\":17827,\"uid_\":1201,\"START_TIME\":1661783047454,\"END_TIME\":1661783050455,"
133     "\"COUNT\":1,\"APPNAME\":[\"com.ohos.settings\",\"com.ohos.settings_js\",\"com.ohos.settings_app\"],"
134     "\"FOREGROUND_COUNT\":[43,41,65],\"FOREGROUND_ENERGY\":[120,134,532],\"BACKGROUND_COUNT\":[27,856,378],"
135     "\"BACKGROUND_ENERGY\":[638,65,12],\"SCREEN_ON_COUNT\":[23,558,75],\"SCREEN_ON_ENERGY\":[552,142,120],\"SCREEN_"
136     "OFF_COUNT\":[78,354,21],\"SCREEN_OFF_ENERGY\":[352,65,436],\"level_\":\"MINOR\",\"id_\":"
137     "\"17560016619580787102\",\"info_\":\"\"}";
138 /**
139  * @tc.name: MixedDataAnalysis
140  * @tc.desc: Mixed data analysis
141  * @tc.type: FUNC
142  */
143 HWTEST_F(HtraceHisysEventParserTest, MixedDataAnalysis, TestSize.Level1)
144 {
145     TS_LOGI("test9-3");
146     std::vector<std::string> jsMessage;
147     jsMessage.push_back(JS_MESSAGE1);
148     jsMessage.push_back(JS_MESSAGE2);
149     uint64_t serial = 1;
150     for (auto i = jsMessage.begin(); i != jsMessage.end(); i++) {
151         json jMessage;
152         JsonData jData;
153         size_t maxArraySize = 0;
154         std::vector<size_t> noArrayIndex;
155         std::vector<size_t> arrayIndex;
156         std::stringstream ss;
157         ss << *i;
158         ss >> jMessage;
159         HtraceHisyseventParser hisysEvent(stream_.traceDataCache_.get(), stream_.streamFilters_.get());
160         (void)stream_.streamFilters_->hiSysEventMeasureFilter_->JGetData(jMessage, jData, maxArraySize, noArrayIndex,
161                                                                          arrayIndex);
162         if (jData.eventName == "POWER_IDE_WIFISCAN") {
163             EXPECT_TRUE(jData.eventName == "POWER_IDE_WIFISCAN");
164             EXPECT_EQ(jData.timeStamp, 16611696002000000);
165             EXPECT_EQ(maxArraySize, 3);
166             EXPECT_EQ(noArrayIndex.size(), 12);
167             EXPECT_EQ(arrayIndex.size(), 9);
168         } else {
169             EXPECT_TRUE(jData.eventName == "POWER_IDE_BATTERY");
170             EXPECT_EQ(jData.timeStamp, 22611696002000000);
171             EXPECT_EQ(maxArraySize, 0);
172             EXPECT_EQ(noArrayIndex.size(), 17);
173             EXPECT_EQ(arrayIndex.size(), 0);
174         }
175         DataIndex eventSourceIndex = stream_.traceDataCache_->GetDataIndex(jData.eventName);
176         if (maxArraySize) {
177             (void)stream_.streamFilters_->hiSysEventMeasureFilter_->NoArrayDataParse(jData, noArrayIndex,
178                                                                                      eventSourceIndex, serial);
179             (void)stream_.streamFilters_->hiSysEventMeasureFilter_->ArrayDataParse(jData, arrayIndex, eventSourceIndex,
180                                                                                    maxArraySize, serial);
181         } else {
182             (void)stream_.streamFilters_->hiSysEventMeasureFilter_->CommonDataParser(jData, eventSourceIndex, serial);
183         }
184     }
185     auto size = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Size();
186     EXPECT_EQ(size, 17 + (9 * 3 + 12));
187     auto anticipate = stream_.traceDataCache_->GetConstHiSyseventMeasureData().Serial()[0];
188     EXPECT_EQ(anticipate, serial);
189 }
190 } // namespace TraceStreamer
191 } // namespace SysTuning
192