Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: net/quic/quic_packet_creator_test.cc

Issue 11958018: Queueing QUIC frames to be resent instead of packets and packing RST frames with acks and congestio… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698