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