172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file.
472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string>
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/prefs/proxy_config_dictionary.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstruct ProxyConfigHolder {
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyPrefs::ProxyMode mode;
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string pac_url;
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string proxy_server;
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string bypass_list;
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen};
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ProxyConfigDictionaryTest, CreateDirect) {
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> dict_value(ProxyConfigDictionary::CreateDirect());
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigDictionary dict(dict_value.get());
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigHolder h;
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetMode(&h.mode));
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ProxyPrefs::MODE_DIRECT, h.mode);
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ProxyConfigDictionaryTest, CreateAutoDetect) {
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> dict_value(
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ProxyConfigDictionary::CreateAutoDetect());
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigDictionary dict(dict_value.get());
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigHolder h;
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetMode(&h.mode));
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ProxyPrefs::MODE_AUTO_DETECT, h.mode);
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ProxyConfigDictionaryTest, CreatePacScript) {
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> dict_value(
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ProxyConfigDictionary::CreatePacScript("pac"));
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigDictionary dict(dict_value.get());
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigHolder h;
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetMode(&h.mode));
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ProxyPrefs::MODE_PAC_SCRIPT, h.mode);
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetPacUrl(&h.bypass_list));
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ("pac", h.bypass_list);
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ProxyConfigDictionaryTest, CreateFixedServers) {
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> dict_value(
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ProxyConfigDictionary::CreateFixedServers("http://1.2.3.4",
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                                "http://foo"));
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigDictionary dict(dict_value.get());
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigHolder h;
6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetMode(&h.mode));
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ProxyPrefs::MODE_FIXED_SERVERS, h.mode);
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetProxyServer(&h.proxy_server));
6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ("http://1.2.3.4", h.proxy_server);
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetBypassList(&h.bypass_list));
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ("http://foo", h.bypass_list);
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ProxyConfigDictionaryTest, CreateSystem) {
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> dict_value(ProxyConfigDictionary::CreateSystem());
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigDictionary dict(dict_value.get());
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ProxyConfigHolder h;
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dict.GetMode(&h.mode));
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ProxyPrefs::MODE_SYSTEM, h.mode);
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
85