blob: b98dd940a7e86f5abde2ad774f3a2d6bdfac49f8 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/crosapi/network_settings_translation.h"
#include "chromeos/crosapi/mojom/network_settings_service.mojom.h"
#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
#include "components/proxy_config/proxy_config_dictionary.h"
#include "net/base/proxy_server.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
constexpr char kPacUrl[] = "http://pac.pac/";
base::Value::Dict GetPacProxyConfig(const std::string& pac_url,
bool pac_mandatory) {
return ProxyConfigDictionary::CreatePacScript(pac_url, pac_mandatory);
}
base::Value::Dict GetManualProxyConfig(const std::string& proxy_servers,
const std::string& bypass_list) {
return ProxyConfigDictionary::CreateFixedServers(proxy_servers, bypass_list);
}
} // namespace
namespace crosapi {
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyDirect) {
ProxyConfigDictionary proxy_dict(ProxyConfigDictionary::CreateDirect());
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict,
/*wpad_url=*/GURL(""));
EXPECT_TRUE(actual->proxy_settings->is_direct());
}
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyWpadNoUrl) {
ProxyConfigDictionary proxy_dict(ProxyConfigDictionary::CreateAutoDetect());
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict,
/*wpad_url=*/GURL(""));
GURL default_wpad_url("http://wpad/wpad.dat");
ASSERT_TRUE(actual->proxy_settings->is_wpad());
EXPECT_EQ(actual->proxy_settings->get_wpad()->pac_url, default_wpad_url);
}
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyWpadUrl) {
GURL wpad_url(kPacUrl);
ProxyConfigDictionary proxy_dict(ProxyConfigDictionary::CreateAutoDetect());
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict, wpad_url);
ASSERT_TRUE(actual->proxy_settings->is_wpad());
EXPECT_EQ(actual->proxy_settings->get_wpad()->pac_url, wpad_url);
}
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyPacMandatory) {
ProxyConfigDictionary proxy_dict(
GetPacProxyConfig(kPacUrl, /*pac_mandatory=*/true));
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict,
/*wpad_url=*/GURL(""));
ASSERT_TRUE(actual->proxy_settings->is_pac());
EXPECT_EQ(actual->proxy_settings->get_pac()->pac_url, GURL(kPacUrl));
EXPECT_EQ(actual->proxy_settings->get_pac()->pac_mandatory, true);
}
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyPacNotMandatory) {
ProxyConfigDictionary proxy_dict(
GetPacProxyConfig(kPacUrl, /*pac_mandatory=*/false));
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict,
/*wpad_url=*/GURL(""));
ASSERT_TRUE(actual->proxy_settings->is_pac());
EXPECT_EQ(actual->proxy_settings->get_pac()->pac_url, GURL(kPacUrl));
EXPECT_EQ(actual->proxy_settings->get_pac()->pac_mandatory, false);
}
TEST(NetworkSettingsTranslationTest, ProxyConfigToCrosapiProxyManual) {
std::string proxy_servers =
"http=proxy:80;http=proxy2:80;https=secure_proxy:81;socks=socks_proxy:"
"82;";
std::string bypass_list = "localhost;google.com;";
ProxyConfigDictionary proxy_dict(
GetManualProxyConfig(proxy_servers, bypass_list));
crosapi::mojom::ProxyConfigPtr actual =
crosapi::ProxyConfigToCrosapiProxy(&proxy_dict,
/*wpad_url=*/GURL(""));
ASSERT_TRUE(actual->proxy_settings->is_manual());
std::vector<crosapi::mojom::ProxyLocationPtr> proxy_ptr =
std::move(actual->proxy_settings->get_manual()->http_proxies);
ASSERT_EQ(proxy_ptr.size(), 2u);
EXPECT_EQ(proxy_ptr[0]->host, "proxy");
EXPECT_EQ(proxy_ptr[0]->port, 80);
EXPECT_EQ(proxy_ptr[1]->host, "proxy2");
EXPECT_EQ(proxy_ptr[1]->port, 80);
proxy_ptr =
std::move(actual->proxy_settings->get_manual()->secure_http_proxies);
ASSERT_EQ(proxy_ptr.size(), 1u);
EXPECT_EQ(proxy_ptr[0]->host, "secure_proxy");
EXPECT_EQ(proxy_ptr[0]->port, 81);
proxy_ptr = std::move(actual->proxy_settings->get_manual()->socks_proxies);
ASSERT_EQ(proxy_ptr.size(), 1u);
EXPECT_EQ(proxy_ptr[0]->host, "socks_proxy");
EXPECT_EQ(proxy_ptr[0]->port, 82);
const std::vector<std::string> exclude_domains =
actual->proxy_settings->get_manual()->exclude_domains;
ASSERT_EQ(exclude_domains.size(), 2u);
EXPECT_EQ(exclude_domains[0], "localhost");
EXPECT_EQ(exclude_domains[1], "google.com");
}
TEST(NetworkSettingsTranslationTest, CrosapiProxyToProxyConfigDirect) {
crosapi::mojom::ProxyConfigPtr ptr = crosapi::mojom::ProxyConfig::New();
ptr->proxy_settings = crosapi::mojom::ProxySettings::NewDirect(
crosapi::mojom::ProxySettingsDirect::New());
EXPECT_EQ(CrosapiProxyToProxyConfig(std::move(ptr)).GetDictionary(),
ProxyConfigDictionary::CreateDirect());
}
TEST(NetworkSettingsTranslationTest, CrosapiProxyToProxyConfigWpad) {
crosapi::mojom::ProxyConfigPtr ptr = crosapi::mojom::ProxyConfig::New();
crosapi::mojom::ProxySettingsWpadPtr wpad =
crosapi::mojom::ProxySettingsWpad::New();
wpad->pac_url = GURL("pac.pac");
ptr->proxy_settings = crosapi::mojom::ProxySettings::NewWpad(std::move(wpad));
EXPECT_EQ(CrosapiProxyToProxyConfig(std::move(ptr)).GetDictionary(),
ProxyConfigDictionary::CreateAutoDetect());
}
TEST(NetworkSettingsTranslationTest, CrosapiProxyToProxyConfigPac) {
crosapi::mojom::ProxyConfigPtr ptr = crosapi::mojom::ProxyConfig::New();
crosapi::mojom::ProxySettingsPacPtr pac =
crosapi::mojom::ProxySettingsPac::New();
pac->pac_url = GURL(kPacUrl);
pac->pac_mandatory = true;
ptr->proxy_settings = crosapi::mojom::ProxySettings::NewPac(pac.Clone());
EXPECT_EQ(CrosapiProxyToProxyConfig(ptr.Clone()).GetDictionary(),
GetPacProxyConfig(kPacUrl, true));
pac->pac_mandatory = false;
ptr->proxy_settings = crosapi::mojom::ProxySettings::NewPac(pac.Clone());
EXPECT_EQ(CrosapiProxyToProxyConfig(std::move(ptr)).GetDictionary(),
GetPacProxyConfig(kPacUrl, false));
}
TEST(NetworkSettingsTranslationTest, CrosapiProxyToProxyConfigManual) {
crosapi::mojom::ProxyConfigPtr ptr = crosapi::mojom::ProxyConfig::New();
crosapi::mojom::ProxySettingsManualPtr manual =
crosapi::mojom::ProxySettingsManual::New();
crosapi::mojom::ProxyLocationPtr location =
crosapi::mojom::ProxyLocation::New();
location->host = "proxy1";
location->port = 80;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kHttp;
manual->http_proxies.push_back(location.Clone());
location->host = "proxy2";
location->port = 80;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kHttps;
manual->http_proxies.push_back(location.Clone());
location->host = "proxy3";
location->port = 83;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kUnknown;
manual->http_proxies.push_back(location.Clone());
location->host = "proxy4";
location->port = 84;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kInvalid;
manual->http_proxies.push_back(location.Clone());
location->host = "proxy5";
location->port = 85;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kDirect;
manual->http_proxies.push_back(location.Clone());
location->host = "proxy6";
location->port = 86;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kSocks5;
manual->http_proxies.push_back(location.Clone());
location->host = "secure_proxy";
location->port = 81;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kHttps;
manual->secure_http_proxies.push_back(location.Clone());
location->host = "socks_proxy";
location->port = 82;
location->scheme = crosapi::mojom::ProxyLocation::Scheme::kSocks4;
manual->socks_proxies.push_back(std::move(location));
manual->exclude_domains = {"localhost", "google.com"};
ptr->proxy_settings =
crosapi::mojom::ProxySettings::NewManual(std::move(manual));
EXPECT_EQ(
CrosapiProxyToProxyConfig(std::move(ptr)).GetDictionary(),
GetManualProxyConfig("http=http://proxy1:80;http=https://proxy2:80;"
"http=http://proxy3:83;http=invalid://proxy4:84;"
"http=direct://proxy5:85;http=socks5://proxy6:86;"
"https=https://secure_proxy:81;"
"socks=socks://socks_proxy:82",
/*bypass_list=*/"localhost;google.com"));
}
} // namespace crosapi