// 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. #include "net/base/net_errors.h" #include "net/proxy/proxy_config.h" #include "net/proxy/proxy_info.h" #include "net/proxy/proxy_list.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { namespace { TEST(ProxyInfoTest, ProxyInfoIsDirectOnly) { // Test the is_direct_only() predicate. ProxyInfo info; // An empty ProxyInfo is not considered direct. EXPECT_FALSE(info.is_direct_only()); info.UseDirect(); EXPECT_TRUE(info.is_direct_only()); info.UsePacString("DIRECT"); EXPECT_TRUE(info.is_direct_only()); info.UsePacString("PROXY myproxy:80"); EXPECT_FALSE(info.is_direct_only()); info.UsePacString("DIRECT; PROXY myproxy:80"); EXPECT_TRUE(info.is_direct()); EXPECT_FALSE(info.is_direct_only()); info.UsePacString("PROXY myproxy:80; DIRECT"); EXPECT_FALSE(info.is_direct()); EXPECT_FALSE(info.is_direct_only()); EXPECT_EQ(2u, info.proxy_list().size()); EXPECT_EQ("PROXY myproxy:80;DIRECT", info.proxy_list().ToPacString()); // After falling back to direct, we shouldn't consider it DIRECT only. EXPECT_TRUE(info.Fallback(ERR_PROXY_CONNECTION_FAILED, BoundNetLog())); EXPECT_TRUE(info.is_direct()); EXPECT_FALSE(info.is_direct_only()); } } // namespace TEST(ProxyInfoTest, UseVsOverrideProxyList) { ProxyInfo info; info.config_id_ = 99; ProxyList proxy_list; proxy_list.Set("http://foo.com"); info.OverrideProxyList(proxy_list); EXPECT_EQ(99, info.config_id_); EXPECT_EQ("PROXY foo.com:80", info.proxy_list().ToPacString()); proxy_list.Set("http://bar.com"); info.UseProxyList(proxy_list); EXPECT_EQ(0, info.config_id_); EXPECT_EQ("PROXY bar.com:80", info.proxy_list().ToPacString()); } } // namespace net