1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.h"
6
7 #include <string>
8
9 #include "base/memory/scoped_ptr.h"
10 #include "base/prefs/pref_registry_simple.h"
11 #include "base/prefs/testing_pref_service.h"
12 #include "base/values.h"
13 #include "chrome/common/pref_names.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 class DataReductionProxyConfigTest : public testing::Test {
18 public:
SetUp()19 virtual void SetUp() {
20 PrefRegistrySimple* registry = pref_service_.registry();
21 registry->RegisterDictionaryPref(prefs::kProxy);
22 config_.reset(new DataReductionProxyChromeConfigurator(&pref_service_));
23 }
24
CheckProxyConfig(const std::string & expected_mode,const std::string & expected_server,const std::string & expected_bypass_list)25 void CheckProxyConfig(
26 const std::string& expected_mode,
27 const std::string& expected_server,
28 const std::string& expected_bypass_list) {
29
30 const base::DictionaryValue* dict =
31 pref_service_.GetDictionary(prefs::kProxy);
32 std::string mode;
33 std::string server;
34 std::string bypass_list;
35 dict->GetString("mode", &mode);
36 ASSERT_EQ(expected_mode, mode);
37 dict->GetString("server", &server);
38 ASSERT_EQ(expected_server, server);
39 dict->GetString("bypass_list", &bypass_list);
40 ASSERT_EQ(expected_bypass_list, bypass_list);
41 }
42
43 scoped_ptr<DataReductionProxyChromeConfigurator> config_;
44 TestingPrefServiceSimple pref_service_;
45 };
46
TEST_F(DataReductionProxyConfigTest,TestUnrestricted)47 TEST_F(DataReductionProxyConfigTest, TestUnrestricted) {
48 config_->Enable(false,
49 false,
50 "https://www.foo.com:443/",
51 "http://www.bar.com:80/",
52 "");
53 CheckProxyConfig(
54 "fixed_servers",
55 "http=https://www.foo.com:443,http://www.bar.com:80,direct://;",
56 "");
57 }
58
TEST_F(DataReductionProxyConfigTest,TestUnrestrictedSSL)59 TEST_F(DataReductionProxyConfigTest, TestUnrestrictedSSL) {
60 config_->Enable(false,
61 false,
62 "https://www.foo.com:443/",
63 "http://www.bar.com:80/",
64 "http://www.ssl.com:80/");
65 CheckProxyConfig(
66 "fixed_servers",
67 "http=https://www.foo.com:443,http://www.bar.com:80,direct://;"
68 "https=http://www.ssl.com:80,direct://;",
69 "");
70 }
71
TEST_F(DataReductionProxyConfigTest,TestUnrestrictedWithBypassRule)72 TEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithBypassRule) {
73 config_->AddHostPatternToBypass("<local>");
74 config_->AddHostPatternToBypass("*.goo.com");
75 config_->Enable(false,
76 false,
77 "https://www.foo.com:443/",
78 "http://www.bar.com:80/",
79 "");
80 CheckProxyConfig(
81 "fixed_servers",
82 "http=https://www.foo.com:443,http://www.bar.com:80,direct://;",
83 "<local>, *.goo.com");
84 }
85
TEST_F(DataReductionProxyConfigTest,TestUnrestrictedWithoutFallback)86 TEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithoutFallback) {
87 config_->Enable(false, false, "https://www.foo.com:443/", "", "");
88 CheckProxyConfig("fixed_servers",
89 "http=https://www.foo.com:443,direct://;",
90 "");
91 }
92
TEST_F(DataReductionProxyConfigTest,TestRestricted)93 TEST_F(DataReductionProxyConfigTest, TestRestricted) {
94 config_->Enable(true,
95 false,
96 "https://www.foo.com:443/",
97 "http://www.bar.com:80/",
98 "");
99 CheckProxyConfig("fixed_servers",
100 "http=http://www.bar.com:80,direct://;",
101 "");
102 }
103
TEST_F(DataReductionProxyConfigTest,TestFallbackRestricted)104 TEST_F(DataReductionProxyConfigTest, TestFallbackRestricted) {
105 config_->Enable(false,
106 true,
107 "https://www.foo.com:443/",
108 "http://www.bar.com:80/",
109 "");
110 CheckProxyConfig("fixed_servers",
111 "http=https://www.foo.com:443,direct://;",
112 "");
113 }
114
TEST_F(DataReductionProxyConfigTest,TestBothRestricted)115 TEST_F(DataReductionProxyConfigTest, TestBothRestricted) {
116 config_->Enable(true,
117 true,
118 "https://www.foo.com:443/",
119 "http://www.bar.com:80/",
120 "");
121 CheckProxyConfig("system", "", "");
122 }
123
TEST_F(DataReductionProxyConfigTest,TestDisable)124 TEST_F(DataReductionProxyConfigTest, TestDisable) {
125 config_->Disable();
126 CheckProxyConfig("system", "", "");
127 }
128
129
TEST_F(DataReductionProxyConfigTest,TestBypassList)130 TEST_F(DataReductionProxyConfigTest, TestBypassList) {
131 config_->AddHostPatternToBypass("http://www.google.com");
132 config_->AddHostPatternToBypass("fefe:13::abc/33");
133 config_->AddURLPatternToBypass("foo.org/images/*");
134 config_->AddURLPatternToBypass("http://foo.com/*");
135 config_->AddURLPatternToBypass("http://baz.com:22/bar/*");
136 config_->AddURLPatternToBypass("http://*bat.com/bar/*");
137
138 std::string expected[] = {
139 "http://www.google.com",
140 "fefe:13::abc/33",
141 "foo.org",
142 "http://foo.com",
143 "http://baz.com:22",
144 "http://*bat.com"
145 };
146
147 ASSERT_EQ(config_->bypass_rules_.size(), 6u);
148 int i = 0;
149 for (std::vector<std::string>::iterator it = config_->bypass_rules_.begin();
150 it != config_->bypass_rules_.end(); ++it) {
151 EXPECT_EQ(expected[i++], *it);
152 }
153 }
154
155