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

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

Issue 1004853002: Create abstraction for DataReductionProxyParams. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sclittle comments Created 5 years, 9 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_config_unittest.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
index bd5a10db625155aa76b32d840a33a7e0c8d956dd..082e0f09a7858b37f7f9c457e2643d12f94f57d5 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
@@ -5,6 +5,7 @@
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h"
#include "base/command_line.h"
+#include "base/strings/string_util.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_service.h"
@@ -156,6 +157,15 @@ class DataReductionProxyConfigTest : public testing::Test {
test_context_->RunUntilIdle();
}
+ scoped_ptr<DataReductionProxyConfig> BuildConfig(
+ scoped_ptr<DataReductionProxyParams> params) {
+ params->EnableQuic(false);
+ return make_scoped_ptr(new DataReductionProxyConfig(
+ test_context_->task_runner(), test_context_->task_runner(),
+ test_context_->net_log(), params.Pass(), test_context_->configurator(),
+ test_context_->event_store()));
+ }
+
MockDataReductionProxyConfig* config() {
return test_context_->mock_config();
}
@@ -164,40 +174,15 @@ class DataReductionProxyConfigTest : public testing::Test {
return test_context_->test_configurator();
}
- TestDataReductionProxyParams* params() { return expected_params_.get(); }
+ TestDataReductionProxyParams* params() const {
+ return expected_params_.get();
+ }
private:
scoped_ptr<DataReductionProxyTestContext> test_context_;
scoped_ptr<TestDataReductionProxyParams> expected_params_;
};
-TEST_F(DataReductionProxyConfigTest, TestGetDataReductionProxyOrigin) {
- EXPECT_EQ(params()->DefaultOrigin(), config()->Origin().ToURI());
-}
-
-TEST_F(DataReductionProxyConfigTest, TestGetDataReductionProxyDevOrigin) {
- base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
- switches::kDataReductionProxyDev, params()->DefaultDevOrigin());
- ResetSettings(true, true, false, true, false);
- EXPECT_EQ(params()->DefaultDevOrigin(), config()->Origin().ToURI());
-}
-
-TEST_F(DataReductionProxyConfigTest, TestGetDataReductionProxies) {
- DataReductionProxyParams::DataReductionProxyList proxies =
- params()->GetAllowedProxies();
-
- unsigned int expected_proxy_size = 2u;
- EXPECT_EQ(expected_proxy_size, proxies.size());
-
- EXPECT_EQ(net::ProxyServer::FromURI(params()->DefaultOrigin(),
- net::ProxyServer::SCHEME_HTTP),
- proxies[0]);
-
- EXPECT_EQ(net::ProxyServer::FromURI(params()->DefaultFallbackOrigin(),
- net::ProxyServer::SCHEME_HTTP),
- proxies[1]);
-}
-
TEST_F(DataReductionProxyConfigTest, TestUpdateConfigurator) {
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kDataReductionProxyAlt, params()->DefaultAltOrigin());
@@ -309,4 +294,474 @@ TEST_F(DataReductionProxyConfigTest, TestOnIPAddressChanged) {
kSecureProxyCheckWithOKResponse, "OK", true, false, false);
}
+std::string GetRetryMapKeyFromOrigin(std::string origin) {
+ // The retry map has the scheme prefix for https but not for http.
+ return origin;
+}
+
+TEST_F(DataReductionProxyConfigTest, AreProxiesBypassed) {
+ const struct {
+ // proxy flags
+ bool allowed;
+ bool fallback_allowed;
+ bool alt_allowed;
+ // is https request
+ bool is_https;
+ // proxies in retry map
+ bool origin;
+ bool fallback_origin;
+ bool alt_origin;
+ bool alt_fallback_origin;
+ bool ssl_origin;
+
+ bool expected_result;
+ } tests[] = {
+ { // proxy flags
+ false,
+ false,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ false,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ true,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ false,
+ false,
+ true,
+ // is https request
+ true,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ true,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ true,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ false,
+ true,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ false,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ true,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ true,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ false,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ false,
+ true,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ false,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ true,
+ false,
+ false,
+ false,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ true,
+ false,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ false,
+ true,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ true,
+ true,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ false,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ true,
+ true,
+ false,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ false,
+ true,
+ false,
+ // is https request
+ false,
+ // proxies in retry map
+ false,
+ false,
+ true,
+ false,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ false,
+ true,
+ true,
+ false,
+ // expected result
+ false,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ false,
+ // proxies in retry map
+ true,
+ true,
+ true,
+ true,
+ true,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ true,
+ // proxies in retry map
+ true,
+ true,
+ true,
+ true,
+ true,
+ // expected result
+ true,
+ },
+ { // proxy flags
+ true,
+ true,
+ true,
+ // is https request
+ true,
+ // proxies in retry map
+ true,
+ true,
+ true,
+ true,
+ false,
+ // expected result
+ false,
+ },
+ };
+
+ // The retry map has the scheme prefix for https but not for http.
+ std::string origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultOrigin());
+ std::string fallback_origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultFallbackOrigin());
+ std::string alt_origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultAltOrigin());
+ std::string alt_fallback_origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultAltFallbackOrigin());
+ std::string ssl_origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultSSLOrigin());
+
+ for (size_t i = 0; i < arraysize(tests); ++i) {
+ net::ProxyConfig::ProxyRules rules;
+ std::vector<std::string> proxies;
+
+ if (tests[i].allowed)
+ proxies.push_back(origin);
+ if (tests[i].alt_allowed)
+ proxies.push_back(alt_origin);
+ if (tests[i].allowed && tests[i].fallback_allowed)
+ proxies.push_back(fallback_origin);
+ if (tests[i].alt_allowed && tests[i].fallback_allowed)
+ proxies.push_back(alt_fallback_origin);
+
+ std::string proxy_rules = "http=" + JoinString(proxies, ",") + ",direct://;"
+ + (tests[i].alt_allowed ? ("https=" + ssl_origin + ",direct://;") : "");
+
+ rules.ParseFromString(proxy_rules);
+
+ int flags = 0;
+ if (tests[i].allowed)
+ flags |= DataReductionProxyParams::kAllowed;
+ if (tests[i].alt_allowed)
+ flags |= DataReductionProxyParams::kAlternativeAllowed;
+ if (tests[i].fallback_allowed)
+ flags |= DataReductionProxyParams::kFallbackAllowed;
+ unsigned int has_definitions =
+ TestDataReductionProxyParams::HAS_EVERYTHING &
+ ~TestDataReductionProxyParams::HAS_DEV_ORIGIN &
+ ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN;
+ scoped_ptr<TestDataReductionProxyParams> params(
+ new TestDataReductionProxyParams(flags, has_definitions));
+ scoped_ptr<DataReductionProxyConfig> config = BuildConfig(params.Pass());
+
+ net::ProxyRetryInfoMap retry_map;
+ net::ProxyRetryInfo retry_info;
+ retry_info.bad_until = base::TimeTicks() + base::TimeDelta::Max();
+
+ if (tests[i].origin)
+ retry_map[origin] = retry_info;
+ if (tests[i].fallback_origin)
+ retry_map[fallback_origin] = retry_info;
+ if (tests[i].alt_origin)
+ retry_map[alt_origin] = retry_info;
+ if (tests[i].alt_fallback_origin)
+ retry_map[alt_fallback_origin] = retry_info;
+ if (tests[i].ssl_origin)
+ retry_map[ssl_origin] = retry_info;
+
+ bool was_bypassed = config->AreProxiesBypassed(retry_map,
+ rules,
+ tests[i].is_https,
+ NULL);
+
+ EXPECT_EQ(tests[i].expected_result, was_bypassed);
+ }
+}
+
+TEST_F(DataReductionProxyConfigTest, AreProxiesBypassedRetryDelay) {
+ std::string origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultOrigin());
+ std::string fallback_origin = GetRetryMapKeyFromOrigin(
+ TestDataReductionProxyParams::DefaultFallbackOrigin());
+
+ net::ProxyConfig::ProxyRules rules;
+ std::vector<std::string> proxies;
+
+ proxies.push_back(origin);
+ proxies.push_back(fallback_origin);
+
+ std::string proxy_rules = "http=" + JoinString(proxies, ",") + ",direct://;";
+
+ rules.ParseFromString(proxy_rules);
+
+ int flags = 0;
+ flags |= DataReductionProxyParams::kAllowed;
+ flags |= DataReductionProxyParams::kFallbackAllowed;
+ unsigned int has_definitions =
+ TestDataReductionProxyParams::HAS_EVERYTHING &
+ ~TestDataReductionProxyParams::HAS_DEV_ORIGIN &
+ ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN;
+ scoped_ptr<TestDataReductionProxyParams> params(
+ new TestDataReductionProxyParams(flags, has_definitions));
+ scoped_ptr<DataReductionProxyConfig> config = BuildConfig(params.Pass());
+
+ net::ProxyRetryInfoMap retry_map;
+ net::ProxyRetryInfo retry_info;
+
+ retry_info.bad_until = base::TimeTicks() + base::TimeDelta::Max();
+ retry_map[origin] = retry_info;
+
+ retry_info.bad_until = base::TimeTicks();
+ retry_map[fallback_origin] = retry_info;
+
+ bool was_bypassed = config->AreProxiesBypassed(retry_map,
+ rules,
+ false,
+ NULL);
+
+ EXPECT_FALSE(was_bypassed);
+
+ base::TimeDelta delay = base::TimeDelta::FromHours(2);
+ retry_info.bad_until = base::TimeTicks::Now() + delay;
+ retry_info.current_delay = delay;
+ retry_map[origin] = retry_info;
+
+ delay = base::TimeDelta::FromHours(1);
+ retry_info.bad_until = base::TimeTicks::Now() + delay;
+ retry_info.current_delay = delay;
+ retry_map[fallback_origin] = retry_info;
+
+ base::TimeDelta min_retry_delay;
+ was_bypassed = config->AreProxiesBypassed(retry_map,
+ rules,
+ false,
+ &min_retry_delay);
+ EXPECT_TRUE(was_bypassed);
+ EXPECT_EQ(delay, min_retry_delay);
+}
+
} // namespace data_reduction_proxy

Powered by Google App Engine
This is Rietveld 408576698