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