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

Side by Side Diff: net/spdy/spdy_network_transaction_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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "net/base/auth.h" 10 #include "net/base/auth.h"
(...skipping 22 matching lines...) Expand all
33 SPDYSSL, 33 SPDYSSL,
34 }; 34 };
35 class SpdyNetworkTransactionTest 35 class SpdyNetworkTransactionTest
36 : public ::testing::TestWithParam<SpdyNetworkTransactionTestTypes> { 36 : public ::testing::TestWithParam<SpdyNetworkTransactionTestTypes> {
37 protected: 37 protected:
38 virtual void SetUp() { 38 virtual void SetUp() {
39 // By default, all tests turn off compression. 39 // By default, all tests turn off compression.
40 EnableCompression(false); 40 EnableCompression(false);
41 google_get_request_initialized_ = false; 41 google_get_request_initialized_ = false;
42 google_post_request_initialized_ = false; 42 google_post_request_initialized_ = false;
43 google_chunked_post_request_initialized_ = false;
43 } 44 }
44 45
45 virtual void TearDown() { 46 virtual void TearDown() {
46 // Empty the current queue. 47 // Empty the current queue.
47 MessageLoop::current()->RunAllPending(); 48 MessageLoop::current()->RunAllPending();
48 } 49 }
49 50
50 struct TransactionHelperResult { 51 struct TransactionHelperResult {
51 int rv; 52 int rv;
52 std::string status_line; 53 std::string status_line;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 google_post_request_.method = "POST"; 344 google_post_request_.method = "POST";
344 google_post_request_.url = GURL(kDefaultURL); 345 google_post_request_.url = GURL(kDefaultURL);
345 google_post_request_.upload_data = new UploadData(); 346 google_post_request_.upload_data = new UploadData();
346 google_post_request_.upload_data->AppendBytes(kUploadData, 347 google_post_request_.upload_data->AppendBytes(kUploadData,
347 kUploadDataSize); 348 kUploadDataSize);
348 google_post_request_initialized_ = true; 349 google_post_request_initialized_ = true;
349 } 350 }
350 return google_post_request_; 351 return google_post_request_;
351 } 352 }
352 353
354 const HttpRequestInfo& CreateChunkedPostRequest() {
355 if (!google_chunked_post_request_initialized_) {
356 google_chunked_post_request_.method = "POST";
357 google_chunked_post_request_.url = GURL(kDefaultURL);
358 google_chunked_post_request_.upload_data = new UploadData();
359 google_chunked_post_request_.upload_data->set_is_chunked(true);
360 google_chunked_post_request_.upload_data->AppendChunk(
361 kUploadData, kUploadDataSize, true);
362 google_chunked_post_request_initialized_ = true;
363 }
364 return google_chunked_post_request_;
365 }
366
353 // Read the result of a particular transaction, knowing that we've got 367 // Read the result of a particular transaction, knowing that we've got
354 // multiple transactions in the read pipeline; so as we read, we may have 368 // multiple transactions in the read pipeline; so as we read, we may have
355 // to skip over data destined for other transactions while we consume 369 // to skip over data destined for other transactions while we consume
356 // the data for |trans|. 370 // the data for |trans|.
357 int ReadResult(HttpNetworkTransaction* trans, 371 int ReadResult(HttpNetworkTransaction* trans,
358 StaticSocketDataProvider* data, 372 StaticSocketDataProvider* data,
359 std::string* result) { 373 std::string* result) {
360 const int kSize = 3000; 374 const int kSize = 3000;
361 375
362 int bytes_read = 0; 376 int bytes_read = 0;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 // Copy the response info, because trans goes away. 461 // Copy the response info, because trans goes away.
448 *response = *trans->GetResponseInfo(); 462 *response = *trans->GetResponseInfo();
449 *push_response = *trans2->GetResponseInfo(); 463 *push_response = *trans2->GetResponseInfo();
450 464
451 VerifyStreamsClosed(helper); 465 VerifyStreamsClosed(helper);
452 } 466 }
453 467
454 private: 468 private:
455 bool google_get_request_initialized_; 469 bool google_get_request_initialized_;
456 bool google_post_request_initialized_; 470 bool google_post_request_initialized_;
471 bool google_chunked_post_request_initialized_;
457 HttpRequestInfo google_get_request_; 472 HttpRequestInfo google_get_request_;
458 HttpRequestInfo google_post_request_; 473 HttpRequestInfo google_post_request_;
474 HttpRequestInfo google_chunked_post_request_;
459 HttpRequestInfo google_get_push_request_; 475 HttpRequestInfo google_get_push_request_;
460 }; 476 };
461 477
462 //----------------------------------------------------------------------------- 478 //-----------------------------------------------------------------------------
463 // All tests are run with three different connection types: SPDY after NPN 479 // All tests are run with three different connection types: SPDY after NPN
464 // negotiation, SPDY without SSL, and SPDY with SSL. 480 // negotiation, SPDY without SSL, and SPDY with SSL.
465 INSTANTIATE_TEST_CASE_P(Spdy, 481 INSTANTIATE_TEST_CASE_P(Spdy,
466 SpdyNetworkTransactionTest, 482 SpdyNetworkTransactionTest,
467 ::testing::Values(SPDYNOSSL, SPDYSSL, SPDYNPN)); 483 ::testing::Values(SPDYNOSSL, SPDYSSL, SPDYNPN));
468 484
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after
1518 writes, arraysize(writes))); 1534 writes, arraysize(writes)));
1519 NormalSpdyTransactionHelper helper(CreatePostRequest(), 1535 NormalSpdyTransactionHelper helper(CreatePostRequest(),
1520 BoundNetLog(), GetParam()); 1536 BoundNetLog(), GetParam());
1521 helper.RunToCompletion(data.get()); 1537 helper.RunToCompletion(data.get());
1522 TransactionHelperResult out = helper.output(); 1538 TransactionHelperResult out = helper.output();
1523 EXPECT_EQ(OK, out.rv); 1539 EXPECT_EQ(OK, out.rv);
1524 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 1540 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1525 EXPECT_EQ("hello!", out.response_data); 1541 EXPECT_EQ("hello!", out.response_data);
1526 } 1542 }
1527 1543
1544 // Test that a chunked POST works.
1545 TEST_P(SpdyNetworkTransactionTest, ChunkedPost) {
willchan no longer on Chromium 2011/03/03 19:47:48 You should also have a test with multiple chunks.
1546 scoped_ptr<spdy::SpdyFrame> req(ConstructChunkedSpdyPost(NULL, 0));
1547 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
1548 MockWrite writes[] = {
1549 CreateMockWrite(*req),
1550 CreateMockWrite(*body), // POST upload frame
1551 };
1552
1553 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyPostSynReply(NULL, 0));
1554 MockRead reads[] = {
1555 CreateMockRead(*resp),
1556 CreateMockRead(*body),
1557 MockRead(true, 0, 0) // EOF
1558 };
1559
1560 scoped_refptr<DelayedSocketData> data(
1561 new DelayedSocketData(2, reads, arraysize(reads),
1562 writes, arraysize(writes)));
1563 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(),
1564 BoundNetLog(), GetParam());
1565 helper.RunToCompletion(data.get());
1566 TransactionHelperResult out = helper.output();
1567 EXPECT_EQ(OK, out.rv);
1568 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
1569 EXPECT_EQ("hello!", out.response_data);
1570 }
1571
1528 // Test that a POST without any post data works. 1572 // Test that a POST without any post data works.
1529 TEST_P(SpdyNetworkTransactionTest, NullPost) { 1573 TEST_P(SpdyNetworkTransactionTest, NullPost) {
1530 // Setup the request 1574 // Setup the request
1531 HttpRequestInfo request; 1575 HttpRequestInfo request;
1532 request.method = "POST"; 1576 request.method = "POST";
1533 request.url = GURL("http://www.google.com/"); 1577 request.url = GURL("http://www.google.com/");
1534 // Create an empty UploadData. 1578 // Create an empty UploadData.
1535 request.upload_data = NULL; 1579 request.upload_data = NULL;
1536 1580
1537 // When request.upload_data is NULL for post, content-length is 1581 // When request.upload_data is NULL for post, content-length is
(...skipping 4060 matching lines...) Expand 10 before | Expand all | Expand 10 after
5598 5642
5599 VerifyStreamsClosed(helper); 5643 VerifyStreamsClosed(helper);
5600 5644
5601 // Verify the SYN_REPLY. 5645 // Verify the SYN_REPLY.
5602 EXPECT_TRUE(response.headers != NULL); 5646 EXPECT_TRUE(response.headers != NULL);
5603 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5647 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5604 } 5648 }
5605 } 5649 }
5606 5650
5607 } // namespace net 5651 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698