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

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

Issue 420313005: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0723
Patch Set: change QUIC packet size to 1350 Created 6 years, 4 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
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_stream_sequencer.h" 5 #include "net/quic/quic_stream_sequencer.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 return false; 99 return false;
100 } 100 }
101 if (memcmp(iovec.iov_base, expected.data(), expected.length()) != 0) { 101 if (memcmp(iovec.iov_base, expected.data(), expected.length()) != 0) {
102 LOG(ERROR) << "Invalid data: " << static_cast<char*>(iovec.iov_base) 102 LOG(ERROR) << "Invalid data: " << static_cast<char*>(iovec.iov_base)
103 << " vs " << expected.data(); 103 << " vs " << expected.data();
104 return false; 104 return false;
105 } 105 }
106 return true; 106 return true;
107 } 107 }
108 108
109 bool OnFinFrame(QuicStreamOffset byte_offset, const char* data) { 109 void OnFinFrame(QuicStreamOffset byte_offset, const char* data) {
110 QuicStreamFrame frame; 110 QuicStreamFrame frame;
111 frame.stream_id = 1; 111 frame.stream_id = 1;
112 frame.offset = byte_offset; 112 frame.offset = byte_offset;
113 frame.data.Append(const_cast<char*>(data), strlen(data)); 113 frame.data.Append(const_cast<char*>(data), strlen(data));
114 frame.fin = true; 114 frame.fin = true;
115 return sequencer_->OnStreamFrame(frame); 115 sequencer_->OnStreamFrame(frame);
116 } 116 }
117 117
118 bool OnFrame(QuicStreamOffset byte_offset, const char* data) { 118 void OnFrame(QuicStreamOffset byte_offset, const char* data) {
119 QuicStreamFrame frame; 119 QuicStreamFrame frame;
120 frame.stream_id = 1; 120 frame.stream_id = 1;
121 frame.offset = byte_offset; 121 frame.offset = byte_offset;
122 frame.data.Append(const_cast<char*>(data), strlen(data)); 122 frame.data.Append(const_cast<char*>(data), strlen(data));
123 frame.fin = false; 123 frame.fin = false;
124 return sequencer_->OnStreamFrame(frame); 124 sequencer_->OnStreamFrame(frame);
125 } 125 }
126 126
127 MockConnection* connection_; 127 MockConnection* connection_;
128 MockSession session_; 128 MockSession session_;
129 testing::StrictMock<MockStream> stream_; 129 testing::StrictMock<MockStream> stream_;
130 scoped_ptr<QuicStreamSequencer> sequencer_; 130 scoped_ptr<QuicStreamSequencer> sequencer_;
131 map<QuicStreamOffset, string>* buffered_frames_; 131 map<QuicStreamOffset, string>* buffered_frames_;
132 }; 132 };
133 133
134 TEST_F(QuicStreamSequencerTest, RejectOldFrame) { 134 TEST_F(QuicStreamSequencerTest, RejectOldFrame) {
135 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 135 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
136 136
137 EXPECT_TRUE(OnFrame(0, "abc")); 137 OnFrame(0, "abc");
138 EXPECT_EQ(0u, buffered_frames_->size()); 138 EXPECT_EQ(0u, buffered_frames_->size());
139 EXPECT_EQ(3u, sequencer_->num_bytes_consumed()); 139 EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
140 // Ignore this - it matches a past sequence number and we should not see it 140 // Ignore this - it matches a past sequence number and we should not see it
141 // again. 141 // again.
142 EXPECT_TRUE(OnFrame(0, "def")); 142 OnFrame(0, "def");
143 EXPECT_EQ(0u, buffered_frames_->size()); 143 EXPECT_EQ(0u, buffered_frames_->size());
144 } 144 }
145 145
146 TEST_F(QuicStreamSequencerTest, RejectBufferedFrame) { 146 TEST_F(QuicStreamSequencerTest, RejectBufferedFrame) {
147 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)); 147 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3));
148 148
149 EXPECT_TRUE(OnFrame(0, "abc")); 149 OnFrame(0, "abc");
150 EXPECT_EQ(1u, buffered_frames_->size()); 150 EXPECT_EQ(1u, buffered_frames_->size());
151 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 151 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
152 // Ignore this - it matches a buffered frame. 152 // Ignore this - it matches a buffered frame.
153 // Right now there's no checking that the payload is consistent. 153 // Right now there's no checking that the payload is consistent.
154 EXPECT_TRUE(OnFrame(0, "def")); 154 OnFrame(0, "def");
155 EXPECT_EQ(1u, buffered_frames_->size()); 155 EXPECT_EQ(1u, buffered_frames_->size());
156 } 156 }
157 157
158 TEST_F(QuicStreamSequencerTest, FullFrameConsumed) { 158 TEST_F(QuicStreamSequencerTest, FullFrameConsumed) {
159 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 159 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
160 160
161 EXPECT_TRUE(OnFrame(0, "abc")); 161 OnFrame(0, "abc");
162 EXPECT_EQ(0u, buffered_frames_->size()); 162 EXPECT_EQ(0u, buffered_frames_->size());
163 EXPECT_EQ(3u, sequencer_->num_bytes_consumed()); 163 EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
164 } 164 }
165 165
166 TEST_F(QuicStreamSequencerTest, BlockedThenFullFrameConsumed) { 166 TEST_F(QuicStreamSequencerTest, BlockedThenFullFrameConsumed) {
167 sequencer_->SetBlockedUntilFlush(); 167 sequencer_->SetBlockedUntilFlush();
168 168
169 EXPECT_TRUE(OnFrame(0, "abc")); 169 OnFrame(0, "abc");
170 EXPECT_EQ(1u, buffered_frames_->size()); 170 EXPECT_EQ(1u, buffered_frames_->size());
171 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 171 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
172 172
173 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 173 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
174 sequencer_->FlushBufferedFrames(); 174 sequencer_->FlushBufferedFrames();
175 EXPECT_EQ(0u, buffered_frames_->size()); 175 EXPECT_EQ(0u, buffered_frames_->size());
176 EXPECT_EQ(3u, sequencer_->num_bytes_consumed()); 176 EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
177 177
178 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3)); 178 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3));
179 EXPECT_CALL(stream_, OnFinRead()); 179 EXPECT_CALL(stream_, OnFinRead());
180 EXPECT_TRUE(OnFinFrame(3, "def")); 180 OnFinFrame(3, "def");
181 } 181 }
182 182
183 TEST_F(QuicStreamSequencerTest, BlockedThenFullFrameAndFinConsumed) { 183 TEST_F(QuicStreamSequencerTest, BlockedThenFullFrameAndFinConsumed) {
184 sequencer_->SetBlockedUntilFlush(); 184 sequencer_->SetBlockedUntilFlush();
185 185
186 EXPECT_TRUE(OnFinFrame(0, "abc")); 186 OnFinFrame(0, "abc");
187 EXPECT_EQ(1u, buffered_frames_->size()); 187 EXPECT_EQ(1u, buffered_frames_->size());
188 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 188 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
189 189
190 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 190 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
191 EXPECT_CALL(stream_, OnFinRead()); 191 EXPECT_CALL(stream_, OnFinRead());
192 sequencer_->FlushBufferedFrames(); 192 sequencer_->FlushBufferedFrames();
193 EXPECT_EQ(0u, buffered_frames_->size()); 193 EXPECT_EQ(0u, buffered_frames_->size());
194 EXPECT_EQ(3u, sequencer_->num_bytes_consumed()); 194 EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
195 } 195 }
196 196
197 TEST_F(QuicStreamSequencerTest, EmptyFrame) { 197 TEST_F(QuicStreamSequencerTest, EmptyFrame) {
198 EXPECT_CALL(stream_, 198 EXPECT_CALL(stream_,
199 CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)); 199 CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _));
200 EXPECT_FALSE(OnFrame(0, "")); 200 OnFrame(0, "");
201 EXPECT_EQ(0u, buffered_frames_->size()); 201 EXPECT_EQ(0u, buffered_frames_->size());
202 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 202 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
203 } 203 }
204 204
205 TEST_F(QuicStreamSequencerTest, EmptyFinFrame) { 205 TEST_F(QuicStreamSequencerTest, EmptyFinFrame) {
206 EXPECT_CALL(stream_, OnFinRead()); 206 EXPECT_CALL(stream_, OnFinRead());
207 EXPECT_TRUE(OnFinFrame(0, "")); 207 OnFinFrame(0, "");
208 EXPECT_EQ(0u, buffered_frames_->size()); 208 EXPECT_EQ(0u, buffered_frames_->size());
209 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 209 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
210 } 210 }
211 211
212 TEST_F(QuicStreamSequencerTest, PartialFrameConsumed) { 212 TEST_F(QuicStreamSequencerTest, PartialFrameConsumed) {
213 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(2)); 213 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(2));
214 214
215 EXPECT_TRUE(OnFrame(0, "abc")); 215 OnFrame(0, "abc");
216 EXPECT_EQ(1u, buffered_frames_->size()); 216 EXPECT_EQ(1u, buffered_frames_->size());
217 EXPECT_EQ(2u, sequencer_->num_bytes_consumed()); 217 EXPECT_EQ(2u, sequencer_->num_bytes_consumed());
218 EXPECT_EQ("c", buffered_frames_->find(2)->second); 218 EXPECT_EQ("c", buffered_frames_->find(2)->second);
219 } 219 }
220 220
221 TEST_F(QuicStreamSequencerTest, NextxFrameNotConsumed) { 221 TEST_F(QuicStreamSequencerTest, NextxFrameNotConsumed) {
222 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0)); 222 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0));
223 223
224 EXPECT_TRUE(OnFrame(0, "abc")); 224 OnFrame(0, "abc");
225 EXPECT_EQ(1u, buffered_frames_->size()); 225 EXPECT_EQ(1u, buffered_frames_->size());
226 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 226 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
227 EXPECT_EQ("abc", buffered_frames_->find(0)->second); 227 EXPECT_EQ("abc", buffered_frames_->find(0)->second);
228 } 228 }
229 229
230 TEST_F(QuicStreamSequencerTest, FutureFrameNotProcessed) { 230 TEST_F(QuicStreamSequencerTest, FutureFrameNotProcessed) {
231 EXPECT_TRUE(OnFrame(3, "abc")); 231 OnFrame(3, "abc");
232 EXPECT_EQ(1u, buffered_frames_->size()); 232 EXPECT_EQ(1u, buffered_frames_->size());
233 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 233 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
234 EXPECT_EQ("abc", buffered_frames_->find(3)->second); 234 EXPECT_EQ("abc", buffered_frames_->find(3)->second);
235 } 235 }
236 236
237 TEST_F(QuicStreamSequencerTest, OutOfOrderFrameProcessed) { 237 TEST_F(QuicStreamSequencerTest, OutOfOrderFrameProcessed) {
238 // Buffer the first 238 // Buffer the first
239 EXPECT_TRUE(OnFrame(6, "ghi")); 239 OnFrame(6, "ghi");
240 EXPECT_EQ(1u, buffered_frames_->size()); 240 EXPECT_EQ(1u, buffered_frames_->size());
241 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 241 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
242 EXPECT_EQ(3u, sequencer_->num_bytes_buffered()); 242 EXPECT_EQ(3u, sequencer_->num_bytes_buffered());
243 // Buffer the second 243 // Buffer the second
244 EXPECT_TRUE(OnFrame(3, "def")); 244 OnFrame(3, "def");
245 EXPECT_EQ(2u, buffered_frames_->size()); 245 EXPECT_EQ(2u, buffered_frames_->size());
246 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); 246 EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
247 EXPECT_EQ(6u, sequencer_->num_bytes_buffered()); 247 EXPECT_EQ(6u, sequencer_->num_bytes_buffered());
248 248
249 InSequence s; 249 InSequence s;
250 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 250 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
251 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3)); 251 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3));
252 EXPECT_CALL(stream_, ProcessRawData(StrEq("ghi"), 3)).WillOnce(Return(3)); 252 EXPECT_CALL(stream_, ProcessRawData(StrEq("ghi"), 3)).WillOnce(Return(3));
253 253
254 // Ack right away 254 // Ack right away
255 EXPECT_TRUE(OnFrame(0, "abc")); 255 OnFrame(0, "abc");
256 EXPECT_EQ(9u, sequencer_->num_bytes_consumed()); 256 EXPECT_EQ(9u, sequencer_->num_bytes_consumed());
257 EXPECT_EQ(0u, sequencer_->num_bytes_buffered()); 257 EXPECT_EQ(0u, sequencer_->num_bytes_buffered());
258 258
259 EXPECT_EQ(0u, buffered_frames_->size()); 259 EXPECT_EQ(0u, buffered_frames_->size());
260 } 260 }
261 261
262 TEST_F(QuicStreamSequencerTest, BasicHalfCloseOrdered) { 262 TEST_F(QuicStreamSequencerTest, BasicHalfCloseOrdered) {
263 InSequence s; 263 InSequence s;
264 264
265 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 265 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
266 EXPECT_CALL(stream_, OnFinRead()); 266 EXPECT_CALL(stream_, OnFinRead());
267 EXPECT_TRUE(OnFinFrame(0, "abc")); 267 OnFinFrame(0, "abc");
268 268
269 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get())); 269 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get()));
270 } 270 }
271 271
272 TEST_F(QuicStreamSequencerTest, BasicHalfCloseUnorderedWithFlush) { 272 TEST_F(QuicStreamSequencerTest, BasicHalfCloseUnorderedWithFlush) {
273 OnFinFrame(6, ""); 273 OnFinFrame(6, "");
274 EXPECT_EQ(6u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get())); 274 EXPECT_EQ(6u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get()));
275 InSequence s; 275 InSequence s;
276 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 276 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
277 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3)); 277 EXPECT_CALL(stream_, ProcessRawData(StrEq("def"), 3)).WillOnce(Return(3));
278 EXPECT_CALL(stream_, OnFinRead()); 278 EXPECT_CALL(stream_, OnFinRead());
279 279
280 EXPECT_TRUE(OnFrame(3, "def")); 280 OnFrame(3, "def");
281 EXPECT_TRUE(OnFrame(0, "abc")); 281 OnFrame(0, "abc");
282 } 282 }
283 283
284 TEST_F(QuicStreamSequencerTest, BasicHalfUnordered) { 284 TEST_F(QuicStreamSequencerTest, BasicHalfUnordered) {
285 OnFinFrame(3, ""); 285 OnFinFrame(3, "");
286 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get())); 286 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get()));
287 InSequence s; 287 InSequence s;
288 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3)); 288 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(3));
289 EXPECT_CALL(stream_, OnFinRead()); 289 EXPECT_CALL(stream_, OnFinRead());
290 290
291 EXPECT_TRUE(OnFrame(0, "abc")); 291 OnFrame(0, "abc");
292 } 292 }
293 293
294 TEST_F(QuicStreamSequencerTest, TerminateWithReadv) { 294 TEST_F(QuicStreamSequencerTest, TerminateWithReadv) {
295 char buffer[3]; 295 char buffer[3];
296 296
297 OnFinFrame(3, ""); 297 OnFinFrame(3, "");
298 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get())); 298 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get()));
299 299
300 EXPECT_FALSE(sequencer_->IsClosed()); 300 EXPECT_FALSE(sequencer_->IsClosed());
301 301
302 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0)); 302 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0));
303 EXPECT_TRUE(OnFrame(0, "abc")); 303 OnFrame(0, "abc");
304 304
305 iovec iov = {&buffer[0], 3}; 305 iovec iov = {&buffer[0], 3};
306 int bytes_read = sequencer_->Readv(&iov, 1); 306 int bytes_read = sequencer_->Readv(&iov, 1);
307 EXPECT_EQ(3, bytes_read); 307 EXPECT_EQ(3, bytes_read);
308 EXPECT_TRUE(sequencer_->IsClosed()); 308 EXPECT_TRUE(sequencer_->IsClosed());
309 } 309 }
310 310
311 TEST_F(QuicStreamSequencerTest, MutipleOffsets) { 311 TEST_F(QuicStreamSequencerTest, MutipleOffsets) {
312 OnFinFrame(3, ""); 312 OnFinFrame(3, "");
313 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get())); 313 EXPECT_EQ(3u, QuicStreamSequencerPeer::GetCloseOffset(sequencer_.get()));
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 InSequence s; 367 InSequence s;
368 for (size_t i = 0; i < list_.size(); ++i) { 368 for (size_t i = 0; i < list_.size(); ++i) {
369 string* data = &list_[i].second; 369 string* data = &list_[i].second;
370 EXPECT_CALL(stream_, ProcessRawData(StrEq(*data), data->size())) 370 EXPECT_CALL(stream_, ProcessRawData(StrEq(*data), data->size()))
371 .WillOnce(Return(data->size())); 371 .WillOnce(Return(data->size()));
372 } 372 }
373 373
374 while (!list_.empty()) { 374 while (!list_.empty()) {
375 int index = OneToN(list_.size()) - 1; 375 int index = OneToN(list_.size()) - 1;
376 LOG(ERROR) << "Sending index " << index << " " << list_[index].second; 376 LOG(ERROR) << "Sending index " << index << " " << list_[index].second;
377 EXPECT_TRUE(OnFrame(list_[index].first, list_[index].second.data())); 377 OnFrame(list_[index].first, list_[index].second.data());
378 378
379 list_.erase(list_.begin() + index); 379 list_.erase(list_.begin() + index);
380 } 380 }
381 } 381 }
382 382
383 TEST_F(QuicStreamSequencerTest, FrameOverlapsBufferedData) { 383 TEST_F(QuicStreamSequencerTest, FrameOverlapsBufferedData) {
384 // Ensure that FrameOverlapsBufferedData returns appropriate responses when 384 // Ensure that FrameOverlapsBufferedData returns appropriate responses when
385 // there is existing data buffered. 385 // there is existing data buffered.
386 386
387 map<QuicStreamOffset, string>* buffered_frames = 387 map<QuicStreamOffset, string>* buffered_frames =
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, MakeIOVector("hello")); 436 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, MakeIOVector("hello"));
437 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData(frame2)); 437 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData(frame2));
438 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) 438 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _))
439 .Times(1); 439 .Times(1);
440 sequencer_->OnStreamFrame(frame2); 440 sequencer_->OnStreamFrame(frame2);
441 } 441 }
442 442
443 } // namespace 443 } // namespace
444 } // namespace test 444 } // namespace test
445 } // namespace net 445 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698