15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/proxy_config_dictionary.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ProxyConfigHolder {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyPrefs::ProxyMode mode;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string pac_url;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string proxy_server;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bypass_list;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigDictionaryTest, CreateDirect) {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict_value(
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProxyConfigDictionary::CreateDirect());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigDictionary dict(dict_value.get());
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigHolder h;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetMode(&h.mode));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ProxyPrefs::MODE_DIRECT, h.mode);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigDictionaryTest, CreateAutoDetect) {
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict_value(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyConfigDictionary::CreateAutoDetect());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigDictionary dict(dict_value.get());
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigHolder h;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetMode(&h.mode));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ProxyPrefs::MODE_AUTO_DETECT, h.mode);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigDictionaryTest, CreatePacScript) {
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict_value(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyConfigDictionary::CreatePacScript("pac", false));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigDictionary dict(dict_value.get());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigHolder h;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetMode(&h.mode));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ProxyPrefs::MODE_PAC_SCRIPT, h.mode);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetPacUrl(&h.bypass_list));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("pac", h.bypass_list);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigDictionaryTest, CreateFixedServers) {
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict_value(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProxyConfigDictionary::CreateFixedServers("http://1.2.3.4",
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                "http://foo"));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigDictionary dict(dict_value.get());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigHolder h;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetMode(&h.mode));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ProxyPrefs::MODE_FIXED_SERVERS, h.mode);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetProxyServer(&h.proxy_server));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://1.2.3.4", h.proxy_server);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetBypassList(&h.bypass_list));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://foo", h.bypass_list);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyConfigDictionaryTest, CreateSystem) {
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> dict_value(
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProxyConfigDictionary::CreateSystem());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigDictionary dict(dict_value.get());
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfigHolder h;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetMode(&h.mode));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ProxyPrefs::MODE_SYSTEM, h.mode);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetPacUrl(&h.bypass_list));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetProxyServer(&h.proxy_server));
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dict.GetBypassList(&h.bypass_list));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
87