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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 87073: Extend the use of IOBuffers to the code underneath... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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/http/http_network_transaction.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <math.h> // ceil 5 #include <math.h> // ceil
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "net/base/client_socket_factory.h" 8 #include "net/base/client_socket_factory.h"
9 #include "net/base/completion_callback.h" 9 #include "net/base/completion_callback.h"
10 #include "net/base/ssl_client_socket.h" 10 #include "net/base/ssl_client_socket.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 connected_ = false; 114 connected_ = false;
115 callback_ = NULL; 115 callback_ = NULL;
116 } 116 }
117 virtual bool IsConnected() const { 117 virtual bool IsConnected() const {
118 return connected_; 118 return connected_;
119 } 119 }
120 virtual bool IsConnectedAndIdle() const { 120 virtual bool IsConnectedAndIdle() const {
121 return connected_; 121 return connected_;
122 } 122 }
123 // Socket methods: 123 // Socket methods:
124 virtual int Read(char* buf, int buf_len, 124 virtual int Read(IOBuffer* buf, int buf_len,
125 CompletionCallback* callback) = 0; 125 CompletionCallback* callback) = 0;
126 virtual int Write(const char* buf, int buf_len, 126 virtual int Write(IOBuffer* buf, int buf_len,
127 CompletionCallback* callback) = 0; 127 CompletionCallback* callback) = 0;
128 128
129 #if defined(OS_LINUX) 129 #if defined(OS_LINUX)
130 virtual int GetPeerName(struct sockaddr *name, socklen_t *namelen) { 130 virtual int GetPeerName(struct sockaddr *name, socklen_t *namelen) {
131 memset(reinterpret_cast<char *>(name), 0, *namelen); 131 memset(reinterpret_cast<char *>(name), 0, *namelen);
132 return OK; 132 return OK;
133 } 133 }
134 #endif 134 #endif
135 135
136 136
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 return OK; 171 return OK;
172 connected_ = true; 172 connected_ = true;
173 if (data_->connect.async) { 173 if (data_->connect.async) {
174 RunCallbackAsync(callback, data_->connect.result); 174 RunCallbackAsync(callback, data_->connect.result);
175 return ERR_IO_PENDING; 175 return ERR_IO_PENDING;
176 } 176 }
177 return data_->connect.result; 177 return data_->connect.result;
178 } 178 }
179 179
180 // Socket methods: 180 // Socket methods:
181 virtual int Read(char* buf, int buf_len, CompletionCallback* callback) { 181 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback) {
182 DCHECK(!callback_); 182 DCHECK(!callback_);
183 MockRead& r = data_->reads[read_index_]; 183 MockRead& r = data_->reads[read_index_];
184 int result = r.result; 184 int result = r.result;
185 if (r.data) { 185 if (r.data) {
186 if (r.data_len - read_offset_ > 0) { 186 if (r.data_len - read_offset_ > 0) {
187 result = std::min(buf_len, r.data_len - read_offset_); 187 result = std::min(buf_len, r.data_len - read_offset_);
188 memcpy(buf, r.data + read_offset_, result); 188 memcpy(buf->data(), r.data + read_offset_, result);
189 read_offset_ += result; 189 read_offset_ += result;
190 if (read_offset_ == r.data_len) { 190 if (read_offset_ == r.data_len) {
191 read_index_++; 191 read_index_++;
192 read_offset_ = 0; 192 read_offset_ = 0;
193 } 193 }
194 } else { 194 } else {
195 result = 0; // EOF 195 result = 0; // EOF
196 } 196 }
197 } 197 }
198 if (r.async) { 198 if (r.async) {
199 RunCallbackAsync(callback, result); 199 RunCallbackAsync(callback, result);
200 return ERR_IO_PENDING; 200 return ERR_IO_PENDING;
201 } 201 }
202 return result; 202 return result;
203 } 203 }
204 204
205 virtual int Write(const char* buf, int buf_len, 205 virtual int Write(IOBuffer* buf, int buf_len,
206 CompletionCallback* callback) { 206 CompletionCallback* callback) {
207 DCHECK(buf); 207 DCHECK(buf);
208 DCHECK(buf_len > 0); 208 DCHECK(buf_len > 0);
209 DCHECK(!callback_); 209 DCHECK(!callback_);
210 // Not using mock writes; succeed synchronously. 210 // Not using mock writes; succeed synchronously.
211 if (!data_->writes) 211 if (!data_->writes)
212 return buf_len; 212 return buf_len;
213 213
214 // Check that what we are writing matches the expectation. 214 // Check that what we are writing matches the expectation.
215 // Then give the mocked return value. 215 // Then give the mocked return value.
216 MockWrite& w = data_->writes[write_index_++]; 216 MockWrite& w = data_->writes[write_index_++];
217 int result = w.result; 217 int result = w.result;
218 if (w.data) { 218 if (w.data) {
219 std::string expected_data(w.data, w.data_len); 219 std::string expected_data(w.data, w.data_len);
220 std::string actual_data(buf, buf_len); 220 std::string actual_data(buf->data(), buf_len);
221 EXPECT_EQ(expected_data, actual_data); 221 EXPECT_EQ(expected_data, actual_data);
222 if (expected_data != actual_data) 222 if (expected_data != actual_data)
223 return ERR_UNEXPECTED; 223 return ERR_UNEXPECTED;
224 if (result == OK) 224 if (result == OK)
225 result = w.data_len; 225 result = w.data_len;
226 } 226 }
227 if (w.async) { 227 if (w.async) {
228 RunCallbackAsync(callback, result); 228 RunCallbackAsync(callback, result);
229 return ERR_IO_PENDING; 229 return ERR_IO_PENDING;
230 } 230 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 return rv; 303 return rv;
304 } 304 }
305 305
306 virtual void Disconnect() { 306 virtual void Disconnect() {
307 MockClientSocket::Disconnect(); 307 MockClientSocket::Disconnect();
308 if (transport_ != NULL) 308 if (transport_ != NULL)
309 transport_->Disconnect(); 309 transport_->Disconnect();
310 } 310 }
311 311
312 // Socket methods: 312 // Socket methods:
313 virtual int Read(char* buf, int buf_len, CompletionCallback* callback) { 313 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback) {
314 DCHECK(!callback_); 314 DCHECK(!callback_);
315 return transport_->Read(buf, buf_len, callback); 315 return transport_->Read(buf, buf_len, callback);
316 } 316 }
317 317
318 virtual int Write(const char* buf, int buf_len, 318 virtual int Write(IOBuffer* buf, int buf_len,
319 CompletionCallback* callback) { 319 CompletionCallback* callback) {
320 DCHECK(!callback_); 320 DCHECK(!callback_);
321 return transport_->Write(buf, buf_len, callback); 321 return transport_->Write(buf, buf_len, callback);
322 } 322 }
323 323
324 private: 324 private:
325 scoped_ptr<ClientSocket> transport_; 325 scoped_ptr<ClientSocket> transport_;
326 MockSSLSocket* data_; 326 MockSSLSocket* data_;
327 }; 327 };
328 328
(...skipping 2579 matching lines...) Expand 10 before | Expand all | Expand 10 after
2908 } 2908 }
2909 2909
2910 // Test the ResetStateForRestart() private method. 2910 // Test the ResetStateForRestart() private method.
2911 TEST_F(HttpNetworkTransactionTest, ResetStateForRestart) { 2911 TEST_F(HttpNetworkTransactionTest, ResetStateForRestart) {
2912 // Create a transaction (the dependencies aren't important). 2912 // Create a transaction (the dependencies aren't important).
2913 scoped_ptr<ProxyService> proxy_service(CreateNullProxyService()); 2913 scoped_ptr<ProxyService> proxy_service(CreateNullProxyService());
2914 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction( 2914 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(
2915 CreateSession(proxy_service.get()), &mock_socket_factory)); 2915 CreateSession(proxy_service.get()), &mock_socket_factory));
2916 2916
2917 // Setup some state (which we expect ResetStateForRestart() will clear). 2917 // Setup some state (which we expect ResetStateForRestart() will clear).
2918 trans->header_buf_.reset(static_cast<char*>(malloc(10))); 2918 trans->header_buf_->Realloc(10);
2919 trans->header_buf_capacity_ = 10; 2919 trans->header_buf_capacity_ = 10;
2920 trans->header_buf_len_ = 3; 2920 trans->header_buf_len_ = 3;
2921 trans->header_buf_body_offset_ = 11; 2921 trans->header_buf_body_offset_ = 11;
2922 trans->header_buf_http_offset_ = 0; 2922 trans->header_buf_http_offset_ = 0;
2923 trans->response_body_length_ = 100; 2923 trans->response_body_length_ = 100;
2924 trans->response_body_read_ = 1; 2924 trans->response_body_read_ = 1;
2925 trans->read_buf_ = new IOBuffer(15); 2925 trans->read_buf_ = new IOBuffer(15);
2926 trans->read_buf_len_ = 15; 2926 trans->read_buf_len_ = 15;
2927 trans->request_headers_ = "Authorization: NTLM"; 2927 trans->request_headers_->headers_ = "Authorization: NTLM";
2928 trans->request_headers_bytes_sent_ = 3; 2928 trans->request_headers_bytes_sent_ = 3;
2929 2929
2930 // Setup state in response_ 2930 // Setup state in response_
2931 trans->response_.auth_challenge = new AuthChallengeInfo(); 2931 trans->response_.auth_challenge = new AuthChallengeInfo();
2932 trans->response_.ssl_info.cert_status = -15; 2932 trans->response_.ssl_info.cert_status = -15;
2933 trans->response_.response_time = base::Time::Now(); 2933 trans->response_.response_time = base::Time::Now();
2934 trans->response_.was_cached = true; // (Wouldn't ever actually be true...) 2934 trans->response_.was_cached = true; // (Wouldn't ever actually be true...)
2935 2935
2936 { // Setup state for response_.vary_data 2936 { // Setup state for response_.vary_data
2937 HttpRequestInfo request; 2937 HttpRequestInfo request;
2938 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n"); 2938 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n");
2939 std::replace(temp.begin(), temp.end(), '\n', '\0'); 2939 std::replace(temp.begin(), temp.end(), '\n', '\0');
2940 scoped_refptr<HttpResponseHeaders> response = new HttpResponseHeaders(temp); 2940 scoped_refptr<HttpResponseHeaders> response = new HttpResponseHeaders(temp);
2941 request.extra_headers = "Foo: 1\nbar: 23"; 2941 request.extra_headers = "Foo: 1\nbar: 23";
2942 EXPECT_TRUE(trans->response_.vary_data.Init(request, *response)); 2942 EXPECT_TRUE(trans->response_.vary_data.Init(request, *response));
2943 } 2943 }
2944 2944
2945 // Cause the above state to be reset. 2945 // Cause the above state to be reset.
2946 trans->ResetStateForRestart(); 2946 trans->ResetStateForRestart();
2947 2947
2948 // Verify that the state that needed to be reset, has been reset. 2948 // Verify that the state that needed to be reset, has been reset.
2949 EXPECT_EQ(NULL, trans->header_buf_.get()); 2949 EXPECT_EQ(NULL, trans->header_buf_->headers());
2950 EXPECT_EQ(0, trans->header_buf_capacity_); 2950 EXPECT_EQ(0, trans->header_buf_capacity_);
2951 EXPECT_EQ(0, trans->header_buf_len_); 2951 EXPECT_EQ(0, trans->header_buf_len_);
2952 EXPECT_EQ(-1, trans->header_buf_body_offset_); 2952 EXPECT_EQ(-1, trans->header_buf_body_offset_);
2953 EXPECT_EQ(-1, trans->header_buf_http_offset_); 2953 EXPECT_EQ(-1, trans->header_buf_http_offset_);
2954 EXPECT_EQ(-1, trans->response_body_length_); 2954 EXPECT_EQ(-1, trans->response_body_length_);
2955 EXPECT_EQ(0, trans->response_body_read_); 2955 EXPECT_EQ(0, trans->response_body_read_);
2956 EXPECT_EQ(NULL, trans->read_buf_.get()); 2956 EXPECT_EQ(NULL, trans->read_buf_.get());
2957 EXPECT_EQ(0, trans->read_buf_len_); 2957 EXPECT_EQ(0, trans->read_buf_len_);
2958 EXPECT_EQ("", trans->request_headers_); 2958 EXPECT_EQ("", trans->request_headers_->headers_);
2959 EXPECT_EQ(0U, trans->request_headers_bytes_sent_); 2959 EXPECT_EQ(0U, trans->request_headers_bytes_sent_);
2960 EXPECT_EQ(NULL, trans->response_.auth_challenge.get()); 2960 EXPECT_EQ(NULL, trans->response_.auth_challenge.get());
2961 EXPECT_EQ(NULL, trans->response_.headers.get()); 2961 EXPECT_EQ(NULL, trans->response_.headers.get());
2962 EXPECT_EQ(false, trans->response_.was_cached); 2962 EXPECT_EQ(false, trans->response_.was_cached);
2963 EXPECT_EQ(base::kInvalidPlatformFileValue, 2963 EXPECT_EQ(base::kInvalidPlatformFileValue,
2964 trans->response_.response_data_file); 2964 trans->response_.response_data_file);
2965 EXPECT_EQ(0, trans->response_.ssl_info.cert_status); 2965 EXPECT_EQ(0, trans->response_.ssl_info.cert_status);
2966 EXPECT_FALSE(trans->response_.vary_data.is_valid()); 2966 EXPECT_FALSE(trans->response_.vary_data.is_valid());
2967 } 2967 }
2968 2968
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
3095 EXPECT_EQ(OK, rv); 3095 EXPECT_EQ(OK, rv);
3096 3096
3097 const HttpResponseInfo* response = trans->GetResponseInfo(); 3097 const HttpResponseInfo* response = trans->GetResponseInfo();
3098 3098
3099 EXPECT_FALSE(response == NULL); 3099 EXPECT_FALSE(response == NULL);
3100 EXPECT_EQ(100, response->headers->GetContentLength()); 3100 EXPECT_EQ(100, response->headers->GetContentLength());
3101 } 3101 }
3102 } 3102 }
3103 3103
3104 } // namespace net 3104 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698