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

Side by Side Diff: net/tools/quic/quic_spdy_server_stream_test.cc

Issue 335533002: API changes to Write path Session on down for FEC protection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/tools/quic/quic_spdy_server_stream.h" 5 #include "net/tools/quic/quic_spdy_server_stream.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_piece.h" 8 #include "base/strings/string_piece.h"
9 #include "net/quic/quic_connection.h" 9 #include "net/quic/quic_connection.h"
10 #include "net/quic/quic_protocol.h" 10 #include "net/quic/quic_protocol.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 scoped_ptr<QuicSpdyServerStreamPeer> stream_; 139 scoped_ptr<QuicSpdyServerStreamPeer> stream_;
140 string headers_string_; 140 string headers_string_;
141 string body_; 141 string body_;
142 }; 142 };
143 143
144 QuicConsumedData ConsumeAllData( 144 QuicConsumedData ConsumeAllData(
145 QuicStreamId id, 145 QuicStreamId id,
146 const IOVector& data, 146 const IOVector& data,
147 QuicStreamOffset offset, 147 QuicStreamOffset offset,
148 bool fin, 148 bool fin,
149 FecProtection /*fec_protection_*/,
149 QuicAckNotifier::DelegateInterface* /*ack_notifier_delegate*/) { 150 QuicAckNotifier::DelegateInterface* /*ack_notifier_delegate*/) {
150 return QuicConsumedData(data.TotalBufferSize(), fin); 151 return QuicConsumedData(data.TotalBufferSize(), fin);
151 } 152 }
152 153
153 INSTANTIATE_TEST_CASE_P(Tests, QuicSpdyServerStreamTest, 154 INSTANTIATE_TEST_CASE_P(Tests, QuicSpdyServerStreamTest,
154 ::testing::ValuesIn(QuicSupportedVersions())); 155 ::testing::ValuesIn(QuicSupportedVersions()));
155 156
156 TEST_P(QuicSpdyServerStreamTest, TestFraming) { 157 TEST_P(QuicSpdyServerStreamTest, TestFraming) {
157 EXPECT_CALL(session_, WritevData(_, _, _, _, _)).Times(AnyNumber()). 158 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
158 WillRepeatedly(Invoke(ConsumeAllData)); 159 WillRepeatedly(Invoke(ConsumeAllData));
159 160
160 EXPECT_EQ(headers_string_.size(), stream_->ProcessData( 161 EXPECT_EQ(headers_string_.size(), stream_->ProcessData(
161 headers_string_.c_str(), headers_string_.size())); 162 headers_string_.c_str(), headers_string_.size()));
162 EXPECT_EQ(body_.size(), stream_->ProcessData(body_.c_str(), body_.size())); 163 EXPECT_EQ(body_.size(), stream_->ProcessData(body_.c_str(), body_.size()));
163 EXPECT_EQ(11u, StreamHeaders().content_length()); 164 EXPECT_EQ(11u, StreamHeaders().content_length());
164 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri()); 165 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri());
165 EXPECT_EQ("POST", StreamHeaders().request_method()); 166 EXPECT_EQ("POST", StreamHeaders().request_method());
166 EXPECT_EQ(body_, StreamBody()); 167 EXPECT_EQ(body_, StreamBody());
167 } 168 }
168 169
169 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) { 170 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) {
170 EXPECT_CALL(session_, WritevData(_, _, _, _, _)).Times(AnyNumber()). 171 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
171 WillRepeatedly(Invoke(ConsumeAllData)); 172 WillRepeatedly(Invoke(ConsumeAllData));
172 173
173 string message = headers_string_ + body_; 174 string message = headers_string_ + body_;
174 175
175 EXPECT_EQ(message.size(), stream_->ProcessData( 176 EXPECT_EQ(message.size(), stream_->ProcessData(
176 message.c_str(), message.size())); 177 message.c_str(), message.size()));
177 EXPECT_EQ(11u, StreamHeaders().content_length()); 178 EXPECT_EQ(11u, StreamHeaders().content_length());
178 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri()); 179 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri());
179 EXPECT_EQ("POST", StreamHeaders().request_method()); 180 EXPECT_EQ("POST", StreamHeaders().request_method());
180 EXPECT_EQ(body_, StreamBody()); 181 EXPECT_EQ(body_, StreamBody());
181 } 182 }
182 183
183 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) { 184 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) {
184 string large_body = "hello world!!!!!!"; 185 string large_body = "hello world!!!!!!";
185 186
186 // We'll automatically write out an error (headers + body) 187 // We'll automatically write out an error (headers + body)
187 EXPECT_CALL(session_, WritevData(_, _, _, _, _)).Times(AnyNumber()). 188 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
188 WillRepeatedly(Invoke(ConsumeAllData)); 189 WillRepeatedly(Invoke(ConsumeAllData));
189 190
190 EXPECT_EQ(headers_string_.size(), stream_->ProcessData( 191 EXPECT_EQ(headers_string_.size(), stream_->ProcessData(
191 headers_string_.c_str(), headers_string_.size())); 192 headers_string_.c_str(), headers_string_.size()));
192 // Content length is still 11. This will register as an error and we won't 193 // Content length is still 11. This will register as an error and we won't
193 // accept the bytes. 194 // accept the bytes.
194 stream_->ProcessData(large_body.c_str(), large_body.size()); 195 stream_->ProcessData(large_body.c_str(), large_body.size());
195 EXPECT_EQ(11u, StreamHeaders().content_length()); 196 EXPECT_EQ(11u, StreamHeaders().content_length());
196 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri()); 197 EXPECT_EQ("https://www.google.com/", StreamHeaders().request_uri());
197 EXPECT_EQ("POST", StreamHeaders().request_method()); 198 EXPECT_EQ("POST", StreamHeaders().request_method());
198 } 199 }
199 200
200 TEST_P(QuicSpdyServerStreamTest, TestSendResponse) { 201 TEST_P(QuicSpdyServerStreamTest, TestSendResponse) {
201 BalsaHeaders* request_headers = stream_->mutable_headers(); 202 BalsaHeaders* request_headers = stream_->mutable_headers();
202 request_headers->SetRequestFirstlineFromStringPieces( 203 request_headers->SetRequestFirstlineFromStringPieces(
203 "GET", 204 "GET",
204 "https://www.google.com/foo", 205 "https://www.google.com/foo",
205 "HTTP/1.1"); 206 "HTTP/1.1");
206 207
207 response_headers_.SetResponseFirstlineFromStringPieces( 208 response_headers_.SetResponseFirstlineFromStringPieces(
208 "HTTP/1.1", "200", "OK"); 209 "HTTP/1.1", "200", "OK");
209 response_headers_.ReplaceOrAppendHeader("content-length", "3"); 210 response_headers_.ReplaceOrAppendHeader("content-length", "3");
210 211
211 InSequence s; 212 InSequence s;
212 EXPECT_CALL(session_, 213 EXPECT_CALL(session_,
213 WritevData(kHeadersStreamId, _, 0, false, NULL)); 214 WritevData(kHeadersStreamId, _, 0, false, _, NULL));
214 215 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
215
216 EXPECT_CALL(session_, WritevData(_, _, _, _, _)).Times(1).
217 WillOnce(Return(QuicConsumedData(3, true))); 216 WillOnce(Return(QuicConsumedData(3, true)));
218 217
219 QuicSpdyServerStreamPeer::SendResponse(stream_.get()); 218 QuicSpdyServerStreamPeer::SendResponse(stream_.get());
220 EXPECT_TRUE(stream_->read_side_closed()); 219 EXPECT_TRUE(stream_->read_side_closed());
221 EXPECT_TRUE(stream_->write_side_closed()); 220 EXPECT_TRUE(stream_->write_side_closed());
222 } 221 }
223 222
224 TEST_P(QuicSpdyServerStreamTest, TestSendErrorResponse) { 223 TEST_P(QuicSpdyServerStreamTest, TestSendErrorResponse) {
225 response_headers_.SetResponseFirstlineFromStringPieces( 224 response_headers_.SetResponseFirstlineFromStringPieces(
226 "HTTP/1.1", "500", "Server Error"); 225 "HTTP/1.1", "500", "Server Error");
227 response_headers_.ReplaceOrAppendHeader("content-length", "3"); 226 response_headers_.ReplaceOrAppendHeader("content-length", "3");
228 227
229 InSequence s; 228 InSequence s;
230 EXPECT_CALL(session_, 229 EXPECT_CALL(session_,
231 WritevData(kHeadersStreamId, _, 0, false, NULL)); 230 WritevData(kHeadersStreamId, _, 0, false, _, NULL));
232 231 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
233 EXPECT_CALL(session_, WritevData(_, _, _, _, _)).Times(1).
234 WillOnce(Return(QuicConsumedData(3, true))); 232 WillOnce(Return(QuicConsumedData(3, true)));
235 233
236 QuicSpdyServerStreamPeer::SendErrorResponse(stream_.get()); 234 QuicSpdyServerStreamPeer::SendErrorResponse(stream_.get());
237 EXPECT_TRUE(stream_->read_side_closed()); 235 EXPECT_TRUE(stream_->read_side_closed());
238 EXPECT_TRUE(stream_->write_side_closed()); 236 EXPECT_TRUE(stream_->write_side_closed());
239 } 237 }
240 238
241 TEST_P(QuicSpdyServerStreamTest, InvalidHeadersWithFin) { 239 TEST_P(QuicSpdyServerStreamTest, InvalidHeadersWithFin) {
242 char arr[] = { 240 char arr[] = {
243 0x3a, 0x68, 0x6f, 0x73, // :hos 241 0x3a, 0x68, 0x6f, 0x73, // :hos
(...skipping 21 matching lines...) Expand all
265 StringPiece data(arr, arraysize(arr)); 263 StringPiece data(arr, arraysize(arr));
266 QuicStreamFrame frame(stream_->id(), true, 0, MakeIOVector(data)); 264 QuicStreamFrame frame(stream_->id(), true, 0, MakeIOVector(data));
267 // Verify that we don't crash when we get a invalid headers in stream frame. 265 // Verify that we don't crash when we get a invalid headers in stream frame.
268 stream_->OnStreamFrame(frame); 266 stream_->OnStreamFrame(frame);
269 } 267 }
270 268
271 } // namespace 269 } // namespace
272 } // namespace test 270 } // namespace test
273 } // namespace tools 271 } // namespace tools
274 } // namespace net 272 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698