1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 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 <fcntl.h> 17 #include <hwext/gtest-ext.h> 18 #include <hwext/gtest-tag.h> 19 #include <memory> 20 21 #include "network_parser/pbreader_network_parser.h" 22 #include "network_plugin_result.pb.h" 23 #include "network_plugin_result.pbreader.h" 24 #include "parser/ptreader_parser/ptreader_parser.h" 25 #include "parser/common_types.h" 26 #include "trace_streamer_selector.h" 27 28 using namespace testing::ext; 29 using namespace SysTuning::TraceStreamer; 30 31 namespace SysTuning { 32 namespace TraceStreamer { 33 const uint64_t TS = 100; 34 const uint64_t DURS_01 = 1999632781; 35 const uint64_t TX_01 = 712921; 36 const uint64_t RX_01 = 13535011; 37 const uint64_t PACKETIN_01 = 11431; 38 const uint64_t PACKETOUT_01 = 7371; 39 const uint64_t DURS_02 = 1999632782; 40 const uint64_t TX_02 = 712922; 41 const uint64_t RX_02 = 13535012; 42 const uint64_t PACKETIN_02 = 11432; 43 const uint64_t PACKETOUT_02 = 7372; 44 const uint64_t DURS_03 = 1999632783; 45 const uint64_t TX_03 = 712923; 46 const uint64_t RX_03 = 13535013; 47 const uint64_t PACKETIN_03 = 11433; 48 const uint64_t PACKETOUT_03 = 7373; 49 const uint64_t DURS_04 = 1999632784; 50 const uint64_t TX_04 = 712924; 51 const uint64_t RX_04 = 13535014; 52 const uint64_t PACKETIN_04 = 11434; 53 const uint64_t PACKETOUT_04 = 7374; 54 55 class HtraceNetworkParserTest : public ::testing::Test { 56 public: SetUp()57 void SetUp() 58 { 59 stream_.InitFilter(); 60 } 61 TearDown()62 void TearDown() {} 63 SetNetworkSystemData(uint64_t rx_bytes,uint64_t tx_bytes,uint64_t rx_packets,uint64_t tx_packets)64 std::string SetNetworkSystemData(uint64_t rx_bytes, uint64_t tx_bytes, uint64_t rx_packets, uint64_t tx_packets) 65 { 66 auto networkInfo = std::make_unique<NetworkDatas>(); 67 NetworkSystemData *networkSystemData = new NetworkSystemData(); 68 networkSystemData->set_rx_bytes(rx_bytes); 69 networkSystemData->set_tx_bytes(tx_bytes); 70 networkSystemData->set_rx_packets(rx_packets); 71 networkSystemData->set_tx_packets(tx_packets); 72 networkInfo->set_allocated_network_system_info(networkSystemData); 73 74 std::string networkData = ""; 75 networkInfo->SerializeToString(&networkData); 76 return networkData; 77 } 78 79 public: 80 SysTuning::TraceStreamer::TraceStreamerSelector stream_ = {}; 81 }; 82 83 /** 84 * @tc.name: ParseHtraceNetworkWithoutNetworkData 85 * @tc.desc: Parse a Process that does not contain any ProcessData 86 * @tc.type: FUNC 87 */ 88 HWTEST_F(HtraceNetworkParserTest, ParseHtraceNetworkWithoutNetworkData, TestSize.Level1) 89 { 90 TS_LOGI("test17-1"); 91 auto networkInfo = std::make_unique<NetworkDatas>(); 92 std::string networkData = ""; 93 networkInfo->SerializeToString(&networkData); 94 ProtoReader::BytesView networkInfoData(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 95 96 PbreaderNetworkParser htraceNetworkParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 97 htraceNetworkParser.Parse(networkInfoData, TS); 98 auto size = stream_.traceDataCache_->GetConstNetworkData().Size(); 99 EXPECT_FALSE(size); 100 } 101 102 /** 103 * @tc.name: ParseHtraceNetworkWithNetworkData 104 * @tc.desc: Parse a Process with ProcessData 105 * @tc.type: FUNC 106 */ 107 HWTEST_F(HtraceNetworkParserTest, ParseHtraceNetworkWithNetworkData, TestSize.Level1) 108 { 109 TS_LOGI("test17-2"); 110 const uint64_t TX = 712924; 111 const uint64_t RX = 13535014; 112 const uint64_t PACKETIN = 11431; 113 const uint64_t PACKETOUT = 7373; 114 std::string networkData = SetNetworkSystemData(RX, TX, PACKETIN, PACKETOUT); 115 ProtoReader::BytesView networkInfoData(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 116 117 PbreaderNetworkParser htraceNetworkParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 118 htraceNetworkParser.Parse(networkInfoData, TS); 119 htraceNetworkParser.Finish(); 120 auto size = stream_.traceDataCache_->GetConstNetworkData().Size(); 121 EXPECT_FALSE(size); 122 } 123 124 /** 125 * @tc.name: ParseHtraceNetworkWithTwoNetworkData 126 * @tc.desc: Parse a Process with ProcessData 127 * @tc.type: FUNC 128 */ 129 HWTEST_F(HtraceNetworkParserTest, ParseHtraceNetworkWithTwoNetworkData, TestSize.Level1) 130 { 131 TS_LOGI("test17-3"); 132 std::string networkData = SetNetworkSystemData(RX_01, TX_01, PACKETIN_01, PACKETOUT_01); 133 ProtoReader::BytesView networkInfoData01(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 134 135 PbreaderNetworkParser htraceNetworkParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 136 htraceNetworkParser.Parse(networkInfoData01, TS); 137 138 networkData = SetNetworkSystemData(RX_02, TX_02, PACKETIN_02, PACKETOUT_02); 139 ProtoReader::BytesView networkInfoData02(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 140 141 htraceNetworkParser.Parse(networkInfoData02, TS); 142 htraceNetworkParser.Finish(); 143 144 auto netDetailData = stream_.traceDataCache_->GetConstNetworkData(); 145 EXPECT_EQ(netDetailData.TxDatas()[0], TX_02); 146 EXPECT_EQ(netDetailData.RxDatas()[0], RX_02); 147 EXPECT_EQ(netDetailData.PacketIn()[0], PACKETIN_02); 148 EXPECT_EQ(netDetailData.PacketOut()[0], PACKETOUT_02); 149 } 150 151 /** 152 * @tc.name: ParseHtraceNetworkWithThreeNetworkData 153 * @tc.desc: Parse a Process with ProcessData 154 * @tc.type: FUNC 155 */ 156 HWTEST_F(HtraceNetworkParserTest, ParseHtraceNetworkWithThreeNetworkData, TestSize.Level1) 157 { 158 TS_LOGI("test17-4"); 159 std::string networkData = SetNetworkSystemData(RX_01, TX_01, PACKETIN_01, PACKETOUT_01); 160 ProtoReader::BytesView networkInfoData01(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 161 162 PbreaderNetworkParser htraceNetworkParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 163 htraceNetworkParser.Parse(networkInfoData01, TS); 164 165 networkData = SetNetworkSystemData(RX_02, TX_02, PACKETIN_02, PACKETOUT_02); 166 ProtoReader::BytesView networkInfoData02(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 167 htraceNetworkParser.Parse(networkInfoData02, TS); 168 169 networkData = SetNetworkSystemData(RX_03, TX_03, PACKETIN_03, PACKETOUT_03); 170 ProtoReader::BytesView networkInfoData03(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 171 htraceNetworkParser.Parse(networkInfoData03, TS); 172 htraceNetworkParser.Finish(); 173 174 auto netDetailData = stream_.traceDataCache_->GetConstNetworkData(); 175 EXPECT_EQ(netDetailData.TxDatas()[0], TX_02); 176 EXPECT_EQ(netDetailData.TxDatas()[1], TX_03); 177 EXPECT_EQ(netDetailData.RxDatas()[0], RX_02); 178 EXPECT_EQ(netDetailData.RxDatas()[1], RX_03); 179 EXPECT_EQ(netDetailData.PacketIn()[0], PACKETIN_02); 180 EXPECT_EQ(netDetailData.PacketIn()[1], PACKETIN_03); 181 EXPECT_EQ(netDetailData.PacketOut()[0], PACKETOUT_02); 182 EXPECT_EQ(netDetailData.PacketOut()[1], PACKETOUT_03); 183 } 184 185 /** 186 * @tc.name: ParseHtraceNetworkWithMultipleNetworkData 187 * @tc.desc: Parse a Process with ProcessData 188 * @tc.type: FUNC 189 */ 190 HWTEST_F(HtraceNetworkParserTest, ParseHtraceNetworkWithMultipleNetworkData, TestSize.Level1) 191 { 192 TS_LOGI("test17-5"); 193 std::string networkData = SetNetworkSystemData(RX_01, TX_01, PACKETIN_01, PACKETOUT_01); 194 ProtoReader::BytesView networkInfoData01(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 195 196 PbreaderNetworkParser htraceNetworkParser(stream_.traceDataCache_.get(), stream_.streamFilters_.get()); 197 htraceNetworkParser.Parse(networkInfoData01, TS); 198 199 networkData = SetNetworkSystemData(RX_02, TX_02, PACKETIN_02, PACKETOUT_02); 200 ProtoReader::BytesView networkInfoData02(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 201 htraceNetworkParser.Parse(networkInfoData02, TS); 202 203 networkData = SetNetworkSystemData(RX_03, TX_03, PACKETIN_03, PACKETOUT_03); 204 ProtoReader::BytesView networkInfoData03(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 205 htraceNetworkParser.Parse(networkInfoData03, TS); 206 207 networkData = SetNetworkSystemData(RX_04, TX_04, PACKETIN_04, PACKETOUT_04); 208 ProtoReader::BytesView networkInfoData04(reinterpret_cast<const uint8_t *>(networkData.data()), networkData.size()); 209 htraceNetworkParser.Parse(networkInfoData04, TS); 210 htraceNetworkParser.Finish(); 211 212 auto netDetailData = stream_.traceDataCache_->GetConstNetworkData(); 213 EXPECT_EQ(netDetailData.TxDatas()[0], TX_02); 214 EXPECT_EQ(netDetailData.TxDatas()[1], TX_03); 215 EXPECT_EQ(netDetailData.TxDatas()[2], TX_04); 216 EXPECT_EQ(netDetailData.RxDatas()[0], RX_02); 217 EXPECT_EQ(netDetailData.RxDatas()[1], RX_03); 218 EXPECT_EQ(netDetailData.RxDatas()[2], RX_04); 219 EXPECT_EQ(netDetailData.PacketIn()[0], PACKETIN_02); 220 EXPECT_EQ(netDetailData.PacketIn()[1], PACKETIN_03); 221 EXPECT_EQ(netDetailData.PacketIn()[2], PACKETIN_04); 222 EXPECT_EQ(netDetailData.PacketOut()[0], PACKETOUT_02); 223 EXPECT_EQ(netDetailData.PacketOut()[1], PACKETOUT_03); 224 EXPECT_EQ(netDetailData.PacketOut()[2], PACKETOUT_04); 225 } 226 } // namespace TraceStreamer 227 } // namespace SysTuning