| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_packet_generator.h" | 5 #include "net/quic/quic_packet_generator.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "net/quic/crypto/crypto_protocol.h" | 10 #include "net/quic/crypto/crypto_protocol.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 for (SerializedPacket& packet : packets_) { | 126 for (SerializedPacket& packet : packets_) { |
| 127 QuicUtils::ClearSerializedPacket(&packet); | 127 QuicUtils::ClearSerializedPacket(&packet); |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 | 130 |
| 131 void SavePacket(SerializedPacket* packet) { | 131 void SavePacket(SerializedPacket* packet) { |
| 132 packets_.push_back(*packet); | 132 packets_.push_back(*packet); |
| 133 ASSERT_FALSE(packet->packet->owns_buffer()); | 133 ASSERT_FALSE(packet->packet->owns_buffer()); |
| 134 scoped_ptr<QuicEncryptedPacket> encrypted_deleter(packets_.back().packet); | 134 scoped_ptr<QuicEncryptedPacket> encrypted_deleter(packets_.back().packet); |
| 135 packets_.back().packet = packets_.back().packet->Clone(); | 135 packets_.back().packet = packets_.back().packet->Clone(); |
| 136 packet->retransmittable_frames.clear(); |
| 136 } | 137 } |
| 137 | 138 |
| 138 protected: | 139 protected: |
| 139 QuicRstStreamFrame* CreateRstStreamFrame() { | 140 QuicRstStreamFrame* CreateRstStreamFrame() { |
| 140 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); | 141 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); |
| 141 } | 142 } |
| 142 | 143 |
| 143 QuicGoAwayFrame* CreateGoAwayFrame() { | 144 QuicGoAwayFrame* CreateGoAwayFrame() { |
| 144 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); | 145 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); |
| 145 } | 146 } |
| 146 | 147 |
| 147 void CheckPacketContains(const PacketContents& contents, | 148 void CheckPacketContains(const PacketContents& contents, |
| 148 size_t packet_index) { | 149 size_t packet_index) { |
| 149 ASSERT_GT(packets_.size(), packet_index); | 150 ASSERT_GT(packets_.size(), packet_index); |
| 150 const SerializedPacket& packet = packets_[packet_index]; | 151 const SerializedPacket& packet = packets_[packet_index]; |
| 151 size_t num_retransmittable_frames = | 152 size_t num_retransmittable_frames = |
| 152 contents.num_connection_close_frames + contents.num_goaway_frames + | 153 contents.num_connection_close_frames + contents.num_goaway_frames + |
| 153 contents.num_rst_stream_frames + contents.num_stream_frames + | 154 contents.num_rst_stream_frames + contents.num_stream_frames + |
| 154 contents.num_ping_frames; | 155 contents.num_ping_frames; |
| 155 size_t num_frames = | 156 size_t num_frames = |
| 156 contents.num_ack_frames + contents.num_stop_waiting_frames + | 157 contents.num_ack_frames + contents.num_stop_waiting_frames + |
| 157 contents.num_mtu_discovery_frames + num_retransmittable_frames; | 158 contents.num_mtu_discovery_frames + num_retransmittable_frames; |
| 158 | 159 |
| 159 if (num_retransmittable_frames == 0) { | 160 if (num_retransmittable_frames == 0) { |
| 160 ASSERT_TRUE(packet.retransmittable_frames == nullptr); | 161 ASSERT_TRUE(packet.retransmittable_frames.empty()); |
| 161 } else { | 162 } else { |
| 162 ASSERT_TRUE(packet.retransmittable_frames != nullptr); | 163 ASSERT_FALSE(packet.retransmittable_frames.empty()); |
| 163 EXPECT_EQ(num_retransmittable_frames, | 164 EXPECT_EQ(num_retransmittable_frames, |
| 164 packet.retransmittable_frames->size()); | 165 packet.retransmittable_frames.size()); |
| 165 } | 166 } |
| 166 | 167 |
| 167 ASSERT_TRUE(packet.packet != nullptr); | 168 ASSERT_TRUE(packet.packet != nullptr); |
| 168 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); | 169 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); |
| 169 EXPECT_EQ(num_frames, simple_framer_.num_frames()); | 170 EXPECT_EQ(num_frames, simple_framer_.num_frames()); |
| 170 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size()); | 171 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size()); |
| 171 EXPECT_EQ(contents.num_connection_close_frames, | 172 EXPECT_EQ(contents.num_connection_close_frames, |
| 172 simple_framer_.connection_close_frames().size()); | 173 simple_framer_.connection_close_frames().size()); |
| 173 EXPECT_EQ(contents.num_goaway_frames, | 174 EXPECT_EQ(contents.num_goaway_frames, |
| 174 simple_framer_.goaway_frames().size()); | 175 simple_framer_.goaway_frames().size()); |
| 175 EXPECT_EQ(contents.num_rst_stream_frames, | 176 EXPECT_EQ(contents.num_rst_stream_frames, |
| 176 simple_framer_.rst_stream_frames().size()); | 177 simple_framer_.rst_stream_frames().size()); |
| 177 EXPECT_EQ(contents.num_stream_frames, | 178 EXPECT_EQ(contents.num_stream_frames, |
| 178 simple_framer_.stream_frames().size()); | 179 simple_framer_.stream_frames().size()); |
| 179 EXPECT_EQ(contents.num_stop_waiting_frames, | 180 EXPECT_EQ(contents.num_stop_waiting_frames, |
| 180 simple_framer_.stop_waiting_frames().size()); | 181 simple_framer_.stop_waiting_frames().size()); |
| 181 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group); | 182 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group); |
| 182 | 183 |
| 183 // From the receiver's perspective, MTU discovery frames are ping frames. | 184 // From the receiver's perspective, MTU discovery frames are ping frames. |
| 184 EXPECT_EQ(contents.num_ping_frames + contents.num_mtu_discovery_frames, | 185 EXPECT_EQ(contents.num_ping_frames + contents.num_mtu_discovery_frames, |
| 185 simple_framer_.ping_frames().size()); | 186 simple_framer_.ping_frames().size()); |
| 186 } | 187 } |
| 187 | 188 |
| 188 void CheckPacketHasSingleStreamFrame(size_t packet_index) { | 189 void CheckPacketHasSingleStreamFrame(size_t packet_index) { |
| 189 ASSERT_GT(packets_.size(), packet_index); | 190 ASSERT_GT(packets_.size(), packet_index); |
| 190 const SerializedPacket& packet = packets_[packet_index]; | 191 const SerializedPacket& packet = packets_[packet_index]; |
| 191 ASSERT_TRUE(packet.retransmittable_frames != nullptr); | 192 ASSERT_FALSE(packet.retransmittable_frames.empty()); |
| 192 EXPECT_EQ(1u, packet.retransmittable_frames->size()); | 193 EXPECT_EQ(1u, packet.retransmittable_frames.size()); |
| 193 ASSERT_TRUE(packet.packet != nullptr); | 194 ASSERT_TRUE(packet.packet != nullptr); |
| 194 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); | 195 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); |
| 195 EXPECT_EQ(1u, simple_framer_.num_frames()); | 196 EXPECT_EQ(1u, simple_framer_.num_frames()); |
| 196 EXPECT_EQ(1u, simple_framer_.stream_frames().size()); | 197 EXPECT_EQ(1u, simple_framer_.stream_frames().size()); |
| 197 } | 198 } |
| 198 | 199 |
| 199 void CheckAllPacketsHaveSingleStreamFrame() { | 200 void CheckAllPacketsHaveSingleStreamFrame() { |
| 200 for (size_t i = 0; i < packets_.size(); i++) { | 201 for (size_t i = 0; i < packets_.size(); i++) { |
| 201 CheckPacketHasSingleStreamFrame(i); | 202 CheckPacketHasSingleStreamFrame(i); |
| 202 } | 203 } |
| 203 } | 204 } |
| 204 | 205 |
| 205 void CheckPacketIsFec(size_t packet_index, QuicPacketNumber fec_group) { | 206 void CheckPacketIsFec(size_t packet_index, QuicPacketNumber fec_group) { |
| 206 ASSERT_GT(packets_.size(), packet_index); | 207 ASSERT_GT(packets_.size(), packet_index); |
| 207 const SerializedPacket& packet = packets_[packet_index]; | 208 const SerializedPacket& packet = packets_[packet_index]; |
| 208 ASSERT_TRUE(packet.retransmittable_frames == nullptr); | 209 ASSERT_TRUE(packet.retransmittable_frames.empty()); |
| 209 ASSERT_TRUE(packet.packet != nullptr); | 210 ASSERT_TRUE(packet.packet != nullptr); |
| 210 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); | 211 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); |
| 211 EXPECT_TRUE(simple_framer_.header().fec_flag); | 212 EXPECT_TRUE(simple_framer_.header().fec_flag); |
| 212 } | 213 } |
| 213 | 214 |
| 214 QuicIOVector CreateData(size_t len) { | 215 QuicIOVector CreateData(size_t len) { |
| 215 data_array_.reset(new char[len]); | 216 data_array_.reset(new char[len]); |
| 216 memset(data_array_.get(), '?', len); | 217 memset(data_array_.get(), '?', len); |
| 217 iov_.iov_base = data_array_.get(); | 218 iov_.iov_base = data_array_.get(); |
| 218 iov_.iov_len = len; | 219 iov_.iov_len = len; |
| (...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1707 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1708 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1708 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); | 1709 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); |
| 1709 generator_.FlushAllQueuedFrames(); | 1710 generator_.FlushAllQueuedFrames(); |
| 1710 EXPECT_FALSE(generator_.HasQueuedFrames()); | 1711 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 1711 generator_.SetCurrentPath(kTestPathId1, 1, 0); | 1712 generator_.SetCurrentPath(kTestPathId1, 1, 0); |
| 1712 EXPECT_EQ(kTestPathId1, QuicPacketCreatorPeer::GetCurrentPath(creator_)); | 1713 EXPECT_EQ(kTestPathId1, QuicPacketCreatorPeer::GetCurrentPath(creator_)); |
| 1713 } | 1714 } |
| 1714 | 1715 |
| 1715 } // namespace test | 1716 } // namespace test |
| 1716 } // namespace net | 1717 } // namespace net |
| OLD | NEW |