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/crypto/quic_decrypter.h" | 9 #include "net/quic/crypto/quic_decrypter.h" |
10 #include "net/quic/crypto/quic_encrypter.h" | 10 #include "net/quic/crypto/quic_encrypter.h" |
11 #include "net/quic/quic_utils.h" | 11 #include "net/quic/quic_utils.h" |
12 #include "net/quic/test_tools/mock_random.h" | 12 #include "net/quic/test_tools/mock_random.h" |
13 #include "net/quic/test_tools/quic_packet_creator_peer.h" | 13 #include "net/quic/test_tools/quic_packet_creator_peer.h" |
14 #include "net/quic/test_tools/quic_test_utils.h" | 14 #include "net/quic/test_tools/quic_test_utils.h" |
| 15 #include "net/test/gtest_util.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
16 | 17 |
17 using base::StringPiece; | 18 using base::StringPiece; |
| 19 using std::ostream; |
18 using std::string; | 20 using std::string; |
19 using std::vector; | 21 using std::vector; |
20 using testing::DoAll; | 22 using testing::DoAll; |
21 using testing::InSequence; | 23 using testing::InSequence; |
22 using testing::Return; | 24 using testing::Return; |
23 using testing::SaveArg; | 25 using testing::SaveArg; |
24 using testing::_; | 26 using testing::_; |
25 | 27 |
26 namespace net { | 28 namespace net { |
27 namespace test { | 29 namespace test { |
28 namespace { | 30 namespace { |
29 | 31 |
30 class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> { | 32 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}. |
| 33 struct TestParams { |
| 34 TestParams(QuicVersion version, |
| 35 bool version_serialization) |
| 36 : version(version), |
| 37 version_serialization(version_serialization) { |
| 38 } |
| 39 |
| 40 friend ostream& operator<<(ostream& os, const TestParams& p) { |
| 41 os << "{ client_version: " << QuicVersionToString(p.version) |
| 42 << " include version: " << p.version_serialization << " }"; |
| 43 return os; |
| 44 } |
| 45 |
| 46 QuicVersion version; |
| 47 bool version_serialization; |
| 48 }; |
| 49 |
| 50 // Constructs various test permutations. |
| 51 vector<TestParams> GetTestParams() { |
| 52 vector<TestParams> params; |
| 53 QuicVersionVector all_supported_versions = QuicSupportedVersions(); |
| 54 for (size_t i = 0; i < all_supported_versions.size(); ++i) { |
| 55 params.push_back(TestParams(all_supported_versions[i], true)); |
| 56 params.push_back(TestParams(all_supported_versions[i], false)); |
| 57 } |
| 58 return params; |
| 59 } |
| 60 |
| 61 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { |
31 protected: | 62 protected: |
32 QuicPacketCreatorTest() | 63 QuicPacketCreatorTest() |
33 : server_framer_(QuicSupportedVersions(), QuicTime::Zero(), true), | 64 : server_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(), |
34 client_framer_(QuicSupportedVersions(), QuicTime::Zero(), false), | 65 true), |
| 66 client_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(), |
| 67 false), |
35 sequence_number_(0), | 68 sequence_number_(0), |
36 connection_id_(2), | 69 connection_id_(2), |
37 data_("foo"), | 70 data_("foo"), |
38 creator_(connection_id_, &client_framer_, &mock_random_, false) { | 71 creator_(connection_id_, &client_framer_, &mock_random_, false) { |
39 client_framer_.set_visitor(&framer_visitor_); | 72 client_framer_.set_visitor(&framer_visitor_); |
40 server_framer_.set_visitor(&framer_visitor_); | 73 server_framer_.set_visitor(&framer_visitor_); |
41 } | 74 } |
42 ~QuicPacketCreatorTest() { | 75 ~QuicPacketCreatorTest() { |
43 } | 76 } |
44 | 77 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 QuicFramer server_framer_; | 127 QuicFramer server_framer_; |
95 QuicFramer client_framer_; | 128 QuicFramer client_framer_; |
96 testing::StrictMock<MockFramerVisitor> framer_visitor_; | 129 testing::StrictMock<MockFramerVisitor> framer_visitor_; |
97 QuicPacketSequenceNumber sequence_number_; | 130 QuicPacketSequenceNumber sequence_number_; |
98 QuicConnectionId connection_id_; | 131 QuicConnectionId connection_id_; |
99 string data_; | 132 string data_; |
100 MockRandom mock_random_; | 133 MockRandom mock_random_; |
101 QuicPacketCreator creator_; | 134 QuicPacketCreator creator_; |
102 }; | 135 }; |
103 | 136 |
104 TEST_F(QuicPacketCreatorTest, SerializeFrames) { | 137 // Run all packet creator tests with all supported versions of QUIC, and with |
| 138 // and without version in the packet header. |
| 139 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, |
| 140 QuicPacketCreatorTest, |
| 141 ::testing::ValuesIn(GetTestParams())); |
| 142 |
| 143 |
| 144 TEST_P(QuicPacketCreatorTest, SerializeFrames) { |
105 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 145 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); |
106 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 146 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
107 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); | 147 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); |
108 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 148 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
109 delete frames_[0].ack_frame; | 149 delete frames_[0].ack_frame; |
110 delete frames_[1].stream_frame; | 150 delete frames_[1].stream_frame; |
111 delete frames_[2].stream_frame; | 151 delete frames_[2].stream_frame; |
112 | 152 |
113 { | 153 { |
114 InSequence s; | 154 InSequence s; |
115 EXPECT_CALL(framer_visitor_, OnPacket()); | 155 EXPECT_CALL(framer_visitor_, OnPacket()); |
116 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 156 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
117 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 157 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
118 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 158 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
119 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 159 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
120 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 160 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
121 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 161 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
122 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 162 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
123 } | 163 } |
124 ProcessPacket(serialized.packet); | 164 ProcessPacket(serialized.packet); |
125 delete serialized.packet; | 165 delete serialized.packet; |
126 } | 166 } |
127 | 167 |
128 TEST_F(QuicPacketCreatorTest, SerializeWithFEC) { | 168 TEST_P(QuicPacketCreatorTest, SerializeWithFEC) { |
129 creator_.options()->max_packets_per_fec_group = 6; | 169 creator_.options()->max_packets_per_fec_group = 6; |
130 ASSERT_FALSE(creator_.ShouldSendFec(false)); | 170 // Should return false since we do not have enough packets in the FEC group to |
| 171 // trigger an FEC packet. |
| 172 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
131 | 173 |
132 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 174 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
133 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 175 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
134 delete frames_[0].stream_frame; | 176 delete frames_[0].stream_frame; |
135 | 177 |
136 { | 178 { |
137 InSequence s; | 179 InSequence s; |
138 EXPECT_CALL(framer_visitor_, OnPacket()); | 180 EXPECT_CALL(framer_visitor_, OnPacket()); |
139 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 181 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
140 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 182 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
141 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 183 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
142 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 184 if (GetParam().version != QUIC_VERSION_13) { |
| 185 // FEC is only used for versions > 13. |
| 186 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
| 187 } |
143 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 188 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
144 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 189 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
145 } | 190 } |
146 ProcessPacket(serialized.packet); | 191 ProcessPacket(serialized.packet); |
147 delete serialized.packet; | 192 delete serialized.packet; |
148 | 193 |
149 ASSERT_FALSE(creator_.ShouldSendFec(false)); | 194 // Should return false since we do not have enough packets in the FEC group to |
150 ASSERT_TRUE(creator_.ShouldSendFec(true)); | 195 // trigger an FEC packet. |
| 196 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 197 if (GetParam().version == QUIC_VERSION_13) { |
| 198 // FEC is only used for versions > 13. |
| 199 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/true)); |
| 200 } else { |
| 201 // Should return true since there are packets in the FEC group. |
| 202 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true)); |
| 203 } |
151 | 204 |
| 205 if (GetParam().version == QUIC_VERSION_13) { |
| 206 // FEC is only used for versions > 13. |
| 207 EXPECT_DFATAL(creator_.SerializeFec(), |
| 208 "SerializeFEC called but no group or zero packets in group."); |
| 209 return; |
| 210 } |
152 serialized = creator_.SerializeFec(); | 211 serialized = creator_.SerializeFec(); |
153 ASSERT_EQ(2u, serialized.sequence_number); | 212 ASSERT_EQ(2u, serialized.sequence_number); |
154 | |
155 { | 213 { |
156 InSequence s; | 214 InSequence s; |
157 EXPECT_CALL(framer_visitor_, OnPacket()); | 215 EXPECT_CALL(framer_visitor_, OnPacket()); |
158 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 216 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
159 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 217 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
160 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 218 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
161 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 219 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
162 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 220 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
163 } | 221 } |
164 ProcessPacket(serialized.packet); | 222 ProcessPacket(serialized.packet); |
165 delete serialized.packet; | 223 delete serialized.packet; |
166 } | 224 } |
167 | 225 |
168 TEST_F(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { | 226 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { |
169 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 227 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); |
170 creator_.AddSavedFrame(frames_[0]); | 228 creator_.AddSavedFrame(frames_[0]); |
171 creator_.options()->send_sequence_number_length = | 229 creator_.options()->send_sequence_number_length = |
172 PACKET_4BYTE_SEQUENCE_NUMBER; | 230 PACKET_4BYTE_SEQUENCE_NUMBER; |
173 SerializedPacket serialized = creator_.SerializePacket(); | 231 SerializedPacket serialized = creator_.SerializePacket(); |
174 // The sequence number length will not change mid-packet. | 232 // The sequence number length will not change mid-packet. |
175 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 233 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
176 | 234 |
177 { | 235 { |
178 InSequence s; | 236 InSequence s; |
(...skipping 19 matching lines...) Expand all Loading... |
198 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 256 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
199 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 257 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
200 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 258 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
201 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 259 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
202 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 260 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
203 } | 261 } |
204 ProcessPacket(serialized.packet); | 262 ProcessPacket(serialized.packet); |
205 delete serialized.packet; | 263 delete serialized.packet; |
206 } | 264 } |
207 | 265 |
208 TEST_F(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) { | 266 TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) { |
| 267 if (GetParam().version == QUIC_VERSION_13) { |
| 268 // FEC is only used for ver. > 13. This test does not add value for ver. 13. |
| 269 return; |
| 270 } |
| 271 // Test goal is to test the following sequence (P1 => generate Packet 1): |
| 272 // P1 <change seq num length> P2 FEC, |
| 273 // and we expect that sequence number length should not change until the end |
| 274 // of the open FEC group. |
209 creator_.options()->max_packets_per_fec_group = 6; | 275 creator_.options()->max_packets_per_fec_group = 6; |
210 ASSERT_FALSE(creator_.ShouldSendFec(false)); | 276 // Should return false since we do not have enough packets in the FEC group to |
| 277 // trigger an FEC packet. |
| 278 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 279 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); |
211 | 280 |
212 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); | 281 // Generate Packet 1. |
213 creator_.AddSavedFrame(frames_[0]); | 282 creator_.AddSavedFrame(frames_[0]); |
214 // Change the sequence number length mid-FEC group and it should not change. | 283 // Change the sequence number length mid-FEC group and it should not change. |
215 creator_.options()->send_sequence_number_length = | 284 creator_.options()->send_sequence_number_length = |
216 PACKET_4BYTE_SEQUENCE_NUMBER; | 285 PACKET_4BYTE_SEQUENCE_NUMBER; |
217 SerializedPacket serialized = creator_.SerializePacket(); | 286 SerializedPacket serialized = creator_.SerializePacket(); |
218 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 287 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
219 | 288 |
220 { | 289 { |
221 InSequence s; | 290 InSequence s; |
222 EXPECT_CALL(framer_visitor_, OnPacket()); | 291 EXPECT_CALL(framer_visitor_, OnPacket()); |
223 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 292 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
224 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 293 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
225 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 294 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
226 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 295 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
227 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 296 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
228 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 297 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
229 } | 298 } |
230 ProcessPacket(serialized.packet); | 299 ProcessPacket(serialized.packet); |
231 delete serialized.packet; | 300 delete serialized.packet; |
232 | 301 |
233 ASSERT_FALSE(creator_.ShouldSendFec(false)); | 302 // Generate Packet 2. |
234 ASSERT_TRUE(creator_.ShouldSendFec(true)); | 303 creator_.AddSavedFrame(frames_[0]); |
235 | 304 serialized = creator_.SerializePacket(); |
236 serialized = creator_.SerializeFec(); | |
237 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 305 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
238 ASSERT_EQ(2u, serialized.sequence_number); | |
239 | 306 |
240 { | 307 { |
241 InSequence s; | 308 InSequence s; |
| 309 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 310 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 311 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 312 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 313 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
| 314 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 315 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 316 } |
| 317 ProcessPacket(serialized.packet); |
| 318 delete serialized.packet; |
| 319 |
| 320 // Should return false since we do not have enough packets in the FEC group to |
| 321 // trigger an FEC packet. |
| 322 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 323 // Should return true since there are packets in the FEC group. |
| 324 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true)); |
| 325 |
| 326 // Force generation of FEC packet. |
| 327 serialized = creator_.SerializeFec(); |
| 328 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
| 329 ASSERT_EQ(3u, serialized.sequence_number); |
| 330 |
| 331 { |
| 332 InSequence s; |
242 EXPECT_CALL(framer_visitor_, OnPacket()); | 333 EXPECT_CALL(framer_visitor_, OnPacket()); |
243 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 334 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
244 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 335 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
245 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 336 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
246 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 337 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
247 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 338 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
248 } | 339 } |
249 ProcessPacket(serialized.packet); | 340 ProcessPacket(serialized.packet); |
250 delete serialized.packet; | 341 delete serialized.packet; |
251 | 342 |
252 // Ensure the next FEC group starts using the new sequence number length. | 343 // Ensure the next FEC group starts using the new sequence number length. |
253 serialized = creator_.SerializeAllFrames(frames_); | 344 serialized = creator_.SerializeAllFrames(frames_); |
254 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); | 345 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); |
255 delete frames_[0].ack_frame; | 346 delete frames_[0].ack_frame; |
256 delete serialized.packet; | 347 delete serialized.packet; |
257 } | 348 } |
258 | 349 |
259 TEST_F(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 350 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
260 // If the original packet sequence number length, the current sequence number | 351 // If the original packet sequence number length, the current sequence number |
261 // length, and the configured send sequence number length are different, the | 352 // length, and the configured send sequence number length are different, the |
262 // retransmit must sent with the original length and the others do not change. | 353 // retransmit must sent with the original length and the others do not change. |
263 creator_.options()->send_sequence_number_length = | 354 creator_.options()->send_sequence_number_length = |
264 PACKET_4BYTE_SEQUENCE_NUMBER; | 355 PACKET_4BYTE_SEQUENCE_NUMBER; |
265 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_, | 356 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_, |
266 PACKET_2BYTE_SEQUENCE_NUMBER); | 357 PACKET_2BYTE_SEQUENCE_NUMBER); |
267 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 358 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
268 SerializedPacket serialized = | 359 SerializedPacket serialized = |
269 creator_.ReserializeAllFrames(frames_, PACKET_1BYTE_SEQUENCE_NUMBER); | 360 creator_.ReserializeAllFrames(frames_, PACKET_1BYTE_SEQUENCE_NUMBER); |
(...skipping 10 matching lines...) Expand all Loading... |
280 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 371 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
281 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 372 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
282 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 373 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
283 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 374 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
284 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 375 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
285 } | 376 } |
286 ProcessPacket(serialized.packet); | 377 ProcessPacket(serialized.packet); |
287 delete serialized.packet; | 378 delete serialized.packet; |
288 } | 379 } |
289 | 380 |
290 TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) { | 381 TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) { |
291 QuicConnectionCloseFrame frame; | 382 QuicConnectionCloseFrame frame; |
292 frame.error_code = QUIC_NO_ERROR; | 383 frame.error_code = QUIC_NO_ERROR; |
293 frame.error_details = "error"; | 384 frame.error_details = "error"; |
294 | 385 |
295 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); | 386 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); |
296 ASSERT_EQ(1u, serialized.sequence_number); | 387 ASSERT_EQ(1u, serialized.sequence_number); |
297 ASSERT_EQ(1u, creator_.sequence_number()); | 388 ASSERT_EQ(1u, creator_.sequence_number()); |
298 | 389 |
299 InSequence s; | 390 InSequence s; |
300 EXPECT_CALL(framer_visitor_, OnPacket()); | 391 EXPECT_CALL(framer_visitor_, OnPacket()); |
301 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 392 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
302 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 393 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
303 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 394 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
304 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); | 395 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); |
305 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 396 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
306 | 397 |
307 ProcessPacket(serialized.packet); | 398 ProcessPacket(serialized.packet); |
308 delete serialized.packet; | 399 delete serialized.packet; |
309 } | 400 } |
310 | 401 |
311 TEST_F(QuicPacketCreatorTest, CreateStreamFrame) { | 402 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { |
312 QuicFrame frame; | 403 QuicFrame frame; |
313 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u, | 404 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u, |
314 false, &frame); | 405 false, &frame); |
315 EXPECT_EQ(4u, consumed); | 406 EXPECT_EQ(4u, consumed); |
316 CheckStreamFrame(frame, 1u, "test", 0u, false); | 407 CheckStreamFrame(frame, 1u, "test", 0u, false); |
317 delete frame.stream_frame; | 408 delete frame.stream_frame; |
318 } | 409 } |
319 | 410 |
320 TEST_F(QuicPacketCreatorTest, CreateStreamFrameFin) { | 411 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { |
321 QuicFrame frame; | 412 QuicFrame frame; |
322 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 10u, | 413 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 10u, |
323 true, &frame); | 414 true, &frame); |
324 EXPECT_EQ(4u, consumed); | 415 EXPECT_EQ(4u, consumed); |
325 CheckStreamFrame(frame, 1u, "test", 10u, true); | 416 CheckStreamFrame(frame, 1u, "test", 10u, true); |
326 delete frame.stream_frame; | 417 delete frame.stream_frame; |
327 } | 418 } |
328 | 419 |
329 TEST_F(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { | 420 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { |
330 QuicFrame frame; | 421 QuicFrame frame; |
331 size_t consumed = creator_.CreateStreamFrame(1u, IOVector(), 0u, true, | 422 size_t consumed = creator_.CreateStreamFrame(1u, IOVector(), 0u, true, |
332 &frame); | 423 &frame); |
333 EXPECT_EQ(0u, consumed); | 424 EXPECT_EQ(0u, consumed); |
334 CheckStreamFrame(frame, 1u, string(), 0u, true); | 425 CheckStreamFrame(frame, 1u, string(), 0u, true); |
335 delete frame.stream_frame; | 426 delete frame.stream_frame; |
336 } | 427 } |
337 | 428 |
338 TEST_F(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { | 429 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { |
339 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 430 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
340 + GetEncryptionOverhead(); | 431 + GetEncryptionOverhead(); |
341 for (size_t i = overhead; i < overhead + 100; ++i) { | 432 for (size_t i = overhead; i < overhead + 100; ++i) { |
342 creator_.options()->max_packet_length = i; | 433 creator_.options()->max_packet_length = i; |
343 const bool should_have_room = i > overhead + GetStreamFrameOverhead( | 434 const bool should_have_room = i > overhead + GetStreamFrameOverhead( |
344 NOT_IN_FEC_GROUP); | 435 NOT_IN_FEC_GROUP); |
345 ASSERT_EQ(should_have_room, | 436 ASSERT_EQ(should_have_room, |
346 creator_.HasRoomForStreamFrame(kStreamId, kOffset)); | 437 creator_.HasRoomForStreamFrame(kStreamId, kOffset)); |
347 if (should_have_room) { | 438 if (should_have_room) { |
348 QuicFrame frame; | 439 QuicFrame frame; |
349 size_t bytes_consumed = creator_.CreateStreamFrame( | 440 size_t bytes_consumed = creator_.CreateStreamFrame( |
350 kStreamId, MakeIOVector("testdata"), kOffset, false, &frame); | 441 kStreamId, MakeIOVector("testdata"), kOffset, false, &frame); |
351 EXPECT_LT(0u, bytes_consumed); | 442 EXPECT_LT(0u, bytes_consumed); |
352 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 443 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
353 SerializedPacket serialized_packet = creator_.SerializePacket(); | 444 SerializedPacket serialized_packet = creator_.SerializePacket(); |
354 ASSERT_TRUE(serialized_packet.packet); | 445 ASSERT_TRUE(serialized_packet.packet); |
355 delete serialized_packet.packet; | 446 delete serialized_packet.packet; |
356 delete serialized_packet.retransmittable_frames; | 447 delete serialized_packet.retransmittable_frames; |
357 } | 448 } |
358 } | 449 } |
359 } | 450 } |
360 | 451 |
361 TEST_F(QuicPacketCreatorTest, StreamFrameConsumption) { | 452 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { |
362 // Compute the total overhead for a single frame in packet. | 453 // Compute the total overhead for a single frame in packet. |
363 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 454 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
364 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 455 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
365 size_t capacity = kDefaultMaxPacketSize - overhead; | 456 size_t capacity = kDefaultMaxPacketSize - overhead; |
366 // Now, test various sizes around this size. | 457 // Now, test various sizes around this size. |
367 for (int delta = -5; delta <= 5; ++delta) { | 458 for (int delta = -5; delta <= 5; ++delta) { |
368 string data(capacity + delta, 'A'); | 459 string data(capacity + delta, 'A'); |
369 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 460 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
370 QuicFrame frame; | 461 QuicFrame frame; |
371 size_t bytes_consumed = creator_.CreateStreamFrame( | 462 size_t bytes_consumed = creator_.CreateStreamFrame( |
372 kStreamId, MakeIOVector(data), kOffset, false, &frame); | 463 kStreamId, MakeIOVector(data), kOffset, false, &frame); |
373 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 464 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
374 | 465 |
375 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 466 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
376 // BytesFree() returns bytes available for the next frame, which will | 467 // BytesFree() returns bytes available for the next frame, which will |
377 // be two bytes smaller since the stream frame would need to be grown. | 468 // be two bytes smaller since the stream frame would need to be grown. |
378 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); | 469 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); |
379 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; | 470 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; |
380 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 471 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
381 SerializedPacket serialized_packet = creator_.SerializePacket(); | 472 SerializedPacket serialized_packet = creator_.SerializePacket(); |
382 ASSERT_TRUE(serialized_packet.packet); | 473 ASSERT_TRUE(serialized_packet.packet); |
383 delete serialized_packet.packet; | 474 delete serialized_packet.packet; |
384 delete serialized_packet.retransmittable_frames; | 475 delete serialized_packet.retransmittable_frames; |
385 } | 476 } |
386 } | 477 } |
387 | 478 |
388 TEST_F(QuicPacketCreatorTest, StreamFrameConsumptionInFecProtectedPacket) { | 479 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { |
| 480 if (GetParam().version == QUIC_VERSION_13) { |
| 481 // Test below tests behavior with version 13. |
| 482 return; |
| 483 } |
389 // Turn on FEC protection. | 484 // Turn on FEC protection. |
390 creator_.options()->max_packets_per_fec_group = 6; | 485 creator_.options()->max_packets_per_fec_group = 6; |
391 // Compute the total overhead for a single frame in packet. | 486 // Compute the total overhead for a single frame in packet. |
392 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) | 487 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) |
393 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); | 488 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); |
394 size_t capacity = kDefaultMaxPacketSize - overhead; | 489 size_t capacity = kDefaultMaxPacketSize - overhead; |
395 // Now, test various sizes around this size. | 490 // Now, test various sizes around this size. |
396 for (int delta = -5; delta <= 5; ++delta) { | 491 for (int delta = -5; delta <= 5; ++delta) { |
397 string data(capacity + delta, 'A'); | 492 string data(capacity + delta, 'A'); |
398 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 493 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
399 QuicFrame frame; | 494 QuicFrame frame; |
400 size_t bytes_consumed = creator_.CreateStreamFrame( | 495 size_t bytes_consumed = creator_.CreateStreamFrame( |
401 kStreamId, MakeIOVector(data), kOffset, false, &frame); | 496 kStreamId, MakeIOVector(data), kOffset, false, &frame); |
402 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 497 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
403 | 498 |
404 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 499 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
405 // BytesFree() returns bytes available for the next frame. Since stream | 500 // BytesFree() returns bytes available for the next frame. Since stream |
406 // frame does not grow for FEC protected packets, this should be the same | 501 // frame does not grow for FEC protected packets, this should be the same |
407 // as bytes_free (bound by 0). | 502 // as bytes_free (bound by 0). |
408 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); | 503 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); |
409 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; | 504 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; |
410 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 505 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
411 SerializedPacket serialized_packet = creator_.SerializePacket(); | 506 SerializedPacket serialized_packet = creator_.SerializePacket(); |
412 ASSERT_TRUE(serialized_packet.packet); | 507 ASSERT_TRUE(serialized_packet.packet); |
413 delete serialized_packet.packet; | 508 delete serialized_packet.packet; |
414 delete serialized_packet.retransmittable_frames; | 509 delete serialized_packet.retransmittable_frames; |
415 } | 510 } |
416 } | 511 } |
417 | 512 |
418 TEST_F(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { | 513 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFecOnlyVersion13) { |
| 514 if (GetParam().version != QUIC_VERSION_13) { |
| 515 return; |
| 516 } |
| 517 // Turn on FEC protection. Behavior should be exactly the same as if FEC was |
| 518 // NOT turned on. This test is the same as StreamFrameConsumption above. |
| 519 creator_.options()->max_packets_per_fec_group = 6; |
419 // Compute the total overhead for a single frame in packet. | 520 // Compute the total overhead for a single frame in packet. |
420 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 521 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
421 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 522 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 523 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 524 // Now, test various sizes around this size. |
| 525 for (int delta = -5; delta <= 5; ++delta) { |
| 526 string data(capacity + delta, 'A'); |
| 527 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 528 QuicFrame frame; |
| 529 size_t bytes_consumed = creator_.CreateStreamFrame( |
| 530 kStreamId, MakeIOVector(data), kOffset, false, &frame); |
| 531 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 532 |
| 533 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 534 // BytesFree() returns bytes available for the next frame, which will |
| 535 // be two bytes smaller since the stream frame would need to be grown. |
| 536 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); |
| 537 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; |
| 538 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
| 539 SerializedPacket serialized_packet = creator_.SerializePacket(); |
| 540 ASSERT_TRUE(serialized_packet.packet); |
| 541 delete serialized_packet.packet; |
| 542 delete serialized_packet.retransmittable_frames; |
| 543 } |
| 544 } |
| 545 |
| 546 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { |
| 547 // Compute the total overhead for a single frame in packet. |
| 548 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 549 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
422 ASSERT_GT(kMaxPacketSize, overhead); | 550 ASSERT_GT(kMaxPacketSize, overhead); |
423 size_t capacity = kDefaultMaxPacketSize - overhead; | 551 size_t capacity = kDefaultMaxPacketSize - overhead; |
424 // Now, test various sizes around this size. | 552 // Now, test various sizes around this size. |
425 for (int delta = -5; delta <= 5; ++delta) { | 553 for (int delta = -5; delta <= 5; ++delta) { |
426 string data(capacity + delta, 'A'); | 554 string data(capacity + delta, 'A'); |
427 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 555 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
428 | 556 |
429 QuicFrame frame; | 557 QuicFrame frame; |
430 size_t bytes_consumed = creator_.CreateStreamFrame( | 558 size_t bytes_consumed = creator_.CreateStreamFrame( |
431 kStreamId, MakeIOVector(data), kOffset, false, &frame); | 559 kStreamId, MakeIOVector(data), kOffset, false, &frame); |
432 EXPECT_LT(0u, bytes_consumed); | 560 EXPECT_LT(0u, bytes_consumed); |
433 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 561 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
434 SerializedPacket serialized_packet = creator_.SerializePacket(); | 562 SerializedPacket serialized_packet = creator_.SerializePacket(); |
435 ASSERT_TRUE(serialized_packet.packet); | 563 ASSERT_TRUE(serialized_packet.packet); |
436 // If there is not enough space in the packet to fit a padding frame | 564 // If there is not enough space in the packet to fit a padding frame |
437 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 565 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
438 // will not be padded. | 566 // will not be padded. |
439 if (bytes_free < 3) { | 567 if (bytes_free < 3) { |
440 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) | 568 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) |
441 - bytes_free, serialized_packet.packet->length()); | 569 - bytes_free, serialized_packet.packet->length()); |
442 } else { | 570 } else { |
443 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 571 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), |
444 serialized_packet.packet->length()); | 572 serialized_packet.packet->length()); |
445 } | 573 } |
446 delete serialized_packet.packet; | 574 delete serialized_packet.packet; |
447 delete serialized_packet.retransmittable_frames; | 575 delete serialized_packet.retransmittable_frames; |
448 } | 576 } |
449 } | 577 } |
450 | 578 |
451 TEST_F(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { | 579 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { |
452 // Compute the total overhead for a single frame in packet. | 580 // Compute the total overhead for a single frame in packet. |
453 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 581 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
454 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 582 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
455 ASSERT_GT(kDefaultMaxPacketSize, overhead); | 583 ASSERT_GT(kDefaultMaxPacketSize, overhead); |
456 size_t capacity = kDefaultMaxPacketSize - overhead; | 584 size_t capacity = kDefaultMaxPacketSize - overhead; |
457 // Now, test various sizes around this size. | 585 // Now, test various sizes around this size. |
458 for (int delta = -5; delta <= 5; ++delta) { | 586 for (int delta = -5; delta <= 5; ++delta) { |
459 string data(capacity + delta, 'A'); | 587 string data(capacity + delta, 'A'); |
460 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 588 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
461 | 589 |
462 QuicFrame frame; | 590 QuicFrame frame; |
463 size_t bytes_consumed = creator_.CreateStreamFrame( | 591 size_t bytes_consumed = creator_.CreateStreamFrame( |
464 kStreamId + 2, MakeIOVector(data), kOffset, false, &frame); | 592 kStreamId + 2, MakeIOVector(data), kOffset, false, &frame); |
465 EXPECT_LT(0u, bytes_consumed); | 593 EXPECT_LT(0u, bytes_consumed); |
466 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 594 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
467 SerializedPacket serialized_packet = creator_.SerializePacket(); | 595 SerializedPacket serialized_packet = creator_.SerializePacket(); |
468 ASSERT_TRUE(serialized_packet.packet); | 596 ASSERT_TRUE(serialized_packet.packet); |
469 if (bytes_free > 0) { | 597 if (bytes_free > 0) { |
470 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) | 598 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) |
471 - bytes_free, serialized_packet.packet->length()); | 599 - bytes_free, serialized_packet.packet->length()); |
472 } else { | 600 } else { |
473 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), | 601 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), |
474 serialized_packet.packet->length()); | 602 serialized_packet.packet->length()); |
475 } | 603 } |
476 delete serialized_packet.packet; | 604 delete serialized_packet.packet; |
477 delete serialized_packet.retransmittable_frames; | 605 delete serialized_packet.retransmittable_frames; |
478 } | 606 } |
479 } | 607 } |
480 | 608 |
481 TEST_F(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { | 609 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { |
482 QuicPacketCreatorPeer::SetIsServer(&creator_, true); | 610 QuicPacketCreatorPeer::SetIsServer(&creator_, true); |
483 QuicVersionVector versions; | 611 QuicVersionVector versions; |
484 versions.push_back(test::QuicVersionMax()); | 612 versions.push_back(test::QuicVersionMax()); |
485 scoped_ptr<QuicEncryptedPacket> encrypted( | 613 scoped_ptr<QuicEncryptedPacket> encrypted( |
486 creator_.SerializeVersionNegotiationPacket(versions)); | 614 creator_.SerializeVersionNegotiationPacket(versions)); |
487 | 615 |
488 { | 616 { |
489 InSequence s; | 617 InSequence s; |
490 EXPECT_CALL(framer_visitor_, OnPacket()); | 618 EXPECT_CALL(framer_visitor_, OnPacket()); |
491 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 619 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
492 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); | 620 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); |
493 } | 621 } |
494 client_framer_.ProcessPacket(*encrypted.get()); | 622 client_framer_.ProcessPacket(*encrypted.get()); |
495 } | 623 } |
496 | 624 |
497 TEST_F(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { | 625 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { |
498 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 626 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
499 creator_.options()->send_sequence_number_length); | 627 creator_.options()->send_sequence_number_length); |
500 | 628 |
501 creator_.set_sequence_number(64); | 629 creator_.set_sequence_number(64); |
502 creator_.UpdateSequenceNumberLength(2, 10000); | 630 creator_.UpdateSequenceNumberLength(2, 10000); |
503 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 631 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
504 creator_.options()->send_sequence_number_length); | 632 creator_.options()->send_sequence_number_length); |
505 | 633 |
506 creator_.set_sequence_number(64 * 256); | 634 creator_.set_sequence_number(64 * 256); |
507 creator_.UpdateSequenceNumberLength(2, 10000); | 635 creator_.UpdateSequenceNumberLength(2, 10000); |
508 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, | 636 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, |
509 creator_.options()->send_sequence_number_length); | 637 creator_.options()->send_sequence_number_length); |
510 | 638 |
511 creator_.set_sequence_number(64 * 256 * 256); | 639 creator_.set_sequence_number(64 * 256 * 256); |
512 creator_.UpdateSequenceNumberLength(2, 10000); | 640 creator_.UpdateSequenceNumberLength(2, 10000); |
513 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, | 641 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, |
514 creator_.options()->send_sequence_number_length); | 642 creator_.options()->send_sequence_number_length); |
515 | 643 |
516 creator_.set_sequence_number(GG_UINT64_C(64) * 256 * 256 * 256 * 256); | 644 creator_.set_sequence_number(GG_UINT64_C(64) * 256 * 256 * 256 * 256); |
517 creator_.UpdateSequenceNumberLength(2, 10000); | 645 creator_.UpdateSequenceNumberLength(2, 10000); |
518 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, | 646 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, |
519 creator_.options()->send_sequence_number_length); | 647 creator_.options()->send_sequence_number_length); |
520 } | 648 } |
521 | 649 |
522 TEST_F(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { | 650 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { |
523 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 651 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
524 creator_.options()->send_sequence_number_length); | 652 creator_.options()->send_sequence_number_length); |
525 | 653 |
526 creator_.UpdateSequenceNumberLength(1, 10000); | 654 creator_.UpdateSequenceNumberLength(1, 10000); |
527 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 655 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
528 creator_.options()->send_sequence_number_length); | 656 creator_.options()->send_sequence_number_length); |
529 | 657 |
530 creator_.UpdateSequenceNumberLength(1, 10000 * 256); | 658 creator_.UpdateSequenceNumberLength(1, 10000 * 256); |
531 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, | 659 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, |
532 creator_.options()->send_sequence_number_length); | 660 creator_.options()->send_sequence_number_length); |
533 | 661 |
534 creator_.UpdateSequenceNumberLength(1, 10000 * 256 * 256); | 662 creator_.UpdateSequenceNumberLength(1, 10000 * 256 * 256); |
535 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, | 663 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, |
536 creator_.options()->send_sequence_number_length); | 664 creator_.options()->send_sequence_number_length); |
537 | 665 |
538 creator_.UpdateSequenceNumberLength( | 666 creator_.UpdateSequenceNumberLength( |
539 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256); | 667 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256); |
540 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, | 668 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, |
541 creator_.options()->send_sequence_number_length); | 669 creator_.options()->send_sequence_number_length); |
542 } | 670 } |
543 | 671 |
544 TEST_F(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) { | 672 TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) { |
545 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only | 673 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only |
546 // frame) then any QuicAckNotifier that is passed in still gets attached to | 674 // frame) then any QuicAckNotifier that is passed in still gets attached to |
547 // the frame. | 675 // the frame. |
548 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); | 676 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); |
549 QuicAckNotifier notifier(delegate.get()); | 677 QuicAckNotifier notifier(delegate.get()); |
550 QuicFrame frame; | 678 QuicFrame frame; |
551 IOVector empty_iovector; | 679 IOVector empty_iovector; |
552 bool fin = true; | 680 bool fin = true; |
553 size_t consumed_bytes = creator_.CreateStreamFrameWithNotifier( | 681 size_t consumed_bytes = creator_.CreateStreamFrameWithNotifier( |
554 1u, empty_iovector, 0u, fin, ¬ifier, &frame); | 682 1u, empty_iovector, 0u, fin, ¬ifier, &frame); |
555 EXPECT_EQ(0u, consumed_bytes); | 683 EXPECT_EQ(0u, consumed_bytes); |
556 EXPECT_EQ(¬ifier, frame.stream_frame->notifier); | 684 EXPECT_EQ(¬ifier, frame.stream_frame->notifier); |
557 delete frame.stream_frame; | 685 delete frame.stream_frame; |
558 } | 686 } |
559 | 687 |
560 INSTANTIATE_TEST_CASE_P(ToggleVersionSerialization, | |
561 QuicPacketCreatorTest, | |
562 ::testing::Values(false, true)); | |
563 | |
564 TEST_P(QuicPacketCreatorTest, SerializeFrame) { | 688 TEST_P(QuicPacketCreatorTest, SerializeFrame) { |
565 if (!GetParam()) { | 689 if (!GetParam().version_serialization) { |
566 creator_.StopSendingVersion(); | 690 creator_.StopSendingVersion(); |
567 } | 691 } |
568 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 692 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
569 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 693 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
570 delete frames_[0].stream_frame; | 694 delete frames_[0].stream_frame; |
571 | 695 |
572 QuicPacketHeader header; | 696 QuicPacketHeader header; |
573 { | 697 { |
574 InSequence s; | 698 InSequence s; |
575 EXPECT_CALL(framer_visitor_, OnPacket()); | 699 EXPECT_CALL(framer_visitor_, OnPacket()); |
576 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 700 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
577 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 701 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
578 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( | 702 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( |
579 DoAll(SaveArg<0>(&header), Return(true))); | 703 DoAll(SaveArg<0>(&header), Return(true))); |
580 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 704 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
581 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 705 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
582 } | 706 } |
583 ProcessPacket(serialized.packet); | 707 ProcessPacket(serialized.packet); |
584 EXPECT_EQ(GetParam(), header.public_header.version_flag); | 708 EXPECT_EQ(GetParam().version_serialization, |
| 709 header.public_header.version_flag); |
585 delete serialized.packet; | 710 delete serialized.packet; |
586 } | 711 } |
587 | 712 |
588 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { | 713 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { |
589 if (!GetParam()) { | 714 if (!GetParam().version_serialization) { |
590 creator_.StopSendingVersion(); | 715 creator_.StopSendingVersion(); |
591 } | 716 } |
592 // A string larger than fits into a frame. | 717 // A string larger than fits into a frame. |
593 size_t payload_length; | 718 size_t payload_length; |
594 creator_.options()->max_packet_length = GetPacketLengthForOneStream( | 719 creator_.options()->max_packet_length = GetPacketLengthForOneStream( |
595 client_framer_.version(), | 720 client_framer_.version(), |
596 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 721 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
597 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP, &payload_length); | 722 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP, &payload_length); |
598 QuicFrame frame; | 723 QuicFrame frame; |
599 const string too_long_payload(payload_length * 2, 'a'); | 724 const string too_long_payload(payload_length * 2, 'a'); |
600 size_t consumed = creator_.CreateStreamFrame( | 725 size_t consumed = creator_.CreateStreamFrame( |
601 1u, MakeIOVector(too_long_payload), 0u, true, &frame); | 726 1u, MakeIOVector(too_long_payload), 0u, true, &frame); |
602 EXPECT_EQ(payload_length, consumed); | 727 EXPECT_EQ(payload_length, consumed); |
603 const string payload(payload_length, 'a'); | 728 const string payload(payload_length, 'a'); |
604 CheckStreamFrame(frame, 1u, payload, 0u, false); | 729 CheckStreamFrame(frame, 1u, payload, 0u, false); |
605 delete frame.stream_frame; | 730 delete frame.stream_frame; |
606 } | 731 } |
607 | 732 |
608 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { | 733 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { |
609 if (!GetParam()) { | 734 if (!GetParam().version_serialization) { |
610 creator_.StopSendingVersion(); | 735 creator_.StopSendingVersion(); |
611 } | 736 } |
612 const size_t max_plaintext_size = | 737 const size_t max_plaintext_size = |
613 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); | 738 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); |
614 EXPECT_FALSE(creator_.HasPendingFrames()); | 739 EXPECT_FALSE(creator_.HasPendingFrames()); |
615 EXPECT_EQ(max_plaintext_size - | 740 EXPECT_EQ(max_plaintext_size - |
616 GetPacketHeaderSize( | 741 GetPacketHeaderSize( |
617 creator_.options()->send_connection_id_length, | 742 creator_.options()->send_connection_id_length, |
618 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 743 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
619 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 744 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 EXPECT_FALSE(creator_.HasPendingFrames()); | 783 EXPECT_FALSE(creator_.HasPendingFrames()); |
659 EXPECT_EQ(max_plaintext_size - | 784 EXPECT_EQ(max_plaintext_size - |
660 GetPacketHeaderSize( | 785 GetPacketHeaderSize( |
661 creator_.options()->send_connection_id_length, | 786 creator_.options()->send_connection_id_length, |
662 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 787 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
663 PACKET_1BYTE_SEQUENCE_NUMBER, | 788 PACKET_1BYTE_SEQUENCE_NUMBER, |
664 NOT_IN_FEC_GROUP), | 789 NOT_IN_FEC_GROUP), |
665 creator_.BytesFree()); | 790 creator_.BytesFree()); |
666 } | 791 } |
667 | 792 |
668 TEST_F(QuicPacketCreatorTest, EntropyFlag) { | 793 TEST_P(QuicPacketCreatorTest, EntropyFlag) { |
669 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 794 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
670 | 795 |
671 for (int i = 0; i < 2; ++i) { | 796 for (int i = 0; i < 2; ++i) { |
672 for (int j = 0; j < 64; ++j) { | 797 for (int j = 0; j < 64; ++j) { |
673 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 798 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
674 // Verify both BoolSource and hash algorithm. | 799 // Verify both BoolSource and hash algorithm. |
675 bool expected_rand_bool = | 800 bool expected_rand_bool = |
676 (mock_random_.RandUint64() & (GG_UINT64_C(1) << j)) != 0; | 801 (mock_random_.RandUint64() & (GG_UINT64_C(1) << j)) != 0; |
677 bool observed_rand_bool = | 802 bool observed_rand_bool = |
678 (serialized.entropy_hash & (1 << ((j+1) % 8))) != 0; | 803 (serialized.entropy_hash & (1 << ((j+1) % 8))) != 0; |
679 uint8 rest_of_hash = serialized.entropy_hash & ~(1 << ((j+1) % 8)); | 804 uint8 rest_of_hash = serialized.entropy_hash & ~(1 << ((j+1) % 8)); |
680 EXPECT_EQ(expected_rand_bool, observed_rand_bool); | 805 EXPECT_EQ(expected_rand_bool, observed_rand_bool); |
681 EXPECT_EQ(0, rest_of_hash); | 806 EXPECT_EQ(0, rest_of_hash); |
682 delete serialized.packet; | 807 delete serialized.packet; |
683 } | 808 } |
684 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 809 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
685 mock_random_.ChangeValue(); | 810 mock_random_.ChangeValue(); |
686 } | 811 } |
687 | 812 |
688 delete frames_[0].stream_frame; | 813 delete frames_[0].stream_frame; |
689 } | 814 } |
690 | 815 |
691 } // namespace | 816 } // namespace |
692 } // namespace test | 817 } // namespace test |
693 } // namespace net | 818 } // namespace net |
OLD | NEW |