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

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

Issue 6292013: Add chunked uploads support to SPDY (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 9 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/spdy/spdy_http_stream.h" 5 #include "net/spdy/spdy_http_stream.h"
6 #include "net/spdy/spdy_session.h" 6 #include "net/spdy/spdy_session.h"
7 #include "net/spdy/spdy_test_util.h" 7 #include "net/spdy/spdy_test_util.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace net { 10 namespace net {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession(pair)); 86 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession(pair));
87 87
88 // This triggers the MockWrite and read 2 88 // This triggers the MockWrite and read 2
89 callback.WaitForResult(); 89 callback.WaitForResult();
90 90
91 // This triggers read 3. The empty read causes the session to shut down. 91 // This triggers read 3. The empty read causes the session to shut down.
92 data()->CompleteRead(); 92 data()->CompleteRead();
93 93
94 // Because we abandoned the stream, we don't expect to find a session in the 94 // Because we abandoned the stream, we don't expect to find a session in the
95 // pool anymore. 95 // pool anymore.
96 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession(pair)); 96 EXPECT_FALSE(http_session_->spdy_session_pool()->HasSession(pair));
97 EXPECT_TRUE(data()->at_read_eof()); 97 EXPECT_TRUE(data()->at_read_eof());
98 EXPECT_TRUE(data()->at_write_eof()); 98 EXPECT_TRUE(data()->at_write_eof());
99 } 99 }
100
101 TEST_F(SpdyHttpStreamTest, SendChunkedPost) {
willchan no longer on Chromium 2011/03/03 19:47:48 Please add a test where you have multiple chunks.
102 EnableCompression(false);
103 SpdySession::SetSSLMode(false);
104
105 scoped_ptr<spdy::SpdyFrame> req(ConstructChunkedSpdyPost(NULL, 0));
106 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
107 MockWrite writes[] = {
108 CreateMockWrite(*req.get(), 1),
109 CreateMockWrite(*body, 2), // POST upload frame
110 };
111 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
112 MockRead reads[] = {
113 CreateMockRead(*resp, 3),
114 CreateMockRead(*body, 4),
115 MockRead(false, 0, 5) // EOF
116 };
117
118 HostPortPair host_port_pair("www.google.com", 80);
119 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct());
120 EXPECT_EQ(OK, InitSession(reads, arraysize(reads), writes, arraysize(writes),
121 host_port_pair));
122
123 HttpRequestInfo request;
124 request.method = "POST";
125 request.url = GURL("http://www.google.com/");
126 request.upload_data = new UploadData();
127 request.upload_data->set_is_chunked(true);
128 request.upload_data->AppendChunk(kUploadData, kUploadDataSize, true);
129 TestCompletionCallback callback;
130 HttpResponseInfo response;
131 HttpRequestHeaders headers;
132 BoundNetLog net_log;
133 SpdyHttpStream http_stream(session_.get(), true);
134 ASSERT_EQ(
135 OK,
136 http_stream.InitializeStream(&request, net_log, NULL));
137
138 UploadDataStream* upload_stream =
139 UploadDataStream::Create(request.upload_data, NULL);
140 EXPECT_EQ(ERR_IO_PENDING, http_stream.SendRequest(
141 headers, upload_stream, &response, &callback));
142 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession(pair));
143
144 // This triggers the MockWrite and read 2
145 callback.WaitForResult();
146
147 // This triggers read 3. The empty read causes the session to shut down.
148 data()->CompleteRead();
149 MessageLoop::current()->RunAllPending();
150
151 // Because we abandoned the stream, we don't expect to find a session in the
152 // pool anymore.
153 EXPECT_FALSE(http_session_->spdy_session_pool()->HasSession(pair));
154 EXPECT_TRUE(data()->at_read_eof());
155 EXPECT_TRUE(data()->at_write_eof());
156 }
100 157
101 // Test case for bug: http://code.google.com/p/chromium/issues/detail?id=50058 158 // Test case for bug: http://code.google.com/p/chromium/issues/detail?id=50058
102 TEST_F(SpdyHttpStreamTest, SpdyURLTest) { 159 TEST_F(SpdyHttpStreamTest, SpdyURLTest) {
103 EnableCompression(false); 160 EnableCompression(false);
104 SpdySession::SetSSLMode(false); 161 SpdySession::SetSSLMode(false);
105 162
106 const char * const full_url = "http://www.google.com/foo?query=what#anchor"; 163 const char * const full_url = "http://www.google.com/foo?query=what#anchor";
107 const char * const base_url = "http://www.google.com/foo?query=what"; 164 const char * const base_url = "http://www.google.com/foo?query=what";
108 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(base_url, false, 1, LOWEST)); 165 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(base_url, false, 1, LOWEST));
109 MockWrite writes[] = { 166 MockWrite writes[] = {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 FAIL() << "No url is set in spdy_header!"; 201 FAIL() << "No url is set in spdy_header!";
145 202
146 // This triggers the MockWrite and read 2 203 // This triggers the MockWrite and read 2
147 callback.WaitForResult(); 204 callback.WaitForResult();
148 205
149 // This triggers read 3. The empty read causes the session to shut down. 206 // This triggers read 3. The empty read causes the session to shut down.
150 data()->CompleteRead(); 207 data()->CompleteRead();
151 208
152 // Because we abandoned the stream, we don't expect to find a session in the 209 // Because we abandoned the stream, we don't expect to find a session in the
153 // pool anymore. 210 // pool anymore.
154 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession(pair)); 211 EXPECT_FALSE(http_session_->spdy_session_pool()->HasSession(pair));
155 EXPECT_TRUE(data()->at_read_eof()); 212 EXPECT_TRUE(data()->at_read_eof());
156 EXPECT_TRUE(data()->at_write_eof()); 213 EXPECT_TRUE(data()->at_write_eof());
157 } 214 }
158 215
159 // TODO(willchan): Write a longer test for SpdyStream that exercises all 216 // TODO(willchan): Write a longer test for SpdyStream that exercises all
160 // methods. 217 // methods.
161 218
162 } // namespace net 219 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698