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

Side by Side Diff: net/url_request/url_request_unittest.cc

Issue 2675763004: Add an URLRequestTest to test the quic server info factory setup at the creation of HttpCache. (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <memory> 5 #include <memory>
6 #include <utility> 6 #include <utility>
7 7
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "base/values.h" 48 #include "base/values.h"
49 #include "net/base/chunked_upload_data_stream.h" 49 #include "net/base/chunked_upload_data_stream.h"
50 #include "net/base/directory_listing.h" 50 #include "net/base/directory_listing.h"
51 #include "net/base/elements_upload_data_stream.h" 51 #include "net/base/elements_upload_data_stream.h"
52 #include "net/base/load_flags.h" 52 #include "net/base/load_flags.h"
53 #include "net/base/load_timing_info.h" 53 #include "net/base/load_timing_info.h"
54 #include "net/base/load_timing_info_test_util.h" 54 #include "net/base/load_timing_info_test_util.h"
55 #include "net/base/net_errors.h" 55 #include "net/base/net_errors.h"
56 #include "net/base/net_module.h" 56 #include "net/base/net_module.h"
57 #include "net/base/request_priority.h" 57 #include "net/base/request_priority.h"
58 #include "net/base/test_completion_callback.h"
58 #include "net/base/upload_bytes_element_reader.h" 59 #include "net/base/upload_bytes_element_reader.h"
59 #include "net/base/upload_data_stream.h" 60 #include "net/base/upload_data_stream.h"
60 #include "net/base/upload_file_element_reader.h" 61 #include "net/base/upload_file_element_reader.h"
61 #include "net/base/url_util.h" 62 #include "net/base/url_util.h"
62 #include "net/cert/ct_policy_enforcer.h" 63 #include "net/cert/ct_policy_enforcer.h"
63 #include "net/cert/ct_policy_status.h" 64 #include "net/cert/ct_policy_status.h"
64 #include "net/cert/do_nothing_ct_verifier.h" 65 #include "net/cert/do_nothing_ct_verifier.h"
65 #include "net/cert/ev_root_ca_metadata.h" 66 #include "net/cert/ev_root_ca_metadata.h"
66 #include "net/cert/mock_cert_verifier.h" 67 #include "net/cert/mock_cert_verifier.h"
68 #include "net/cert/multi_log_ct_verifier.h"
67 #include "net/cert/signed_certificate_timestamp_and_status.h" 69 #include "net/cert/signed_certificate_timestamp_and_status.h"
68 #include "net/cert/test_root_certs.h" 70 #include "net/cert/test_root_certs.h"
69 #include "net/cert_net/nss_ocsp.h" 71 #include "net/cert_net/nss_ocsp.h"
70 #include "net/cookies/cookie_monster.h" 72 #include "net/cookies/cookie_monster.h"
71 #include "net/cookies/cookie_store_test_helpers.h" 73 #include "net/cookies/cookie_store_test_helpers.h"
72 #include "net/disk_cache/disk_cache.h" 74 #include "net/disk_cache/disk_cache.h"
73 #include "net/dns/mock_host_resolver.h" 75 #include "net/dns/mock_host_resolver.h"
74 #include "net/http/http_byte_range.h" 76 #include "net/http/http_byte_range.h"
75 #include "net/http/http_cache.h" 77 #include "net/http/http_cache.h"
76 #include "net/http/http_network_layer.h" 78 #include "net/http/http_network_layer.h"
77 #include "net/http/http_network_session.h" 79 #include "net/http/http_network_session.h"
78 #include "net/http/http_request_headers.h" 80 #include "net/http/http_request_headers.h"
79 #include "net/http/http_response_headers.h" 81 #include "net/http/http_response_headers.h"
82 #include "net/http/http_server_properties_impl.h"
80 #include "net/http/http_util.h" 83 #include "net/http/http_util.h"
81 #include "net/log/net_log_event_type.h" 84 #include "net/log/net_log_event_type.h"
82 #include "net/log/net_log_source.h" 85 #include "net/log/net_log_source.h"
83 #include "net/log/test_net_log.h" 86 #include "net/log/test_net_log.h"
84 #include "net/log/test_net_log_entry.h" 87 #include "net/log/test_net_log_entry.h"
85 #include "net/log/test_net_log_util.h" 88 #include "net/log/test_net_log_util.h"
86 #include "net/net_features.h" 89 #include "net/net_features.h"
87 #include "net/nqe/external_estimate_provider.h" 90 #include "net/nqe/external_estimate_provider.h"
88 #include "net/proxy/proxy_server.h" 91 #include "net/proxy/proxy_server.h"
89 #include "net/proxy/proxy_service.h" 92 #include "net/proxy/proxy_service.h"
93 #include "net/quic/chromium/mock_crypto_client_stream_factory.h"
94 #include "net/quic/chromium/quic_server_info.h"
95 #include "net/socket/socket_test_util.h"
90 #include "net/socket/ssl_client_socket.h" 96 #include "net/socket/ssl_client_socket.h"
91 #include "net/ssl/channel_id_service.h" 97 #include "net/ssl/channel_id_service.h"
92 #include "net/ssl/default_channel_id_store.h" 98 #include "net/ssl/default_channel_id_store.h"
93 #include "net/ssl/ssl_connection_status_flags.h" 99 #include "net/ssl/ssl_connection_status_flags.h"
94 #include "net/ssl/ssl_server_config.h" 100 #include "net/ssl/ssl_server_config.h"
95 #include "net/ssl/token_binding.h" 101 #include "net/ssl/token_binding.h"
96 #include "net/test/cert_test_util.h" 102 #include "net/test/cert_test_util.h"
97 #include "net/test/embedded_test_server/embedded_test_server.h" 103 #include "net/test/embedded_test_server/embedded_test_server.h"
98 #include "net/test/embedded_test_server/http_request.h" 104 #include "net/test/embedded_test_server/http_request.h"
99 #include "net/test/embedded_test_server/http_response.h" 105 #include "net/test/embedded_test_server/http_response.h"
(...skipping 7620 matching lines...) Expand 10 before | Expand all | Expand 10 after
7720 RequestPriority job_priority; 7726 RequestPriority job_priority;
7721 std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob( 7727 std::unique_ptr<URLRequestJob> job(new PriorityMonitoringURLRequestJob(
7722 req.get(), &default_network_delegate_, &job_priority)); 7728 req.get(), &default_network_delegate_, &job_priority));
7723 AddTestInterceptor()->set_main_intercept_job(std::move(job)); 7729 AddTestInterceptor()->set_main_intercept_job(std::move(job));
7724 7730
7725 // Should trigger |job| to be started. 7731 // Should trigger |job| to be started.
7726 base::RunLoop().Run(); 7732 base::RunLoop().Run();
7727 EXPECT_EQ(LOW, job_priority); 7733 EXPECT_EQ(LOW, job_priority);
7728 } 7734 }
7729 7735
7736 TEST_F(URLRequestTest, QuicServerInfoFactoryTest) {
7737 HttpNetworkSession::Params params;
7738
7739 MockClientSocketFactory socket_factory;
7740 MockCryptoClientStreamFactory crypto_client_stream_factory;
7741 MockHostResolver host_resolver;
7742 MockCertVerifier cert_verifier;
7743 CTPolicyEnforcer ct_policy_enforcer;
7744 TransportSecurityState transport_security_state;
7745 std::unique_ptr<CTVerifier> cert_transparency_verifier(
7746 new MultiLogCTVerifier());
7747 std::unique_ptr<ProxyService> proxy_service = ProxyService::CreateDirect();
7748 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
7749 new SSLConfigServiceDefaults);
7750 HttpServerPropertiesImpl http_server_properties;
7751 // Set up the quic stream factory.
7752 params.enable_quic = true;
7753 params.client_socket_factory = &socket_factory;
7754 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory;
7755 params.host_resolver = &host_resolver;
7756 params.cert_verifier = &cert_verifier;
7757 params.ct_policy_enforcer = &ct_policy_enforcer;
7758 params.transport_security_state = &transport_security_state;
7759 params.cert_transparency_verifier = cert_transparency_verifier.get();
7760
7761 params.proxy_service = proxy_service.get();
7762 params.ssl_config_service = ssl_config_service.get();
7763 params.http_server_properties = &http_server_properties;
7764
7765 HttpNetworkSession session(params);
7766 DCHECK(session.quic_stream_factory());
7767
7768 std::unique_ptr<HttpNetworkLayer> network_layer1(
7769 new HttpNetworkLayer(&session));
7770
7771 HttpCache main_cache(std::move(network_layer1),
7772 HttpCache::DefaultBackend::InMemory(0), true);
7773
7774 EXPECT_TRUE(session.quic_stream_factory()->has_quic_server_info_factory());
7775
7776 default_context_.set_http_transaction_factory(&main_cache);
7777
7778 QuicServerInfoFactory* quic_server_info_factory =
7779 session.quic_stream_factory()->quic_server_info_factory();
7780 DCHECK(quic_server_info_factory);
7781
7782 QuicServerId server_id("www.google.com", 443, PRIVACY_MODE_DISABLED);
7783 const string server_config_a = "server_config_a";
7784 const string source_address_token_a = "source_address_token_a";
7785 const string cert_sct_a = "cert_sct_a";
7786 const string chlo_hash_a = "chlo_hash_a";
7787 const string server_config_sig_a = "server_config_sig_a";
7788 const string cert_a = "cert_a";
7789 const string cert_b = "cert_b";
7790
7791 {
7792 // Store a QuicServerInfo to the quic server info factory.
7793 TestCompletionCallback cb;
7794 std::unique_ptr<QuicServerInfo> quic_server_info =
7795 quic_server_info_factory->GetForServer(server_id);
7796 quic_server_info->Start();
7797 int rv = quic_server_info->WaitForDataReady(cb.callback());
7798 EXPECT_THAT(cb.GetResult(rv), IsOk());
7799
7800 QuicServerInfo::State* state = quic_server_info->mutable_state();
7801 EXPECT_TRUE(state->certs.empty());
7802
7803 state->server_config = server_config_a;
7804 state->source_address_token = source_address_token_a;
7805 state->cert_sct = cert_sct_a;
7806 state->chlo_hash = chlo_hash_a;
7807 state->server_config_sig = server_config_sig_a;
7808 state->certs.push_back(cert_a);
7809 quic_server_info->Persist();
7810 base::RunLoop().RunUntilIdle();
7811 }
7812
7813 // Retrieve the QuicServerInfo from the quic server info factory and verify
7814 // the data is correct.
7815 {
7816 TestCompletionCallback cb;
7817 std::unique_ptr<QuicServerInfo> quic_server_info =
7818 quic_server_info_factory->GetForServer(server_id);
7819 quic_server_info->Start();
7820 int rv = quic_server_info->WaitForDataReady(cb.callback());
7821 EXPECT_THAT(cb.GetResult(rv), IsOk());
7822
7823 QuicServerInfo::State* state = quic_server_info->mutable_state();
7824 EXPECT_TRUE(quic_server_info->IsDataReady());
7825 EXPECT_EQ(server_config_a, state->server_config);
7826 EXPECT_EQ(source_address_token_a, state->source_address_token);
7827 EXPECT_EQ(cert_sct_a, state->cert_sct);
7828 EXPECT_EQ(chlo_hash_a, state->chlo_hash);
7829 EXPECT_EQ(server_config_sig_a, state->server_config_sig);
7830 EXPECT_EQ(1U, state->certs.size());
7831 EXPECT_EQ(cert_a, state->certs[0]);
7832
7833 // Update the data.
7834 state->certs.push_back(cert_b);
7835 quic_server_info->Persist();
7836 base::RunLoop().RunUntilIdle();
7837 }
7838
7839 {
7840 // Verify data has been successfully updated.
7841 TestCompletionCallback cb;
7842 std::unique_ptr<QuicServerInfo> quic_server_info =
7843 quic_server_info_factory->GetForServer(server_id);
7844 quic_server_info->Start();
7845 int rv = quic_server_info->WaitForDataReady(cb.callback());
7846 EXPECT_THAT(cb.GetResult(rv), IsOk());
7847
7848 QuicServerInfo::State* state = quic_server_info->mutable_state();
7849 EXPECT_TRUE(quic_server_info->IsDataReady());
7850 EXPECT_EQ(2U, state->certs.size());
7851 EXPECT_EQ(cert_a, state->certs[0]);
7852 EXPECT_EQ(cert_b, state->certs[1]);
7853 }
7854 }
7855
7730 // Check that creating a network request while entering/exiting suspend mode 7856 // Check that creating a network request while entering/exiting suspend mode
7731 // fails as it should. This is the only case where an HttpTransactionFactory 7857 // fails as it should. This is the only case where an HttpTransactionFactory
7732 // does not return an HttpTransaction. 7858 // does not return an HttpTransaction.
7733 TEST_F(URLRequestTestHTTP, NetworkSuspendTest) { 7859 TEST_F(URLRequestTestHTTP, NetworkSuspendTest) {
7734 // Create a new HttpNetworkLayer that thinks it's suspended. 7860 // Create a new HttpNetworkLayer that thinks it's suspended.
7735 std::unique_ptr<HttpNetworkLayer> network_layer(new HttpNetworkLayer( 7861 std::unique_ptr<HttpNetworkLayer> network_layer(new HttpNetworkLayer(
7736 default_context_.http_transaction_factory()->GetSession())); 7862 default_context_.http_transaction_factory()->GetSession()));
7737 network_layer->OnSuspend(); 7863 network_layer->OnSuspend();
7738 7864
7739 HttpCache http_cache(std::move(network_layer), 7865 HttpCache http_cache(std::move(network_layer),
(...skipping 3000 matching lines...) Expand 10 before | Expand all | Expand 10 after
10740 AddTestInterceptor()->set_main_intercept_job(std::move(job)); 10866 AddTestInterceptor()->set_main_intercept_job(std::move(job));
10741 10867
10742 req->Start(); 10868 req->Start();
10743 req->Cancel(); 10869 req->Cancel();
10744 base::RunLoop().RunUntilIdle(); 10870 base::RunLoop().RunUntilIdle();
10745 EXPECT_EQ(ERR_ABORTED, d.request_status()); 10871 EXPECT_EQ(ERR_ABORTED, d.request_status());
10746 EXPECT_EQ(0, d.received_redirect_count()); 10872 EXPECT_EQ(0, d.received_redirect_count());
10747 } 10873 }
10748 10874
10749 } // namespace net 10875 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698