1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox_proxy_settings.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/proxy/proxy_config.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FirefoxProxySettingsTest : public testing::Test {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TestFirefoxProxySettings : public FirefoxProxySettings {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestFirefoxProxySettings() {}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool TestGetSettingsFromFile(const FilePath& pref_file,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      FirefoxProxySettings* settings) {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetSettingsFromFile(pref_file, settings);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(FirefoxProxySettingsTest, TestParse) {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FirefoxProxySettings settings;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath js_pref_path;
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &js_pref_path));
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  js_pref_path = js_pref_path.AppendASCII("firefox3_pref.js");
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(TestFirefoxProxySettings::TestGetSettingsFromFile(js_pref_path,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                                &settings));
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(FirefoxProxySettings::MANUAL, settings.config_type());
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http_proxy", settings.http_proxy());
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1111, settings.http_proxy_port());
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("ssl_proxy", settings.ssl_proxy());
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2222, settings.ssl_proxy_port());
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("ftp_proxy", settings.ftp_proxy());
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(3333, settings.ftp_proxy_port());
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("gopher_proxy", settings.gopher_proxy());
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(4444, settings.gopher_proxy_port());
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("socks_host", settings.socks_host());
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(5555, settings.socks_port());
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(FirefoxProxySettings::V4, settings.socks_version());
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(3U, settings.proxy_bypass_list().size());
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("localhost", settings.proxy_bypass_list()[0]);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("127.0.0.1", settings.proxy_bypass_list()[1]);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("noproxy.com", settings.proxy_bypass_list()[2]);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.autoconfig_url());
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Test that ToProxyConfig() properly translates into a net::ProxyConfig.
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::ProxyConfig config;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(settings.ToProxyConfig(&config));
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  {
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    net::ProxyConfig expected_config;
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    expected_config.proxy_rules().ParseFromString("http=http_proxy:1111; "
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                  "https=ssl_proxy:2222; "
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                  "ftp=ftp_proxy:3333; "
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                  "socks=socks_host:5555");
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    expected_config.proxy_rules().bypass_rules.ParseFromString(
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        "*localhost,  127.0.0.1, *noproxy.com");
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(FirefoxProxySettingsTest, TestParseAutoConfigUrl) {
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FirefoxProxySettings settings;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath js_pref_path;
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &js_pref_path));
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  js_pref_path = js_pref_path.AppendASCII("firefox3_pref_pac_url.js");
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(TestFirefoxProxySettings::TestGetSettingsFromFile(js_pref_path,
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                                &settings));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(FirefoxProxySettings::AUTO_FROM_URL, settings.config_type());
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Everything should be empty except for the autoconfig URL.
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http://custom-pac-url/", settings.autoconfig_url());
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.http_proxy());
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.http_proxy_port());
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.ssl_proxy());
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.ssl_proxy_port());
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.ftp_proxy());
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.ftp_proxy_port());
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.gopher_proxy());
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.gopher_proxy_port());
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", settings.socks_host());
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.socks_port());
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, settings.socks_port());
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0U, settings.proxy_bypass_list().size());
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Test that ToProxyConfig() properly translates into a net::ProxyConfig.
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::ProxyConfig config;
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(settings.ToProxyConfig(&config));
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(config.Equals(net::ProxyConfig::CreateFromCustomPacURL(
993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      GURL("http://custom-pac-url/"))));
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
101