summaryrefslogtreecommitdiffstats
path: root/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc')
-rw-r--r--components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc135
1 files changed, 135 insertions, 0 deletions
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
new file mode 100644
index 0000000..8bc9147
--- /dev/null
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
@@ -0,0 +1,135 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate.h"
+
+#include <vector>
+
+#include "base/macros.h"
+#include "base/message_loop/message_loop.h"
+#include "base/metrics/field_trial.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator_test_utils.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_mutable_config_values.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params_test_utils.h"
+#include "net/proxy/proxy_server.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::_;
+
+namespace data_reduction_proxy {
+
+namespace {
+
+// Constructs and returns a proxy with the specified scheme.
+net::ProxyServer GetProxyWithScheme(net::ProxyServer::Scheme scheme) {
+ switch (scheme) {
+ case net::ProxyServer::SCHEME_HTTP:
+ return net::ProxyServer::FromURI("origin.net:443",
+ net::ProxyServer::SCHEME_HTTP);
+ case net::ProxyServer::SCHEME_HTTPS:
+ return net::ProxyServer::FromURI("https://origin.net:443",
+ net::ProxyServer::SCHEME_HTTP);
+ case net::ProxyServer::SCHEME_QUIC:
+ return net::ProxyServer::FromURI("quic://origin.net:443",
+ net::ProxyServer::SCHEME_QUIC);
+ default:
+ NOTREACHED();
+ return net::ProxyServer::FromURI("", net::ProxyServer::SCHEME_INVALID);
+ }
+}
+
+// Tests that the trusted SPDY proxy is verified correctly.
+TEST(DataReductionProxyDelegate, IsTrustedSpdyProxy) {
+ base::MessageLoopForIO message_loop_;
+ scoped_ptr<DataReductionProxyTestContext> test_context =
+ DataReductionProxyTestContext::Builder()
+ .WithConfigClient()
+ .WithTestConfigurator()
+ .WithMockDataReductionProxyService()
+ .Build();
+
+ const struct {
+ bool is_in_trusted_spdy_proxy_field_trial;
+ net::ProxyServer::Scheme first_proxy_scheme;
+ net::ProxyServer::Scheme second_proxy_scheme;
+ bool expect_proxy_is_trusted;
+ } tests[] = {
+ {false, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_INVALID,
+ false},
+ {true, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_INVALID,
+ false},
+ {true, net::ProxyServer::SCHEME_QUIC, net::ProxyServer::SCHEME_INVALID,
+ false},
+ {true, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_HTTP,
+ false},
+ {true, net::ProxyServer::SCHEME_INVALID, net::ProxyServer::SCHEME_INVALID,
+ false},
+ // First proxy is HTTPS, and second is invalid.
+ {true, net::ProxyServer::SCHEME_HTTPS, net::ProxyServer::SCHEME_INVALID,
+ true},
+ // First proxy is invalid, and second proxy is HTTPS.
+ {true, net::ProxyServer::SCHEME_INVALID, net::ProxyServer::SCHEME_HTTPS,
+ true},
+ // First proxy is HTTPS, and second is HTTP.
+ {true, net::ProxyServer::SCHEME_HTTPS, net::ProxyServer::SCHEME_HTTPS,
+ true},
+ // Second proxy is HTTPS, and first is HTTP.
+ {true, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_HTTPS,
+ true},
+ {true, net::ProxyServer::SCHEME_QUIC, net::ProxyServer::SCHEME_INVALID,
+ false},
+ {true, net::ProxyServer::SCHEME_QUIC, net::ProxyServer::SCHEME_HTTP,
+ false},
+ {true, net::ProxyServer::SCHEME_QUIC, net::ProxyServer::SCHEME_HTTPS,
+ true},
+ };
+ for (size_t i = 0; i < arraysize(tests); ++i) {
+ ASSERT_EQ(
+ tests[i].expect_proxy_is_trusted,
+ tests[i].is_in_trusted_spdy_proxy_field_trial &&
+ (tests[i].first_proxy_scheme == net::ProxyServer::SCHEME_HTTPS ||
+ tests[i].second_proxy_scheme == net::ProxyServer::SCHEME_HTTPS))
+ << i;
+
+ std::vector<net::ProxyServer> proxies_for_http;
+ net::ProxyServer first_proxy;
+ net::ProxyServer second_proxy;
+ if (tests[i].first_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
+ first_proxy = GetProxyWithScheme(tests[i].first_proxy_scheme);
+ proxies_for_http.push_back(first_proxy);
+ }
+ if (tests[i].second_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
+ second_proxy = GetProxyWithScheme(tests[i].second_proxy_scheme);
+ proxies_for_http.push_back(second_proxy);
+ }
+
+ scoped_ptr<DataReductionProxyMutableConfigValues> config_values =
+ DataReductionProxyMutableConfigValues::CreateFromParams(
+ test_context->test_params());
+ config_values->UpdateValues(proxies_for_http);
+
+ scoped_ptr<DataReductionProxyConfig> config(new DataReductionProxyConfig(
+ test_context->net_log(), std::move(config_values),
+ test_context->configurator(), test_context->event_creator()));
+
+ DataReductionProxyDelegate delegate(
+ test_context->io_data()->request_options(), config.get());
+
+ base::FieldTrialList field_trial_list(nullptr);
+ base::FieldTrialList::CreateFieldTrial(
+ params::GetTrustedSpdyProxyFieldTrialName(),
+ tests[i].is_in_trusted_spdy_proxy_field_trial ? "Enabled" : "Control");
+
+ EXPECT_EQ(tests[i].expect_proxy_is_trusted,
+ delegate.IsTrustedSpdyProxy(first_proxy) ||
+ delegate.IsTrustedSpdyProxy(second_proxy))
+ << i;
+ }
+}
+
+} // namespace
+
+} // namespace data_reduction_proxy \ No newline at end of file