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" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/test/test_simple_task_runner.h" 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/values.h" 14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/common/pref_names.h" 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass DataReductionProxyConfigTest : public testing::Test { 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetUp() { 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PrefRegistrySimple* registry = pref_service_.registry(); 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterDictionaryPref(prefs::kProxy); 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) config_.reset(new DataReductionProxyChromeConfigurator( 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &pref_service_, 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new base::TestSimpleTaskRunner())); 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void CheckProxyConfig( 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_mode, 30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_server, 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& expected_bypass_list) { 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::DictionaryValue* dict = 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch pref_service_.GetDictionary(prefs::kProxy); 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string mode; 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string server; 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string bypass_list; 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("mode", &mode); 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_mode, mode); 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("server", &server); 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_server, server); 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->GetString("bypass_list", &bypass_list); 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(expected_bypass_list, bypass_list); 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<DataReductionProxyChromeConfigurator> config_; 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch TestingPrefServiceSimple pref_service_; 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 50a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestricted) { 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(false, 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig( 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fixed_servers", 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,http://www.bar.com:80,direct://;", 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestUnrestrictedSSL) { 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) config_->Enable(false, 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false, 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "https://www.foo.com:443/", 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.ssl.com:80/"); 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CheckProxyConfig( 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "fixed_servers", 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http=https://www.foo.com:443,http://www.bar.com:80,direct://;" 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "https=http://www.ssl.com:80,direct://;", 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 75a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithBypassRule) { 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("<local>"); 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("*.goo.com"); 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(false, 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig( 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fixed_servers", 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,http://www.bar.com:80,direct://;", 86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "<local>, *.goo.com"); 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 89a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestUnrestrictedWithoutFallback) { 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) config_->Enable(false, false, "https://www.foo.com:443/", "", ""); 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("fixed_servers", 92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=https://www.foo.com:443,direct://;", 93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 96a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestRestricted) { 97a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Enable(true, 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "https://www.foo.com:443/", 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("fixed_servers", 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http=http://www.bar.com:80,direct://;", 104a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ""); 105a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 106a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestFallbackRestricted) { 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config_->Enable(false, 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "https://www.foo.com:443/", 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) CheckProxyConfig("fixed_servers", 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http=https://www.foo.com:443,direct://;", 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ""); 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(DataReductionProxyConfigTest, TestBothRestricted) { 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) config_->Enable(true, 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "https://www.foo.com:443/", 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "http://www.bar.com:80/", 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ""); 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) CheckProxyConfig("system", "", ""); 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 127a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestDisable) { 128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->Disable(); 129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CheckProxyConfig("system", "", ""); 130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 133a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(DataReductionProxyConfigTest, TestBypassList) { 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("http://www.google.com"); 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddHostPatternToBypass("fefe:13::abc/33"); 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("foo.org/images/*"); 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://foo.com/*"); 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://baz.com:22/bar/*"); 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch config_->AddURLPatternToBypass("http://*bat.com/bar/*"); 140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string expected[] = { 142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://www.google.com", 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "fefe:13::abc/33", 144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "foo.org", 145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://foo.com", 146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://baz.com:22", 147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "http://*bat.com" 148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 150a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(config_->bypass_rules_.size(), 6u); 151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int i = 0; 152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (std::vector<std::string>::iterator it = config_->bypass_rules_.begin(); 153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch it != config_->bypass_rules_.end(); ++it) { 154a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(expected[i++], *it); 155a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 156a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 157a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 158