summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-12 21:18:01 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-12 21:18:01 +0000
commitc454fe6790cf8d5a1a452c3f69f8dad6025622ab (patch)
tree46e12c1e5613b8e797df4433449aebb8cc154a6b /chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc
parentfc08ee38e066018877c81fe044895c59ec6d0fea (diff)
downloadchromium_src-c454fe6790cf8d5a1a452c3f69f8dad6025622ab.zip
chromium_src-c454fe6790cf8d5a1a452c3f69f8dad6025622ab.tar.gz
chromium_src-c454fe6790cf8d5a1a452c3f69f8dad6025622ab.tar.bz2
Move Proxy Settings API from chrome/browser/extensions to chrome/browser/eextensions/api/proxy
BUG=101244 TEST=no Review URL: http://codereview.chromium.org/9690006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126227 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc')
-rw-r--r--chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc365
1 files changed, 365 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc b/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc
new file mode 100644
index 0000000..a744a36
--- /dev/null
+++ b/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc
@@ -0,0 +1,365 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Unit tests for helper functions for the Chrome Extensions Proxy Settings API.
+
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/api/proxy/proxy_api_constants.h"
+#include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h"
+#include "chrome/browser/prefs/proxy_config_dictionary.h"
+#include "chrome/browser/prefs/proxy_prefs.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace keys = proxy_api_constants;
+
+namespace {
+
+const char kSamplePacScript[] = "test";
+const char kSamplePacScriptAsDataUrl[] =
+ "data:application/x-ns-proxy-autoconfig;base64,dGVzdA==";
+const char kSamplePacScriptUrl[] = "http://wpad/wpad.dat";
+
+// Helper function to create a ProxyServer dictionary as defined in the
+// extension API.
+DictionaryValue* CreateTestProxyServerDict(const std::string& host) {
+ DictionaryValue* dict = new DictionaryValue;
+ dict->SetString(keys::kProxyConfigRuleHost, host);
+ return dict;
+}
+
+// Helper function to create a ProxyServer dictionary as defined in the
+// extension API.
+DictionaryValue* CreateTestProxyServerDict(const std::string& schema,
+ const std::string& host,
+ int port) {
+ DictionaryValue* dict = new DictionaryValue;
+ dict->SetString(keys::kProxyConfigRuleScheme, schema);
+ dict->SetString(keys::kProxyConfigRuleHost, host);
+ dict->SetInteger(keys::kProxyConfigRulePort, port);
+ return dict;
+}
+
+} // namespace
+
+namespace proxy_api_helpers {
+
+TEST(ExtensionProxyApiHelpers, CreateDataURLFromPACScript) {
+ std::string out;
+ ASSERT_TRUE(CreateDataURLFromPACScript(kSamplePacScript, &out));
+ EXPECT_EQ(kSamplePacScriptAsDataUrl, out);
+}
+
+TEST(ExtensionProxyApiHelpers, CreatePACScriptFromDataURL) {
+ std::string out;
+ ASSERT_TRUE(CreatePACScriptFromDataURL(kSamplePacScriptAsDataUrl, &out));
+ EXPECT_EQ(kSamplePacScript, out);
+
+ EXPECT_FALSE(CreatePACScriptFromDataURL("http://www.google.com", &out));
+}
+
+TEST(ExtensionProxyApiHelpers, GetProxyModeFromExtensionPref) {
+ DictionaryValue proxy_config;
+ ProxyPrefs::ProxyMode mode;
+ std::string error;
+ bool bad_message = false;
+
+ // Test positive case.
+ proxy_config.SetString(
+ keys::kProxyConfigMode,
+ ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_DIRECT));
+ ASSERT_TRUE(GetProxyModeFromExtensionPref(&proxy_config, &mode, &error,
+ &bad_message));
+ EXPECT_EQ(ProxyPrefs::MODE_DIRECT, mode);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+
+ // Test negative case.
+ proxy_config.SetString(keys::kProxyConfigMode, "foobar");
+ EXPECT_FALSE(GetProxyModeFromExtensionPref(&proxy_config, &mode, &error,
+ &bad_message));
+ EXPECT_TRUE(bad_message);
+
+ // Do not test |error|, as an invalid enumeration value is considered an
+ // internal error. It should be filtered by the extensions API.
+}
+
+TEST(ExtensionProxyApiHelpers, GetPacUrlFromExtensionPref) {
+ std::string out;
+ std::string error;
+ bool bad_message = false;
+
+ DictionaryValue proxy_config;
+ proxy_config.SetString(
+ keys::kProxyConfigMode,
+ ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT));
+
+ // Currently we are still missing a PAC script entry.
+ // This is silently ignored.
+ ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(std::string(), out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+
+ // Set up a pac script.
+ DictionaryValue* pacScriptDict = new DictionaryValue;
+ pacScriptDict->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl);
+ proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict);
+
+ ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(kSamplePacScriptUrl, out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+}
+
+TEST(ExtensionProxyApiHelpers, GetPacDataFromExtensionPref) {
+ std::string out;
+ std::string error;
+ bool bad_message = false;
+
+ DictionaryValue proxy_config;
+ proxy_config.SetString(
+ keys::kProxyConfigMode,
+ ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT));
+
+ // Currently we are still missing a PAC data entry. This is silently ignored.
+ ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(std::string(), out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+
+ // Set up a PAC script.
+ DictionaryValue* pacScriptDict = new DictionaryValue;
+ pacScriptDict->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript);
+ proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict);
+
+ ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(kSamplePacScript, out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+}
+
+TEST(ExtensionProxyApiHelpers, GetProxyRulesStringFromExtensionPref) {
+ std::string out;
+ std::string error;
+ bool bad_message = false;
+
+ DictionaryValue proxy_config;
+ proxy_config.SetString(
+ keys::kProxyConfigMode,
+ ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS));
+
+ // Currently we are still missing a proxy config entry.
+ // This is silently ignored.
+ ASSERT_TRUE(
+ GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(std::string(), out);
+ EXPECT_EQ(std::string(), error);
+
+ DictionaryValue* proxy_rules = new DictionaryValue;
+ proxy_rules->Set(keys::field_name[1], CreateTestProxyServerDict("proxy1"));
+ proxy_rules->Set(keys::field_name[2], CreateTestProxyServerDict("proxy2"));
+ proxy_config.Set(keys::kProxyConfigRules, proxy_rules);
+
+ ASSERT_TRUE(
+ GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ("http=proxy1:80;https=proxy2:80", out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+}
+
+TEST(ExtensionProxyApiHelpers, GetBypassListFromExtensionPref) {
+ std::string out;
+ std::string error;
+ bool bad_message = false;
+
+ DictionaryValue proxy_config;
+ proxy_config.SetString(
+ keys::kProxyConfigMode,
+ ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS));
+
+ // Currently we are still missing a proxy config entry.
+ // This is silently ignored.
+ ASSERT_TRUE(
+ GetBypassListFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ(std::string(), out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+
+ ListValue* bypass_list = new ListValue;
+ bypass_list->Append(Value::CreateStringValue("host1"));
+ bypass_list->Append(Value::CreateStringValue("host2"));
+ DictionaryValue* proxy_rules = new DictionaryValue;
+ proxy_rules->Set(keys::kProxyConfigBypassList, bypass_list);
+ proxy_config.Set(keys::kProxyConfigRules, proxy_rules);
+
+ ASSERT_TRUE(
+ GetBypassListFromExtensionPref(&proxy_config, &out, &error,
+ &bad_message));
+ EXPECT_EQ("host1,host2", out);
+ EXPECT_EQ(std::string(), error);
+ EXPECT_FALSE(bad_message);
+}
+
+TEST(ExtensionProxyApiHelpers, CreateProxyConfigDict) {
+ std::string error;
+ scoped_ptr<DictionaryValue> exp_direct(ProxyConfigDictionary::CreateDirect());
+ scoped_ptr<DictionaryValue> out_direct(
+ CreateProxyConfigDict(ProxyPrefs::MODE_DIRECT, false, "", "", "", "",
+ &error));
+ EXPECT_TRUE(Value::Equals(exp_direct.get(), out_direct.get()));
+
+ scoped_ptr<DictionaryValue> exp_auto(
+ ProxyConfigDictionary::CreateAutoDetect());
+ scoped_ptr<DictionaryValue> out_auto(
+ CreateProxyConfigDict(ProxyPrefs::MODE_AUTO_DETECT, false, "", "", "", "",
+ &error));
+ EXPECT_TRUE(Value::Equals(exp_auto.get(), out_auto.get()));
+
+ scoped_ptr<DictionaryValue> exp_pac_url(
+ ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false));
+ scoped_ptr<DictionaryValue> out_pac_url(
+ CreateProxyConfigDict(ProxyPrefs::MODE_PAC_SCRIPT, false,
+ kSamplePacScriptUrl, "", "", "", &error));
+ EXPECT_TRUE(Value::Equals(exp_pac_url.get(), out_pac_url.get()));
+
+ scoped_ptr<DictionaryValue> exp_pac_data(
+ ProxyConfigDictionary::CreatePacScript(kSamplePacScriptAsDataUrl, false));
+ scoped_ptr<DictionaryValue> out_pac_data(
+ CreateProxyConfigDict(ProxyPrefs::MODE_PAC_SCRIPT, false, "",
+ kSamplePacScript, "", "", &error));
+ EXPECT_TRUE(Value::Equals(exp_pac_data.get(), out_pac_data.get()));
+
+ scoped_ptr<DictionaryValue> exp_fixed(
+ ProxyConfigDictionary::CreateFixedServers("foo:80", "localhost"));
+ scoped_ptr<DictionaryValue> out_fixed(
+ CreateProxyConfigDict(ProxyPrefs::MODE_FIXED_SERVERS, false, "", "",
+ "foo:80", "localhost", &error));
+ EXPECT_TRUE(Value::Equals(exp_fixed.get(), out_fixed.get()));
+
+ scoped_ptr<DictionaryValue> exp_system(ProxyConfigDictionary::CreateSystem());
+ scoped_ptr<DictionaryValue> out_system(
+ CreateProxyConfigDict(ProxyPrefs::MODE_SYSTEM, false, "", "", "", "",
+ &error));
+ EXPECT_TRUE(Value::Equals(exp_system.get(), out_system.get()));
+
+ // Neither of them should have set an error.
+ EXPECT_EQ(std::string(), error);
+}
+
+TEST(ExtensionProxyApiHelpers, GetProxyServer) {
+ DictionaryValue proxy_server_dict;
+ net::ProxyServer created;
+ std::string error;
+ bool bad_message = false;
+
+ // Test simplest case, no schema nor port specified --> defaults are used.
+ proxy_server_dict.SetString(keys::kProxyConfigRuleHost, "proxy_server");
+ ASSERT_TRUE(
+ GetProxyServer(&proxy_server_dict, net::ProxyServer::SCHEME_HTTP,
+ &created, &error, &bad_message));
+ EXPECT_EQ("PROXY proxy_server:80", created.ToPacString());
+ EXPECT_FALSE(bad_message);
+
+ // Test complete case.
+ proxy_server_dict.SetString(keys::kProxyConfigRuleScheme, "socks4");
+ proxy_server_dict.SetInteger(keys::kProxyConfigRulePort, 1234);
+ ASSERT_TRUE(
+ GetProxyServer(&proxy_server_dict, net::ProxyServer::SCHEME_HTTP,
+ &created, &error, &bad_message));
+ EXPECT_EQ("SOCKS proxy_server:1234", created.ToPacString());
+ EXPECT_FALSE(bad_message);
+}
+
+TEST(ExtensionProxyApiHelpers, JoinUrlList) {
+ bool bad_message = false;
+ ListValue list;
+ list.Append(Value::CreateStringValue("s1"));
+ list.Append(Value::CreateStringValue("s2"));
+ list.Append(Value::CreateStringValue("s3"));
+
+ std::string out;
+ std::string error;
+ ASSERT_TRUE(JoinUrlList(&list, ";", &out, &error, &bad_message));
+ EXPECT_EQ("s1;s2;s3", out);
+ EXPECT_FALSE(bad_message);
+}
+
+// This tests CreateProxyServerDict as well.
+TEST(ExtensionProxyApiHelpers, CreateProxyRulesDict) {
+ scoped_ptr<DictionaryValue> browser_pref(
+ ProxyConfigDictionary::CreateFixedServers(
+ "http=proxy1:80;https=proxy2:80;ftp=proxy3:80;socks=proxy4:80",
+ "localhost"));
+ ProxyConfigDictionary config(browser_pref.get());
+ scoped_ptr<DictionaryValue> extension_pref(CreateProxyRulesDict(config));
+ ASSERT_TRUE(extension_pref.get());
+
+ scoped_ptr<DictionaryValue> expected(new DictionaryValue);
+ expected->Set("proxyForHttp",
+ CreateTestProxyServerDict("http", "proxy1", 80));
+ expected->Set("proxyForHttps",
+ CreateTestProxyServerDict("http", "proxy2", 80));
+ expected->Set("proxyForFtp",
+ CreateTestProxyServerDict("http", "proxy3", 80));
+ expected->Set("fallbackProxy",
+ CreateTestProxyServerDict("socks4", "proxy4", 80));
+ ListValue* bypass_list = new ListValue;
+ bypass_list->Append(Value::CreateStringValue("localhost"));
+ expected->Set(keys::kProxyConfigBypassList, bypass_list);
+
+ EXPECT_TRUE(Value::Equals(expected.get(), extension_pref.get()));
+}
+
+// Test if a PAC script URL is specified.
+TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWithUrl) {
+ scoped_ptr<DictionaryValue> browser_pref(
+ ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false));
+ ProxyConfigDictionary config(browser_pref.get());
+ scoped_ptr<DictionaryValue> extension_pref(CreatePacScriptDict(config));
+ ASSERT_TRUE(extension_pref.get());
+
+ scoped_ptr<DictionaryValue> expected(new DictionaryValue);
+ expected->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl);
+ expected->SetBoolean(keys::kProxyConfigPacScriptMandatory, false);
+
+ EXPECT_TRUE(Value::Equals(expected.get(), extension_pref.get()));
+}
+
+// Test if a PAC script is encoded in a data URL.
+TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWidthData) {
+ scoped_ptr<DictionaryValue> browser_pref(
+ ProxyConfigDictionary::CreatePacScript(kSamplePacScriptAsDataUrl, false));
+ ProxyConfigDictionary config(browser_pref.get());
+ scoped_ptr<DictionaryValue> extension_pref(CreatePacScriptDict(config));
+ ASSERT_TRUE(extension_pref.get());
+
+ scoped_ptr<DictionaryValue> expected(new DictionaryValue);
+ expected->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript);
+ expected->SetBoolean(keys::kProxyConfigPacScriptMandatory, false);
+
+ EXPECT_TRUE(Value::Equals(expected.get(), extension_pref.get()));
+}
+
+TEST(ExtensionProxyApiHelpers, TokenizeToStringList) {
+ ListValue expected;
+ expected.Append(Value::CreateStringValue("s1"));
+ expected.Append(Value::CreateStringValue("s2"));
+ expected.Append(Value::CreateStringValue("s3"));
+
+ scoped_ptr<ListValue> out(TokenizeToStringList("s1;s2;s3", ";"));
+ EXPECT_TRUE(Value::Equals(&expected, out.get()));
+}
+
+} // namespace proxy_api_helpers
+} // namespace extensions