OLD | NEW |
---|---|
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 "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
258 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( | 258 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
259 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 259 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
260 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( | 260 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
261 HttpNetworkSession::NORMAL_SOCKET_POOL)) { | 261 HttpNetworkSession::NORMAL_SOCKET_POOL)) { |
262 } | 262 } |
263 | 263 |
264 struct SimpleGetHelperResult { | 264 struct SimpleGetHelperResult { |
265 int rv; | 265 int rv; |
266 std::string status_line; | 266 std::string status_line; |
267 std::string response_data; | 267 std::string response_data; |
268 int64 totalReceivedBytes; | 268 int64_t total_received_bytes; |
269 int64_t total_sent_bytes; | |
269 LoadTimingInfo load_timing_info; | 270 LoadTimingInfo load_timing_info; |
270 ConnectionAttempts connection_attempts; | 271 ConnectionAttempts connection_attempts; |
271 }; | 272 }; |
272 | 273 |
273 void SetUp() override { | 274 void SetUp() override { |
274 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 275 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
275 base::MessageLoop::current()->RunUntilIdle(); | 276 base::MessageLoop::current()->RunUntilIdle(); |
276 } | 277 } |
277 | 278 |
278 void TearDown() override { | 279 void TearDown() override { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
334 session_deps_.socket_factory->AddSocketDataProvider(data[i]); | 335 session_deps_.socket_factory->AddSocketDataProvider(data[i]); |
335 } | 336 } |
336 | 337 |
337 TestCompletionCallback callback; | 338 TestCompletionCallback callback; |
338 | 339 |
339 EXPECT_TRUE(log.bound().IsCapturing()); | 340 EXPECT_TRUE(log.bound().IsCapturing()); |
340 int rv = trans->Start(&request, callback.callback(), log.bound()); | 341 int rv = trans->Start(&request, callback.callback(), log.bound()); |
341 EXPECT_EQ(ERR_IO_PENDING, rv); | 342 EXPECT_EQ(ERR_IO_PENDING, rv); |
342 | 343 |
343 out.rv = callback.WaitForResult(); | 344 out.rv = callback.WaitForResult(); |
345 out.total_sent_bytes = trans->GetTotalSentBytes(); | |
346 out.total_received_bytes = trans->GetTotalReceivedBytes(); | |
mmenke
2015/09/04 15:21:49
Nit: Received is before sent everywhere else (In
sclittle
2015/09/04 22:03:10
Done.
| |
344 | 347 |
345 // Even in the failure cases that use this function, connections are always | 348 // Even in the failure cases that use this function, connections are always |
346 // successfully established before the error. | 349 // successfully established before the error. |
347 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); | 350 EXPECT_TRUE(trans->GetLoadTimingInfo(&out.load_timing_info)); |
348 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 351 TestLoadTimingNotReused(out.load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
349 | 352 |
350 if (out.rv != OK) | 353 if (out.rv != OK) |
351 return out; | 354 return out; |
352 | 355 |
353 const HttpResponseInfo* response = trans->GetResponseInfo(); | 356 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
385 EXPECT_TRUE(request_headers.GetHeader("Host", &value)); | 388 EXPECT_TRUE(request_headers.GetHeader("Host", &value)); |
386 EXPECT_EQ("www.example.org", value); | 389 EXPECT_EQ("www.example.org", value); |
387 EXPECT_TRUE(request_headers.GetHeader("Connection", &value)); | 390 EXPECT_TRUE(request_headers.GetHeader("Connection", &value)); |
388 EXPECT_EQ("keep-alive", value); | 391 EXPECT_EQ("keep-alive", value); |
389 | 392 |
390 std::string response_headers; | 393 std::string response_headers; |
391 EXPECT_TRUE(GetHeaders(entries[pos].params.get(), &response_headers)); | 394 EXPECT_TRUE(GetHeaders(entries[pos].params.get(), &response_headers)); |
392 EXPECT_EQ("['Host: www.example.org','Connection: keep-alive']", | 395 EXPECT_EQ("['Host: www.example.org','Connection: keep-alive']", |
393 response_headers); | 396 response_headers); |
394 | 397 |
395 out.totalReceivedBytes = trans->GetTotalReceivedBytes(); | 398 EXPECT_EQ( |
399 static_cast<int64_t>(line.size() + request_headers.ToString().size()), | |
mmenke
2015/09/04 15:21:49
We really should not be depending on GetFullReques
sclittle
2015/09/04 22:03:10
You're right, removed this. I forgot to remove thi
| |
400 trans->GetTotalSentBytes()); | |
401 | |
402 // The total number of sent bytes should not have changed. | |
403 EXPECT_EQ(out.total_sent_bytes, trans->GetTotalSentBytes()); | |
404 | |
405 out.total_received_bytes = trans->GetTotalReceivedBytes(); | |
396 trans->GetConnectionAttempts(&out.connection_attempts); | 406 trans->GetConnectionAttempts(&out.connection_attempts); |
397 return out; | 407 return out; |
398 } | 408 } |
399 | 409 |
400 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], | 410 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], |
401 size_t reads_count) { | 411 size_t reads_count) { |
402 StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); | 412 MockWrite data_writes[] = { |
403 StaticSocketDataProvider* data[] = { &reads }; | 413 MockWrite("GET / HTTP/1.1\r\n" |
404 return SimpleGetHelperForData(data, 1); | 414 "Host: www.example.org\r\n" |
405 } | 415 "Connection: keep-alive\r\n\r\n"), |
416 }; | |
mmenke
2015/09/04 15:21:49
So I guess no tests that use this method use SPDY
sclittle
2015/09/04 22:03:10
That's correct.
| |
406 | 417 |
407 int64 ReadsSize(MockRead data_reads[], size_t reads_count) { | 418 StaticSocketDataProvider reads(data_reads, reads_count, data_writes, |
408 int64 size = 0; | 419 arraysize(data_writes)); |
409 for (size_t i = 0; i < reads_count; ++i) | 420 StaticSocketDataProvider* data[] = {&reads}; |
410 size += data_reads[i].data_len; | 421 SimpleGetHelperResult out = SimpleGetHelperForData(data, 1); |
411 return size; | 422 |
423 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | |
424 out.total_sent_bytes); | |
425 return out; | |
412 } | 426 } |
413 | 427 |
414 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, | 428 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, |
415 int expected_status); | 429 int expected_status); |
416 | 430 |
417 void ConnectStatusHelper(const MockRead& status); | 431 void ConnectStatusHelper(const MockRead& status); |
418 | 432 |
419 void BypassHostCacheOnRefreshHelper(int load_flags); | 433 void BypassHostCacheOnRefreshHelper(int load_flags); |
420 | 434 |
421 void CheckErrorIsPassedBack(int error, IoMode mode); | 435 void CheckErrorIsPassedBack(int error, IoMode mode); |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
672 MockRead data_reads[] = { | 686 MockRead data_reads[] = { |
673 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 687 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
674 MockRead("hello world"), | 688 MockRead("hello world"), |
675 MockRead(SYNCHRONOUS, OK), | 689 MockRead(SYNCHRONOUS, OK), |
676 }; | 690 }; |
677 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 691 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
678 arraysize(data_reads)); | 692 arraysize(data_reads)); |
679 EXPECT_EQ(OK, out.rv); | 693 EXPECT_EQ(OK, out.rv); |
680 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 694 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
681 EXPECT_EQ("hello world", out.response_data); | 695 EXPECT_EQ("hello world", out.response_data); |
682 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 696 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
683 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 697 EXPECT_EQ(reads_size, out.total_received_bytes); |
684 EXPECT_EQ(0u, out.connection_attempts.size()); | 698 EXPECT_EQ(0u, out.connection_attempts.size()); |
685 } | 699 } |
686 | 700 |
687 // Response with no status line. | 701 // Response with no status line. |
688 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { | 702 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
689 MockRead data_reads[] = { | 703 MockRead data_reads[] = { |
690 MockRead("hello world"), | 704 MockRead("hello world"), |
691 MockRead(SYNCHRONOUS, OK), | 705 MockRead(SYNCHRONOUS, OK), |
692 }; | 706 }; |
693 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 707 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
694 arraysize(data_reads)); | 708 arraysize(data_reads)); |
695 EXPECT_EQ(OK, out.rv); | 709 EXPECT_EQ(OK, out.rv); |
696 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 710 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
697 EXPECT_EQ("hello world", out.response_data); | 711 EXPECT_EQ("hello world", out.response_data); |
698 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 712 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
699 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 713 EXPECT_EQ(reads_size, out.total_received_bytes); |
700 } | 714 } |
701 | 715 |
702 // Allow up to 4 bytes of junk to precede status line. | 716 // Allow up to 4 bytes of junk to precede status line. |
703 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { | 717 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
704 MockRead data_reads[] = { | 718 MockRead data_reads[] = { |
705 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 719 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
706 MockRead(SYNCHRONOUS, OK), | 720 MockRead(SYNCHRONOUS, OK), |
707 }; | 721 }; |
708 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 722 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
709 arraysize(data_reads)); | 723 arraysize(data_reads)); |
710 EXPECT_EQ(OK, out.rv); | 724 EXPECT_EQ(OK, out.rv); |
711 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 725 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
712 EXPECT_EQ("DATA", out.response_data); | 726 EXPECT_EQ("DATA", out.response_data); |
713 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 727 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
714 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 728 EXPECT_EQ(reads_size, out.total_received_bytes); |
715 } | 729 } |
716 | 730 |
717 // Allow up to 4 bytes of junk to precede status line. | 731 // Allow up to 4 bytes of junk to precede status line. |
718 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { | 732 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
719 MockRead data_reads[] = { | 733 MockRead data_reads[] = { |
720 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 734 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
721 MockRead(SYNCHRONOUS, OK), | 735 MockRead(SYNCHRONOUS, OK), |
722 }; | 736 }; |
723 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 737 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
724 arraysize(data_reads)); | 738 arraysize(data_reads)); |
725 EXPECT_EQ(OK, out.rv); | 739 EXPECT_EQ(OK, out.rv); |
726 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 740 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
727 EXPECT_EQ("DATA", out.response_data); | 741 EXPECT_EQ("DATA", out.response_data); |
728 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 742 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
729 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 743 EXPECT_EQ(reads_size, out.total_received_bytes); |
730 } | 744 } |
731 | 745 |
732 // Beyond 4 bytes of slop and it should fail to find a status line. | 746 // Beyond 4 bytes of slop and it should fail to find a status line. |
733 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { | 747 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
734 MockRead data_reads[] = { | 748 MockRead data_reads[] = { |
735 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), | 749 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), |
736 MockRead(SYNCHRONOUS, OK), | 750 MockRead(SYNCHRONOUS, OK), |
737 }; | 751 }; |
738 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 752 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
739 arraysize(data_reads)); | 753 arraysize(data_reads)); |
740 EXPECT_EQ(OK, out.rv); | 754 EXPECT_EQ(OK, out.rv); |
741 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 755 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
742 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); | 756 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
743 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 757 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
744 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 758 EXPECT_EQ(reads_size, out.total_received_bytes); |
745 } | 759 } |
746 | 760 |
747 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. | 761 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
748 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { | 762 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
749 MockRead data_reads[] = { | 763 MockRead data_reads[] = { |
750 MockRead("\n"), | 764 MockRead("\n"), |
751 MockRead("\n"), | 765 MockRead("\n"), |
752 MockRead("Q"), | 766 MockRead("Q"), |
753 MockRead("J"), | 767 MockRead("J"), |
754 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 768 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
755 MockRead(SYNCHRONOUS, OK), | 769 MockRead(SYNCHRONOUS, OK), |
756 }; | 770 }; |
757 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 771 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
758 arraysize(data_reads)); | 772 arraysize(data_reads)); |
759 EXPECT_EQ(OK, out.rv); | 773 EXPECT_EQ(OK, out.rv); |
760 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 774 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
761 EXPECT_EQ("DATA", out.response_data); | 775 EXPECT_EQ("DATA", out.response_data); |
762 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 776 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
763 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 777 EXPECT_EQ(reads_size, out.total_received_bytes); |
764 } | 778 } |
765 | 779 |
766 // Close the connection before enough bytes to have a status line. | 780 // Close the connection before enough bytes to have a status line. |
767 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { | 781 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
768 MockRead data_reads[] = { | 782 MockRead data_reads[] = { |
769 MockRead("HTT"), | 783 MockRead("HTT"), |
770 MockRead(SYNCHRONOUS, OK), | 784 MockRead(SYNCHRONOUS, OK), |
771 }; | 785 }; |
772 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 786 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
773 arraysize(data_reads)); | 787 arraysize(data_reads)); |
774 EXPECT_EQ(OK, out.rv); | 788 EXPECT_EQ(OK, out.rv); |
775 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 789 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
776 EXPECT_EQ("HTT", out.response_data); | 790 EXPECT_EQ("HTT", out.response_data); |
777 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 791 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
778 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 792 EXPECT_EQ(reads_size, out.total_received_bytes); |
779 } | 793 } |
780 | 794 |
781 // Simulate a 204 response, lacking a Content-Length header, sent over a | 795 // Simulate a 204 response, lacking a Content-Length header, sent over a |
782 // persistent connection. The response should still terminate since a 204 | 796 // persistent connection. The response should still terminate since a 204 |
783 // cannot have a response body. | 797 // cannot have a response body. |
784 TEST_P(HttpNetworkTransactionTest, StopsReading204) { | 798 TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
785 char junk[] = "junk"; | 799 char junk[] = "junk"; |
786 MockRead data_reads[] = { | 800 MockRead data_reads[] = { |
787 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 801 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
788 MockRead(junk), // Should not be read!! | 802 MockRead(junk), // Should not be read!! |
789 MockRead(SYNCHRONOUS, OK), | 803 MockRead(SYNCHRONOUS, OK), |
790 }; | 804 }; |
791 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 805 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
792 arraysize(data_reads)); | 806 arraysize(data_reads)); |
793 EXPECT_EQ(OK, out.rv); | 807 EXPECT_EQ(OK, out.rv); |
794 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); | 808 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
795 EXPECT_EQ("", out.response_data); | 809 EXPECT_EQ("", out.response_data); |
796 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 810 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
797 int64 response_size = reads_size - strlen(junk); | 811 int64_t response_size = reads_size - strlen(junk); |
798 EXPECT_EQ(response_size, out.totalReceivedBytes); | 812 EXPECT_EQ(response_size, out.total_received_bytes); |
799 } | 813 } |
800 | 814 |
801 // A simple request using chunked encoding with some extra data after. | 815 // A simple request using chunked encoding with some extra data after. |
802 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { | 816 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
803 std::string final_chunk = "0\r\n\r\n"; | 817 std::string final_chunk = "0\r\n\r\n"; |
804 std::string extra_data = "HTTP/1.1 200 OK\r\n"; | 818 std::string extra_data = "HTTP/1.1 200 OK\r\n"; |
805 std::string last_read = final_chunk + extra_data; | 819 std::string last_read = final_chunk + extra_data; |
806 MockRead data_reads[] = { | 820 MockRead data_reads[] = { |
807 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), | 821 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), |
808 MockRead("5\r\nHello\r\n"), | 822 MockRead("5\r\nHello\r\n"), |
809 MockRead("1\r\n"), | 823 MockRead("1\r\n"), |
810 MockRead(" \r\n"), | 824 MockRead(" \r\n"), |
811 MockRead("5\r\nworld\r\n"), | 825 MockRead("5\r\nworld\r\n"), |
812 MockRead(last_read.data()), | 826 MockRead(last_read.data()), |
813 MockRead(SYNCHRONOUS, OK), | 827 MockRead(SYNCHRONOUS, OK), |
814 }; | 828 }; |
815 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 829 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
816 arraysize(data_reads)); | 830 arraysize(data_reads)); |
817 EXPECT_EQ(OK, out.rv); | 831 EXPECT_EQ(OK, out.rv); |
818 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 832 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
819 EXPECT_EQ("Hello world", out.response_data); | 833 EXPECT_EQ("Hello world", out.response_data); |
820 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 834 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
821 int64 response_size = reads_size - extra_data.size(); | 835 int64_t response_size = reads_size - extra_data.size(); |
822 EXPECT_EQ(response_size, out.totalReceivedBytes); | 836 EXPECT_EQ(response_size, out.total_received_bytes); |
823 } | 837 } |
824 | 838 |
825 // Next tests deal with http://crbug.com/56344. | 839 // Next tests deal with http://crbug.com/56344. |
826 | 840 |
827 TEST_P(HttpNetworkTransactionTest, | 841 TEST_P(HttpNetworkTransactionTest, |
828 MultipleContentLengthHeadersNoTransferEncoding) { | 842 MultipleContentLengthHeadersNoTransferEncoding) { |
829 MockRead data_reads[] = { | 843 MockRead data_reads[] = { |
830 MockRead("HTTP/1.1 200 OK\r\n"), | 844 MockRead("HTTP/1.1 200 OK\r\n"), |
831 MockRead("Content-Length: 10\r\n"), | 845 MockRead("Content-Length: 10\r\n"), |
832 MockRead("Content-Length: 5\r\n\r\n"), | 846 MockRead("Content-Length: 5\r\n\r\n"), |
(...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1948 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1962 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1949 EXPECT_EQ(ERR_IO_PENDING, rv); | 1963 EXPECT_EQ(ERR_IO_PENDING, rv); |
1950 | 1964 |
1951 rv = callback1.WaitForResult(); | 1965 rv = callback1.WaitForResult(); |
1952 EXPECT_EQ(OK, rv); | 1966 EXPECT_EQ(OK, rv); |
1953 | 1967 |
1954 LoadTimingInfo load_timing_info1; | 1968 LoadTimingInfo load_timing_info1; |
1955 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 1969 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
1956 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 1970 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
1957 | 1971 |
1958 int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); | 1972 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); |
1973 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); | |
1974 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); | |
1959 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); | 1975 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
1960 | 1976 |
1961 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1977 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1962 ASSERT_TRUE(response != NULL); | 1978 ASSERT_TRUE(response != NULL); |
1963 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 1979 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
1964 | 1980 |
1965 TestCompletionCallback callback2; | 1981 TestCompletionCallback callback2; |
1966 | 1982 |
1967 rv = trans->RestartWithAuth( | 1983 rv = trans->RestartWithAuth( |
1968 AuthCredentials(kFoo, kBar), callback2.callback()); | 1984 AuthCredentials(kFoo, kBar), callback2.callback()); |
1969 EXPECT_EQ(ERR_IO_PENDING, rv); | 1985 EXPECT_EQ(ERR_IO_PENDING, rv); |
1970 | 1986 |
1971 rv = callback2.WaitForResult(); | 1987 rv = callback2.WaitForResult(); |
1972 EXPECT_EQ(OK, rv); | 1988 EXPECT_EQ(OK, rv); |
1973 | 1989 |
1974 LoadTimingInfo load_timing_info2; | 1990 LoadTimingInfo load_timing_info2; |
1975 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 1991 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
1976 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); | 1992 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); |
1977 // The load timing after restart should have a new socket ID, and times after | 1993 // The load timing after restart should have a new socket ID, and times after |
1978 // those of the first load timing. | 1994 // those of the first load timing. |
1979 EXPECT_LE(load_timing_info1.receive_headers_end, | 1995 EXPECT_LE(load_timing_info1.receive_headers_end, |
1980 load_timing_info2.connect_timing.connect_start); | 1996 load_timing_info2.connect_timing.connect_start); |
1981 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 1997 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
1982 | 1998 |
1983 int64 reads_size2 = ReadsSize(data_reads2, arraysize(data_reads2)); | 1999 int64_t writes_size2 = CountWriteBytes(data_writes2, arraysize(data_writes2)); |
2000 EXPECT_EQ(writes_size1 + writes_size2, trans->GetTotalSentBytes()); | |
2001 int64_t reads_size2 = CountReadBytes(data_reads2, arraysize(data_reads2)); | |
1984 EXPECT_EQ(reads_size1 + reads_size2, trans->GetTotalReceivedBytes()); | 2002 EXPECT_EQ(reads_size1 + reads_size2, trans->GetTotalReceivedBytes()); |
1985 | 2003 |
1986 response = trans->GetResponseInfo(); | 2004 response = trans->GetResponseInfo(); |
1987 ASSERT_TRUE(response != NULL); | 2005 ASSERT_TRUE(response != NULL); |
1988 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2006 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1989 EXPECT_EQ(100, response->headers->GetContentLength()); | 2007 EXPECT_EQ(100, response->headers->GetContentLength()); |
1990 } | 2008 } |
1991 | 2009 |
1992 TEST_P(HttpNetworkTransactionTest, DoNotSendAuth) { | 2010 TEST_P(HttpNetworkTransactionTest, DoNotSendAuth) { |
1993 HttpRequestInfo request; | 2011 HttpRequestInfo request; |
(...skipping 25 matching lines...) Expand all Loading... | |
2019 data_writes, arraysize(data_writes)); | 2037 data_writes, arraysize(data_writes)); |
2020 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2038 session_deps_.socket_factory->AddSocketDataProvider(&data); |
2021 TestCompletionCallback callback; | 2039 TestCompletionCallback callback; |
2022 | 2040 |
2023 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2041 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
2024 EXPECT_EQ(ERR_IO_PENDING, rv); | 2042 EXPECT_EQ(ERR_IO_PENDING, rv); |
2025 | 2043 |
2026 rv = callback.WaitForResult(); | 2044 rv = callback.WaitForResult(); |
2027 EXPECT_EQ(0, rv); | 2045 EXPECT_EQ(0, rv); |
2028 | 2046 |
2029 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 2047 int64_t writes_size = CountWriteBytes(data_writes, arraysize(data_writes)); |
2048 EXPECT_EQ(writes_size, trans->GetTotalSentBytes()); | |
2049 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | |
2030 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); | 2050 EXPECT_EQ(reads_size, trans->GetTotalReceivedBytes()); |
2031 | 2051 |
2032 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2052 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2033 ASSERT_TRUE(response != NULL); | 2053 ASSERT_TRUE(response != NULL); |
2034 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2054 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
2035 } | 2055 } |
2036 | 2056 |
2037 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2057 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2038 // connection. | 2058 // connection. |
2039 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAlive) { | 2059 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAlive) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2125 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 2145 EXPECT_EQ(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
2126 | 2146 |
2127 response = trans->GetResponseInfo(); | 2147 response = trans->GetResponseInfo(); |
2128 ASSERT_TRUE(response != NULL); | 2148 ASSERT_TRUE(response != NULL); |
2129 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2149 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
2130 EXPECT_EQ(5, response->headers->GetContentLength()); | 2150 EXPECT_EQ(5, response->headers->GetContentLength()); |
2131 | 2151 |
2132 std::string response_data; | 2152 std::string response_data; |
2133 rv = ReadTransaction(trans.get(), &response_data); | 2153 rv = ReadTransaction(trans.get(), &response_data); |
2134 EXPECT_EQ(OK, rv); | 2154 EXPECT_EQ(OK, rv); |
2135 int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); | 2155 |
2156 int64_t writes_size1 = CountWriteBytes(data_writes1, arraysize(data_writes1)); | |
2157 EXPECT_EQ(writes_size1, trans->GetTotalSentBytes()); | |
2158 int64_t reads_size1 = CountReadBytes(data_reads1, arraysize(data_reads1)); | |
2136 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); | 2159 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
2137 } | 2160 } |
2138 | 2161 |
2139 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2162 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
2140 // connection and with no response body to drain. | 2163 // connection and with no response body to drain. |
2141 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { | 2164 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { |
2142 HttpRequestInfo request; | 2165 HttpRequestInfo request; |
2143 request.method = "GET"; | 2166 request.method = "GET"; |
2144 request.url = GURL("http://www.example.org/"); | 2167 request.url = GURL("http://www.example.org/"); |
2145 request.load_flags = 0; | 2168 request.load_flags = 0; |
(...skipping 12431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
14577 const HttpResponseInfo* response = trans->GetResponseInfo(); | 14600 const HttpResponseInfo* response = trans->GetResponseInfo(); |
14578 ASSERT_TRUE(response); | 14601 ASSERT_TRUE(response); |
14579 ASSERT_TRUE(response->headers.get()); | 14602 ASSERT_TRUE(response->headers.get()); |
14580 | 14603 |
14581 EXPECT_EQ(101, response->headers->response_code()); | 14604 EXPECT_EQ(101, response->headers->response_code()); |
14582 | 14605 |
14583 trans.reset(); | 14606 trans.reset(); |
14584 session->CloseAllConnections(); | 14607 session->CloseAllConnections(); |
14585 } | 14608 } |
14586 | 14609 |
14610 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost) { | |
14611 ScopedVector<UploadElementReader> element_readers; | |
14612 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | |
14613 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | |
14614 | |
14615 HttpRequestInfo request; | |
14616 request.method = "POST"; | |
14617 request.url = GURL("http://www.foo.com/"); | |
14618 request.upload_data_stream = &upload_data_stream; | |
14619 | |
14620 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | |
14621 scoped_ptr<HttpTransaction> trans( | |
14622 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | |
14623 MockWrite data_writes[] = { | |
14624 MockWrite("POST / HTTP/1.1\r\n" | |
14625 "Host: www.foo.com\r\n" | |
14626 "Connection: keep-alive\r\n" | |
14627 "Content-Length: 3\r\n\r\n"), | |
14628 MockWrite("foo"), | |
14629 }; | |
14630 | |
14631 MockRead data_reads[] = { | |
14632 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | |
14633 MockRead(SYNCHRONOUS, OK), | |
14634 }; | |
14635 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | |
14636 arraysize(data_writes)); | |
14637 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
14638 | |
14639 TestCompletionCallback callback; | |
14640 | |
14641 EXPECT_EQ(ERR_IO_PENDING, | |
14642 trans->Start(&request, callback.callback(), BoundNetLog())); | |
14643 EXPECT_EQ(OK, callback.WaitForResult()); | |
14644 | |
14645 std::string response_data; | |
14646 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | |
14647 | |
14648 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | |
14649 trans->GetTotalSentBytes()); | |
14650 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | |
14651 trans->GetTotalReceivedBytes()); | |
14652 } | |
14653 | |
14654 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesPost100Continue) { | |
14655 ScopedVector<UploadElementReader> element_readers; | |
14656 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | |
14657 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | |
14658 | |
14659 HttpRequestInfo request; | |
14660 request.method = "POST"; | |
14661 request.url = GURL("http://www.foo.com/"); | |
14662 request.upload_data_stream = &upload_data_stream; | |
14663 | |
14664 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | |
14665 scoped_ptr<HttpTransaction> trans( | |
14666 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | |
14667 MockWrite data_writes[] = { | |
14668 MockWrite("POST / HTTP/1.1\r\n" | |
14669 "Host: www.foo.com\r\n" | |
14670 "Connection: keep-alive\r\n" | |
14671 "Content-Length: 3\r\n\r\n"), | |
14672 MockWrite("foo"), | |
14673 }; | |
14674 | |
14675 MockRead data_reads[] = { | |
14676 MockRead("HTTP/1.1 100 Continue\r\n\r\n"), | |
14677 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | |
mmenke
2015/09/04 15:21:49
Second mock read should be on next line...Or does
sclittle
2015/09/04 22:03:10
git cl format did this.
| |
14678 MockRead(SYNCHRONOUS, OK), | |
14679 }; | |
14680 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | |
14681 arraysize(data_writes)); | |
14682 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
14683 | |
14684 TestCompletionCallback callback; | |
14685 | |
14686 EXPECT_EQ(ERR_IO_PENDING, | |
14687 trans->Start(&request, callback.callback(), BoundNetLog())); | |
14688 EXPECT_EQ(OK, callback.WaitForResult()); | |
14689 | |
14690 std::string response_data; | |
14691 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | |
14692 | |
14693 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | |
14694 trans->GetTotalSentBytes()); | |
14695 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | |
14696 trans->GetTotalReceivedBytes()); | |
14697 } | |
14698 | |
14699 TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) { | |
14700 ScopedVector<UploadElementReader> element_readers; | |
14701 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | |
14702 ChunkedUploadDataStream upload_data_stream(0); | |
14703 | |
14704 HttpRequestInfo request; | |
14705 request.method = "POST"; | |
14706 request.url = GURL("http://www.foo.com/"); | |
14707 request.upload_data_stream = &upload_data_stream; | |
14708 | |
14709 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | |
14710 scoped_ptr<HttpTransaction> trans( | |
14711 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | |
14712 // Send headers successfully, but get an error while sending the body. | |
14713 MockWrite data_writes[] = { | |
14714 MockWrite("POST / HTTP/1.1\r\n" | |
14715 "Host: www.foo.com\r\n" | |
14716 "Connection: keep-alive\r\n" | |
14717 "Transfer-Encoding: chunked\r\n\r\n"), | |
14718 MockWrite("1\r\nf\r\n"), MockWrite("2\r\noo\r\n"), MockWrite("0\r\n\r\n"), | |
14719 }; | |
14720 | |
14721 MockRead data_reads[] = { | |
14722 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | |
14723 MockRead(SYNCHRONOUS, OK), | |
14724 }; | |
14725 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | |
14726 arraysize(data_writes)); | |
14727 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
14728 | |
14729 TestCompletionCallback callback; | |
14730 | |
14731 EXPECT_EQ(ERR_IO_PENDING, | |
14732 trans->Start(&request, callback.callback(), BoundNetLog())); | |
14733 | |
14734 base::RunLoop().RunUntilIdle(); | |
14735 upload_data_stream.AppendData("f", 1, false); | |
14736 | |
14737 base::RunLoop().RunUntilIdle(); | |
14738 upload_data_stream.AppendData("oo", 2, true); | |
14739 | |
14740 EXPECT_EQ(OK, callback.WaitForResult()); | |
14741 | |
14742 std::string response_data; | |
14743 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | |
14744 | |
14745 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | |
14746 trans->GetTotalSentBytes()); | |
14747 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | |
14748 trans->GetTotalReceivedBytes()); | |
14749 } | |
14750 | |
14587 } // namespace net | 14751 } // namespace net |
OLD | NEW |