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

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc

Issue 1141023002: Record UMA about the response's proxy_server in the DRP bypass logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased on master again Created 5 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 side-by-side diff with in-line comments
Download patch
Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
index d84886a59173a7d3343357781354c71d3b372f99..80f26a9dbe3fd906957f8fcd539251abbb92a3f3 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
@@ -13,6 +13,7 @@
#include "base/run_loop.h"
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
+#include "base/test/histogram_tester.h"
#include "base/test/mock_entropy_provider.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_stats.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
@@ -84,16 +85,7 @@ class DataReductionProxyProtocolTest : public testing::Test {
}
void SetUp() override {
- test_context_ =
- DataReductionProxyTestContext::Builder()
- .WithParamsFlags(DataReductionProxyParams::kAllowed |
- DataReductionProxyParams::kFallbackAllowed |
- DataReductionProxyParams::kPromoAllowed)
- .WithParamsDefinitions(
- TestDataReductionProxyParams::HAS_EVERYTHING &
- ~TestDataReductionProxyParams::HAS_DEV_ORIGIN &
- ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)
- .Build();
+ test_context_ = DataReductionProxyTestContext::Builder().Build();
network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock());
net::NetworkChangeNotifier::SetTestNotificationsOnly(true);
test_context_->RunUntilIdle();
@@ -774,10 +766,48 @@ TEST_F(DataReductionProxyProtocolTest, BypassLogic) {
}
}
-TEST(DataReductionProxyProtocolStandaloneTest,
- BypassLogicAlwaysAppliesWhenViaHeaderPresent) {
- base::MessageLoopForIO message_loop;
+class DataReductionProxyBypassProtocolEndToEndTest : public testing::Test {
+ public:
+ DataReductionProxyBypassProtocolEndToEndTest() {}
+
+ void ResetDependencies() {
+ context_.reset(new net::TestURLRequestContext(true));
+ storage_.reset(new net::URLRequestContextStorage(context_.get()));
+ mock_socket_factory_.reset(new net::MockClientSocketFactory());
+ context_->set_client_socket_factory(mock_socket_factory_.get());
+ drp_test_context_ =
+ DataReductionProxyTestContext::Builder()
+ .WithMockClientSocketFactory(mock_socket_factory_.get())
+ .WithURLRequestContext(context_.get())
+ .Build();
+ }
+
+ void AttachToContextAndInit() {
+ drp_test_context_->AttachToURLRequestContext(storage_.get());
+ context_->Init();
+ }
+
+ net::TestURLRequestContext* context() { return context_.get(); }
+ net::URLRequestContextStorage* storage() { return storage_.get(); }
+ net::MockClientSocketFactory* mock_socket_factory() {
+ return mock_socket_factory_.get();
+ }
+ DataReductionProxyTestContext* drp_test_context() {
+ return drp_test_context_.get();
+ }
+
+ private:
+ base::MessageLoopForIO loop_;
+ scoped_ptr<net::TestURLRequestContext> context_;
+ scoped_ptr<net::URLRequestContextStorage> storage_;
+ scoped_ptr<net::MockClientSocketFactory> mock_socket_factory_;
+ scoped_ptr<DataReductionProxyTestContext> drp_test_context_;
+
+ DISALLOW_COPY_AND_ASSIGN(DataReductionProxyBypassProtocolEndToEndTest);
+};
+TEST_F(DataReductionProxyBypassProtocolEndToEndTest,
+ BypassLogicAlwaysAppliesWhenViaHeaderPresent) {
const struct {
const char* first_response;
bool expected_retry;
@@ -820,41 +850,21 @@ TEST(DataReductionProxyProtocolStandaloneTest,
for (const auto& test : test_cases) {
const std::string kPrimary = "https://unrecognized-drp.net:443";
- net::TestURLRequestContext context(true);
- net::URLRequestContextStorage storage(&context);
-
- net::MockClientSocketFactory mock_socket_factory;
- context.set_client_socket_factory(&mock_socket_factory);
-
- storage.set_proxy_service(
+ ResetDependencies();
+ storage()->set_proxy_service(
ProxyService::CreateFixed(kPrimary + ",direct://"));
-
- scoped_ptr<DataReductionProxyTestContext> drp_test_context(
- DataReductionProxyTestContext::Builder()
- .WithParamsFlags(DataReductionProxyParams::kAllowed |
- DataReductionProxyParams::kFallbackAllowed)
- .WithParamsDefinitions(
- TestDataReductionProxyParams::HAS_EVERYTHING &
- ~TestDataReductionProxyParams::HAS_DEV_ORIGIN &
- ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)
- .WithMockClientSocketFactory(&mock_socket_factory)
- .WithURLRequestContext(&context)
- .Build());
- drp_test_context->AttachToURLRequestContext(&storage);
- context.Init();
-
- drp_test_context->EnableDataReductionProxyWithSecureProxyCheckSuccess();
+ AttachToContextAndInit();
// The proxy is an HTTPS proxy, so set up the fake SSL socket data.
net::SSLSocketDataProvider ssl_socket(net::ASYNC, net::OK);
- mock_socket_factory.AddSSLSocketDataProvider(&ssl_socket);
+ mock_socket_factory()->AddSSLSocketDataProvider(&ssl_socket);
MockRead first_reads[] = {MockRead(test.first_response),
MockRead(""),
MockRead(net::SYNCHRONOUS, net::OK)};
net::StaticSocketDataProvider first_socket(
first_reads, arraysize(first_reads), nullptr, 0);
- mock_socket_factory.AddSocketDataProvider(&first_socket);
+ mock_socket_factory()->AddSocketDataProvider(&first_socket);
MockRead retry_reads[] = {MockRead("HTTP/1.1 200 OK\n\r\n\r"),
MockRead(""),
@@ -862,20 +872,76 @@ TEST(DataReductionProxyProtocolStandaloneTest,
net::StaticSocketDataProvider retry_socket(
retry_reads, arraysize(retry_reads), nullptr, 0);
if (test.expected_retry)
- mock_socket_factory.AddSocketDataProvider(&retry_socket);
+ mock_socket_factory()->AddSocketDataProvider(&retry_socket);
net::TestDelegate delegate;
- scoped_ptr<net::URLRequest> url_request(context.CreateRequest(
+ scoped_ptr<net::URLRequest> url_request(context()->CreateRequest(
GURL("http://www.google.com"), net::IDLE, &delegate));
url_request->Start();
- drp_test_context->RunUntilIdle();
+ drp_test_context()->RunUntilIdle();
EXPECT_EQ(test.expected_bypass_type,
- drp_test_context->io_data()->bypass_stats()->GetBypassType());
+ drp_test_context()->io_data()->bypass_stats()->GetBypassType());
// Check the bad proxy list.
EXPECT_EQ(
test.expected_bad_proxy,
- ContainsKey(context.proxy_service()->proxy_retry_info(), kPrimary));
+ ContainsKey(context()->proxy_service()->proxy_retry_info(), kPrimary));
+ }
+}
+
+TEST_F(DataReductionProxyBypassProtocolEndToEndTest,
+ ResponseProxyServerStateHistogram) {
+ const struct {
+ const char* proxy_rules;
+ bool enable_data_reduction_proxy;
+ const char* response_headers;
+ // |RESPONSE_PROXY_SERVER_STATUS_MAX| indicates no expected value.
+ DataReductionProxyBypassProtocol::ResponseProxyServerStatus expected_status;
+ } test_cases[] = {
+ {"direct://",
+ false,
+ "HTTP/1.1 200 OK\r\n\r\n",
+ DataReductionProxyBypassProtocol::RESPONSE_PROXY_SERVER_STATUS_EMPTY},
+ {"direct://",
+ true,
+ "HTTP/1.1 200 OK\r\nVia: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+ DataReductionProxyBypassProtocol::RESPONSE_PROXY_SERVER_STATUS_DRP},
+ {"unrecognized-drp.net",
+ false,
+ "HTTP/1.1 200 OK\r\n\r\n",
+ DataReductionProxyBypassProtocol::
+ RESPONSE_PROXY_SERVER_STATUS_NON_DRP_NO_VIA},
+ {"unrecognized-drp.net",
+ false,
+ "HTTP/1.1 200 OK\r\nVia: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+ DataReductionProxyBypassProtocol::
+ RESPONSE_PROXY_SERVER_STATUS_NON_DRP_WITH_VIA},
+ };
+
+ for (const auto& test : test_cases) {
+ ResetDependencies();
+ storage()->set_proxy_service(
+ net::ProxyService::CreateFixed(test.proxy_rules));
+ AttachToContextAndInit();
+ if (test.enable_data_reduction_proxy)
+ drp_test_context()->EnableDataReductionProxyWithSecureProxyCheckSuccess();
+
+ MockRead reads[] = {MockRead(test.response_headers),
+ MockRead(""),
+ MockRead(net::SYNCHRONOUS, net::OK)};
+ net::StaticSocketDataProvider socket(reads, arraysize(reads), nullptr, 0);
+ mock_socket_factory()->AddSocketDataProvider(&socket);
+
+ base::HistogramTester histogram_tester;
+ net::TestDelegate delegate;
+ scoped_ptr<net::URLRequest> request(context()->CreateRequest(
+ GURL("http://google.com"), net::IDLE, &delegate));
+ request->Start();
+ drp_test_context()->RunUntilIdle();
+
+ histogram_tester.ExpectUniqueSample(
+ "DataReductionProxy.ResponseProxyServerStatus", test.expected_status,
+ 1);
}
}

Powered by Google App Engine
This is Rietveld 408576698