1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file. 4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.h" 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <string> 8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/memory/scoped_ptr.h" 10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/prefs/pref_registry_simple.h" 11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/prefs/testing_pref_service.h" 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/values.h" 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/common/pref_names.h" 14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass DataReductionProxyConfigTest : public testing::Test { 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetUp() { 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PrefRegistrySimple* registry = pref_service_.registry(); 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterDictionaryPref(prefs::kProxy); 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_.reset(new DataReductionProxyChromeConfigurator(&pref_service_)); 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void CheckProxyConfig( 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_mode, 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_server, 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_bypass_list) { 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::DictionaryValue* dict = 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch pref_service_.GetDictionary(prefs::kProxy); 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string mode; 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string server; 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string bypass_list; 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("mode", &mode); 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_mode, mode); 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("server", &server); 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_server, server); 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("bypass_list", &bypass_list); 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_bypass_list, bypass_list); 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<DataReductionProxyChromeConfigurator> config_; 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch TestingPrefServiceSimple pref_service_; 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 47a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestricted) { 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(false, 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig( 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fixed_servers", 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,http://www.bar.com:80,direct://;", 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestUnrestrictedSSL) { 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) config_->Enable(false, 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false, 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "https://www.foo.com:443/", 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.ssl.com:80/"); 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CheckProxyConfig( 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "fixed_servers", 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http=https://www.foo.com:443,http://www.bar.com:80,direct://;" 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "https=http://www.ssl.com:80,direct://;", 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 72a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithBypassRule) { 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("<local>"); 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("*.goo.com"); 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(false, 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig( 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fixed_servers", 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,http://www.bar.com:80,direct://;", 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "<local>, *.goo.com"); 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 86a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithoutFallback) { 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) config_->Enable(false, false, "https://www.foo.com:443/", "", ""); 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("fixed_servers", 89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,direct://;", 90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 93a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestRestricted) { 94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(true, 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("fixed_servers", 100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=http://www.bar.com:80,direct://;", 101a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestFallbackRestricted) { 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config_->Enable(false, 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "https://www.foo.com:443/", 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) CheckProxyConfig("fixed_servers", 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http=https://www.foo.com:443,direct://;", 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ""); 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestBothRestricted) { 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config_->Enable(true, 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "https://www.foo.com:443/", 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) CheckProxyConfig("system", "", ""); 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 124a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestDisable) { 125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Disable(); 126a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("system", "", ""); 127a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 130a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestBypassList) { 131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("http://www.google.com"); 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("fefe:13::abc/33"); 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("foo.org/images/*"); 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://foo.com/*"); 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://baz.com:22/bar/*"); 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://*bat.com/bar/*"); 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string expected[] = { 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://www.google.com", 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fefe:13::abc/33", 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "foo.org", 142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://foo.com", 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://baz.com:22", 144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://*bat.com" 145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(config_->bypass_rules_.size(), 6u); 148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int i = 0; 149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (std::vector<std::string>::iterator it = config_->bypass_rules_.begin(); 150a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch it != config_->bypass_rules_.end(); ++it) { 151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(expected[i++], *it); 152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 154a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 155