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

Side by Side Diff: net/spdy/spdy_stream_unittest.cc

Issue 1272283003: Add a new SpdyStream::Delegate method to handle trailers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 <cstddef> 5 #include <cstddef>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 data.RunFor(GetNumReads() + GetNumWrites()); 168 data.RunFor(GetNumReads() + GetNumWrites());
169 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 169 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
170 170
171 EXPECT_TRUE(delegate.send_headers_completed()); 171 EXPECT_TRUE(delegate.send_headers_completed());
172 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 172 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
173 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), 173 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
174 delegate.TakeReceivedData()); 174 delegate.TakeReceivedData());
175 EXPECT_TRUE(data.AllWriteDataConsumed()); 175 EXPECT_TRUE(data.AllWriteDataConsumed());
176 } 176 }
177 177
178 // Delegate that receives trailers.
Bence 2015/08/06 15:02:41 Please confirm (at least using a local build) that
xunjieli 2015/08/06 16:10:13 Confirmed that the test failes without the rest of
179 class StreamDelegateWithTrailers : public test::StreamDelegateWithBody {
180 public:
181 StreamDelegateWithTrailers(const base::WeakPtr<SpdyStream>& stream,
182 base::StringPiece data)
183 : StreamDelegateWithBody(stream, data) {}
184
185 ~StreamDelegateWithTrailers() override {}
186
187 void OnTrailers(const SpdyHeaderBlock& trailers) override {
188 trailers_ = trailers;
189 }
190
191 const SpdyHeaderBlock& GetTrailers() { return trailers_; }
192
193 private:
194 SpdyHeaderBlock trailers_;
195 };
196
197 TEST_P(SpdyStreamTest, Trailers) {
198 GURL url(kStreamUrl);
199
200 session_ =
201 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
202
203 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost(
204 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
205 AddWrite(*req);
206
207 scoped_ptr<SpdyFrame> msg(
208 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true));
209 AddWrite(*msg);
210
211 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
212 AddRead(*resp);
213
214 scoped_ptr<SpdyFrame> echo(
215 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
216 AddRead(*echo);
217
218 const char* const kExtraHeaders[] = {"foo", "bar"};
219 scoped_ptr<SpdyFrame> trailers(
220 spdy_util_.ConstructSpdyHeaderFrame(1, kExtraHeaders, 1));
221 AddRead(*trailers);
222
223 AddReadEOF();
224
225 DeterministicSocketData data(GetReads(), GetNumReads(), GetWrites(),
226 GetNumWrites());
227 MockConnect connect_data(SYNCHRONOUS, OK);
228 data.set_connect_data(connect_data);
229
230 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
231
232 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession());
233
234 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
235 SPDY_REQUEST_RESPONSE_STREAM, session, url, LOWEST, BoundNetLog());
236 ASSERT_TRUE(stream.get() != NULL);
237
238 StreamDelegateWithTrailers delegate(stream, kPostBodyStringPiece);
239 stream->SetDelegate(&delegate);
240
241 EXPECT_FALSE(stream->HasUrlFromHeaders());
242
243 scoped_ptr<SpdyHeaderBlock> headers(
244 spdy_util_.ConstructPostHeaderBlock(kStreamUrl, kPostBodyLength));
245 EXPECT_EQ(ERR_IO_PENDING,
246 stream->SendRequestHeaders(headers.Pass(), MORE_DATA_TO_SEND));
247 EXPECT_TRUE(stream->HasUrlFromHeaders());
248 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
249
250 data.RunFor(GetNumReads() + GetNumWrites());
251 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
252
253 EXPECT_TRUE(delegate.send_headers_completed());
254 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
255 const SpdyHeaderBlock& received_trailers = delegate.GetTrailers();
256 SpdyHeaderBlock::const_iterator it = received_trailers.find("foo");
257 EXPECT_EQ("bar", it->second);
258 EXPECT_EQ(std::string(kPostBody, kPostBodyLength),
259 delegate.TakeReceivedData());
260 EXPECT_TRUE(data.AllWriteDataConsumed());
261 }
262
178 TEST_P(SpdyStreamTest, PushedStream) { 263 TEST_P(SpdyStreamTest, PushedStream) {
179 session_ = 264 session_ =
180 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_); 265 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_);
181 266
182 AddReadEOF(); 267 AddReadEOF();
183 268
184 DeterministicSocketData data(GetReads(), GetNumReads(), GetWrites(), 269 DeterministicSocketData data(GetReads(), GetNumReads(), GetWrites(),
185 GetNumWrites()); 270 GetNumWrites());
186 MockConnect connect_data(SYNCHRONOUS, OK); 271 MockConnect connect_data(SYNCHRONOUS, OK);
187 data.set_connect_data(connect_data); 272 data.set_connect_data(connect_data);
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 data.RunFor(1); // FIN 1125 data.RunFor(1); // FIN
1041 1126
1042 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 1127 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
1043 } 1128 }
1044 1129
1045 } // namespace 1130 } // namespace
1046 1131
1047 } // namespace test 1132 } // namespace test
1048 1133
1049 } // namespace net 1134 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698