| 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_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/crypto/null_encrypter.h" | 8 #include "net/quic/crypto/null_encrypter.h" |
| 9 #include "net/quic/quic_utils.h" | 9 #include "net/quic/quic_utils.h" |
| 10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), | 25 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), |
| 26 id_(1), | 26 id_(1), |
| 27 sequence_number_(0), | 27 sequence_number_(0), |
| 28 guid_(2), | 28 guid_(2), |
| 29 data_("foo"), | 29 data_("foo"), |
| 30 utils_(guid_, &framer_) { | 30 utils_(guid_, &framer_) { |
| 31 framer_.set_visitor(&framer_visitor_); | 31 framer_.set_visitor(&framer_visitor_); |
| 32 } | 32 } |
| 33 ~QuicPacketCreatorTest() { | 33 ~QuicPacketCreatorTest() { |
| 34 STLDeleteValues(&packets_); | 34 STLDeleteValues(&packets_); |
| 35 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { |
| 36 QuicConnection::DeleteEnclosedFrame(&(*it)); |
| 37 } |
| 35 } | 38 } |
| 36 | 39 |
| 37 void ProcessPackets() { | 40 void ProcessPackets() { |
| 38 for (size_t i = 0; i < packets_.size(); ++i) { | 41 for (size_t i = 0; i < packets_.size(); ++i) { |
| 39 scoped_ptr<QuicEncryptedPacket> encrypted( | 42 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 40 framer_.EncryptPacket(*packets_[i].second)); | 43 framer_.EncryptPacket(*packets_[i].second)); |
| 41 framer_.ProcessPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 44 framer_.ProcessPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
| 42 } | 45 } |
| 43 } | 46 } |
| 44 | 47 |
| 45 vector<QuicPacketCreator::PacketPair> packets_; | 48 vector<QuicPacketCreator::PacketPair> packets_; |
| 49 QuicFrames frames_; |
| 46 QuicFramer framer_; | 50 QuicFramer framer_; |
| 47 testing::StrictMock<MockFramerVisitor> framer_visitor_; | 51 testing::StrictMock<MockFramerVisitor> framer_visitor_; |
| 48 QuicStreamId id_; | 52 QuicStreamId id_; |
| 49 QuicPacketSequenceNumber sequence_number_; | 53 QuicPacketSequenceNumber sequence_number_; |
| 50 QuicGuid guid_; | 54 QuicGuid guid_; |
| 51 string data_; | 55 string data_; |
| 52 QuicPacketCreator utils_; | 56 QuicPacketCreator utils_; |
| 53 }; | 57 }; |
| 54 | 58 |
| 55 TEST_F(QuicPacketCreatorTest, DataToStreamBasic) { | 59 TEST_F(QuicPacketCreatorTest, DataToStreamBasic) { |
| 56 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 60 size_t bytes_consumed = utils_.DataToStream( |
| 61 id_, data_, 0, true, &packets_, &frames_); |
| 57 | 62 |
| 58 ASSERT_EQ(1u, packets_.size()); | 63 ASSERT_EQ(1u, packets_.size()); |
| 59 ASSERT_EQ(1u, utils_.sequence_number()); | 64 ASSERT_EQ(1u, utils_.sequence_number()); |
| 60 ASSERT_EQ(data_.size(), bytes_consumed); | 65 ASSERT_EQ(data_.size(), bytes_consumed); |
| 61 | 66 |
| 62 InSequence s; | 67 InSequence s; |
| 63 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 68 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 64 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 69 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 65 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 70 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 66 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 71 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 67 | 72 |
| 68 ProcessPackets(); | 73 ProcessPackets(); |
| 69 } | 74 } |
| 70 | 75 |
| 71 TEST_F(QuicPacketCreatorTest, DataToStreamFec) { | 76 TEST_F(QuicPacketCreatorTest, DataToStreamFec) { |
| 72 utils_.options()->use_fec = true; | 77 utils_.options()->use_fec = true; |
| 73 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 78 size_t bytes_consumed = utils_.DataToStream( |
| 79 id_, data_, 0, true, &packets_, &frames_); |
| 74 | 80 |
| 75 ASSERT_EQ(2u, packets_.size()); | 81 ASSERT_EQ(2u, packets_.size()); |
| 76 ASSERT_EQ(2u, utils_.sequence_number()); | 82 ASSERT_EQ(2u, utils_.sequence_number()); |
| 77 ASSERT_EQ(data_.size(), bytes_consumed); | 83 ASSERT_EQ(data_.size(), bytes_consumed); |
| 78 | 84 |
| 79 InSequence s; | 85 InSequence s; |
| 80 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 86 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 81 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 87 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 82 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 88 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
| 83 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 89 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 84 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 90 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 85 | 91 |
| 86 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 92 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 87 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 93 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 88 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 94 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
| 89 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 95 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 90 | 96 |
| 91 ProcessPackets(); | 97 ProcessPackets(); |
| 92 } | 98 } |
| 93 | 99 |
| 94 TEST_F(QuicPacketCreatorTest, DataToStreamFecHandled) { | 100 TEST_F(QuicPacketCreatorTest, DataToStreamFecHandled) { |
| 95 utils_.options()->use_fec = true; | 101 utils_.options()->use_fec = true; |
| 96 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 102 size_t bytes_consumed = utils_.DataToStream( |
| 103 id_, data_, 0, true, &packets_, &frames_); |
| 97 ASSERT_EQ(data_.size(), bytes_consumed); | 104 ASSERT_EQ(data_.size(), bytes_consumed); |
| 98 | 105 |
| 99 ASSERT_EQ(2u, packets_.size()); | 106 ASSERT_EQ(2u, packets_.size()); |
| 100 ASSERT_EQ(2u, utils_.sequence_number()); | 107 ASSERT_EQ(2u, utils_.sequence_number()); |
| 101 | 108 |
| 102 QuicFecData fec_data; | 109 QuicFecData fec_data; |
| 103 fec_data.fec_group = 1; | 110 fec_data.fec_group = 1; |
| 104 fec_data.min_protected_packet_sequence_number = 1; | 111 fec_data.min_protected_packet_sequence_number = 1; |
| 105 fec_data.redundancy = packets_[0].second->FecProtectedData(); | 112 fec_data.redundancy = packets_[0].second->FecProtectedData(); |
| 106 | 113 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 124 EXPECT_CALL(framer_visitor_, OnRevivedPacket()); | 131 EXPECT_CALL(framer_visitor_, OnRevivedPacket()); |
| 125 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 132 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 126 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 133 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 127 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 134 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 128 | 135 |
| 129 QuicPacketHeader header; | 136 QuicPacketHeader header; |
| 130 framer_.ProcessRevivedPacket(header, fec_data.redundancy); | 137 framer_.ProcessRevivedPacket(header, fec_data.redundancy); |
| 131 } | 138 } |
| 132 | 139 |
| 133 TEST_F(QuicPacketCreatorTest, DataToStreamSkipFin) { | 140 TEST_F(QuicPacketCreatorTest, DataToStreamSkipFin) { |
| 134 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, false, &packets_); | 141 size_t bytes_consumed = utils_.DataToStream( |
| 142 id_, data_, 0, false, &packets_, &frames_); |
| 135 ASSERT_EQ(data_.size(), bytes_consumed); | 143 ASSERT_EQ(data_.size(), bytes_consumed); |
| 136 | 144 |
| 137 ASSERT_EQ(1u, packets_.size()); | 145 ASSERT_EQ(1u, packets_.size()); |
| 138 ASSERT_EQ(1u, utils_.sequence_number()); | 146 ASSERT_EQ(1u, utils_.sequence_number()); |
| 139 | 147 |
| 140 InSequence s; | 148 InSequence s; |
| 141 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 149 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 142 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 150 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 143 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 151 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 144 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 152 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 145 | 153 |
| 146 ProcessPackets(); | 154 ProcessPackets(); |
| 147 } | 155 } |
| 148 | 156 |
| 149 TEST_F(QuicPacketCreatorTest, NoData) { | 157 TEST_F(QuicPacketCreatorTest, NoData) { |
| 150 data_ = ""; | 158 data_ = ""; |
| 151 | 159 |
| 152 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 160 size_t bytes_consumed = utils_.DataToStream( |
| 161 id_, data_, 0, true, &packets_, &frames_); |
| 153 ASSERT_EQ(data_.size(), bytes_consumed); | 162 ASSERT_EQ(data_.size(), bytes_consumed); |
| 154 | 163 |
| 155 ASSERT_EQ(1u, packets_.size()); | 164 ASSERT_EQ(1u, packets_.size()); |
| 156 ASSERT_EQ(1u, utils_.sequence_number()); | 165 ASSERT_EQ(1u, utils_.sequence_number()); |
| 157 | 166 |
| 158 InSequence s; | 167 InSequence s; |
| 159 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 168 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 160 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 169 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 161 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 170 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 162 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 171 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 163 | 172 |
| 164 ProcessPackets(); | 173 ProcessPackets(); |
| 165 } | 174 } |
| 166 | 175 |
| 167 TEST_F(QuicPacketCreatorTest, MultiplePackets) { | 176 TEST_F(QuicPacketCreatorTest, MultiplePackets) { |
| 168 size_t ciphertext_size = NullEncrypter().GetCiphertextSize(2); | 177 size_t ciphertext_size = NullEncrypter().GetCiphertextSize(2); |
| 169 utils_.options()->max_packet_length = | 178 utils_.options()->max_packet_length = |
| 170 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); | 179 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); |
| 171 | 180 |
| 172 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 181 size_t bytes_consumed = utils_.DataToStream( |
| 182 id_, data_, 0, true, &packets_, &frames_); |
| 173 ASSERT_EQ(data_.size(), bytes_consumed); | 183 ASSERT_EQ(data_.size(), bytes_consumed); |
| 174 | 184 |
| 175 ASSERT_EQ(2u, packets_.size()); | 185 ASSERT_EQ(2u, packets_.size()); |
| 176 ASSERT_EQ(2u, utils_.sequence_number()); | 186 ASSERT_EQ(2u, utils_.sequence_number()); |
| 177 | 187 |
| 178 InSequence s; | 188 InSequence s; |
| 179 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 189 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 180 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 190 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 181 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 191 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 182 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 192 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 183 | 193 |
| 184 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 194 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 185 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 195 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 186 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 196 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 187 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 197 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 188 | 198 |
| 189 ProcessPackets(); | 199 ProcessPackets(); |
| 190 } | 200 } |
| 191 | 201 |
| 192 TEST_F(QuicPacketCreatorTest, MultiplePacketsWithLimits) { | 202 TEST_F(QuicPacketCreatorTest, MultiplePacketsWithLimits) { |
| 193 const size_t kPayloadBytesPerPacket = 2; | 203 const size_t kPayloadBytesPerPacket = 2; |
| 194 | 204 |
| 195 size_t ciphertext_size = NullEncrypter().GetCiphertextSize( | 205 size_t ciphertext_size = NullEncrypter().GetCiphertextSize( |
| 196 kPayloadBytesPerPacket); | 206 kPayloadBytesPerPacket); |
| 197 utils_.options()->max_packet_length = | 207 utils_.options()->max_packet_length = |
| 198 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); | 208 ciphertext_size + QuicUtils::StreamFramePacketOverhead(1); |
| 199 utils_.options()->max_num_packets = 1; | 209 utils_.options()->max_num_packets = 1; |
| 200 | 210 |
| 201 size_t bytes_consumed = utils_.DataToStream(id_, data_, 0, true, &packets_); | 211 size_t bytes_consumed = utils_.DataToStream( |
| 212 id_, data_, 0, true, &packets_, &frames_); |
| 202 ASSERT_EQ(kPayloadBytesPerPacket, bytes_consumed); | 213 ASSERT_EQ(kPayloadBytesPerPacket, bytes_consumed); |
| 203 | 214 |
| 204 ASSERT_EQ(1u, packets_.size()); | 215 ASSERT_EQ(1u, packets_.size()); |
| 205 ASSERT_EQ(1u, utils_.sequence_number()); | 216 ASSERT_EQ(1u, utils_.sequence_number()); |
| 206 | 217 |
| 207 InSequence s; | 218 InSequence s; |
| 208 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); | 219 EXPECT_CALL(framer_visitor_, OnPacket(_, _)); |
| 209 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 220 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 210 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 221 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 211 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 222 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 212 | 223 |
| 213 ProcessPackets(); | 224 ProcessPackets(); |
| 214 } | 225 } |
| 215 | 226 |
| 216 } // namespace | 227 } // namespace |
| 217 } // namespace test | 228 } // namespace test |
| 218 } // namespace net | 229 } // namespace net |
| OLD | NEW |