Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc |
index 0c7559d7f5c2202eb1144ab73eeb0b728e9f7568..09ae8048bc34c203463f3b10ef7272ec88090432 100644 |
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc |
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc |
@@ -4,11 +4,19 @@ |
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor.h" |
+#include "base/files/file_path.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" |
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params_test_utils.h" |
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" |
#include "net/base/capturing_net_log.h" |
+#include "net/base/request_priority.h" |
#include "net/http/http_response_headers.h" |
+#include "net/test/embedded_test_server/embedded_test_server.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_intercepting_job_factory.h" |
#include "net/url_request/url_request_interceptor.h" |
@@ -143,4 +151,117 @@ TEST_F(DataReductionProxyInterceptorTest, TestJobFactoryChaining) { |
EXPECT_EQ(0, interceptor2->redirect_count()); |
EXPECT_EQ(1, interceptor2->response_count()); |
} |
+ |
+class DataReductionProxyInterceptorWithServerTest : public testing::Test { |
+ public: |
+ DataReductionProxyInterceptorWithServerTest() |
+ : context_(true) { |
+ context_.set_network_delegate(&network_delegate_); |
+ context_.set_net_log(&net_log_); |
+ } |
+ |
+ ~DataReductionProxyInterceptorWithServerTest() override { |
+ // URLRequestJobs may post clean-up tasks on destruction. |
+ base::RunLoop().RunUntilIdle(); |
+ } |
+ |
+ void SetUp() override { |
+ base::FilePath root_path, proxy_file_path, direct_file_path; |
+ PathService::Get(base::DIR_SOURCE_ROOT, &root_path); |
+ proxy_file_path = root_path.AppendASCII( |
+ "components/test/data/data_reduction_proxy/proxy"); |
+ direct_file_path = root_path.AppendASCII( |
+ "components/test/data/data_reduction_proxy/direct"); |
+ proxy_.ServeFilesFromDirectory(proxy_file_path); |
+ direct_.ServeFilesFromDirectory(direct_file_path); |
+ ASSERT_TRUE(proxy_.InitializeAndWaitUntilReady()); |
+ ASSERT_TRUE(direct_.InitializeAndWaitUntilReady()); |
+ |
+ params_.reset( |
+ new TestDataReductionProxyParams( |
+ DataReductionProxyParams::kAllowed, |
+ TestDataReductionProxyParams::HAS_EVERYTHING & |
+ ~TestDataReductionProxyParams::HAS_DEV_ORIGIN & |
+ ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)); |
+ params_->set_origin(proxy_.GetURL("/")); |
+ std::string proxy_name = |
+ net::HostPortPair::FromURL(GURL(params_->origin())).ToString(); |
+ proxy_service_.reset( |
+ net::ProxyService::CreateFixedFromPacResult( |
+ "PROXY " + proxy_name + "; DIRECT")); |
+ |
+ context_.set_proxy_service(proxy_service_.get()); |
+ |
+ event_store_.reset( |
+ new DataReductionProxyEventStore(loop_.message_loop_proxy())); |
+ |
+ DataReductionProxyInterceptor* interceptor = |
+ new DataReductionProxyInterceptor(params_.get(), NULL, |
+ event_store_.get()); |
+ |
+ scoped_ptr<net::URLRequestJobFactoryImpl> job_factory_impl( |
+ new net::URLRequestJobFactoryImpl()); |
+ job_factory_.reset( |
+ new net::URLRequestInterceptingJobFactory( |
+ job_factory_impl.Pass(), |
+ make_scoped_ptr(interceptor))); |
+ context_.set_job_factory(job_factory_.get()); |
+ context_.Init(); |
+ } |
+ |
+ |
+ const net::TestURLRequestContext& context() { |
+ return context_; |
+ } |
+ |
+ const net::test_server::EmbeddedTestServer& direct() { |
+ return direct_; |
+ } |
+ |
+ private: |
+ net::CapturingNetLog net_log_; |
+ net::TestNetworkDelegate network_delegate_; |
+ |
+ net::TestURLRequestContext context_; |
+ net::test_server::EmbeddedTestServer proxy_; |
+ net::test_server::EmbeddedTestServer direct_; |
+ scoped_ptr<TestDataReductionProxyParams> params_; |
+ scoped_ptr<net::ProxyService> proxy_service_; |
+ scoped_ptr<DataReductionProxyEventStore> event_store_; |
+ scoped_ptr<net::URLRequestJobFactory> job_factory_; |
+ |
+ base::MessageLoopForIO loop_; |
+}; |
+ |
+TEST_F(DataReductionProxyInterceptorWithServerTest, TestBypass) { |
+ // Tests the mechanics of proxy bypass work with a "real" server. For tests |
+ // that cover every imaginable response that could trigger a bypass, see: |
+ // DataReductionProxyProtocolTest. |
+ net::TestDelegate delegate; |
+ scoped_ptr<net::URLRequest> request( |
+ context().CreateRequest(direct().GetURL("/block10.html"), |
+ net::DEFAULT_PRIORITY, &delegate, NULL)); |
+ request->Start(); |
+ EXPECT_TRUE(request->is_pending()); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
+ EXPECT_EQ(net::OK, request->status().error()); |
+ EXPECT_EQ("hello", delegate.data_received()); |
+} |
+ |
+TEST_F(DataReductionProxyInterceptorWithServerTest, TestNoBypass) { |
+ net::TestDelegate delegate; |
+ scoped_ptr<net::URLRequest> request( |
+ context().CreateRequest(direct().GetURL("/noblock.html"), |
+ net::DEFAULT_PRIORITY, &delegate, NULL)); |
+ request->Start(); |
+ EXPECT_TRUE(request->is_pending()); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
+ EXPECT_EQ(net::OK, request->status().error()); |
+ EXPECT_EQ("hello", delegate.data_received()); |
+} |
+ |
} // namespace data_reduction_proxy |