• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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