// Copyright 2020 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 #include #include "android_webview/browser/aw_pac_processor.h" #include "base/memory/raw_ptr.h" #include "base/test/task_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace android_webview { namespace { const std::string kScript = "function FindProxyForURL(url, host)\n" "{\n" "\treturn \"PROXY localhost:8080; PROXY localhost:8081; DIRECT \";\n" "}\n"; const std::string kScriptDnsResolve = "var x = dnsResolveEx(\"localhost\");\n" "function FindProxyForURL(url, host) {\n" "\treturn \"PROXY \" + x + \":80\";\n" "}"; const std::string kRequestUrl = "http://testurl.test"; } // namespace class AwPacProcessorTest : public testing::Test { public: void TearDown() override { delete pac_processor_; } protected: base::test::TaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; raw_ptr pac_processor_ = new AwPacProcessor(); }; TEST_F(AwPacProcessorTest, MakeProxyRequest) { EXPECT_TRUE(pac_processor_->SetProxyScript(kScript)); std::string result; EXPECT_TRUE(pac_processor_->MakeProxyRequest(kRequestUrl, &result)); EXPECT_EQ("PROXY localhost:8080;PROXY localhost:8081;DIRECT", result); } TEST_F(AwPacProcessorTest, MakeProxyRequestDnsResolve) { EXPECT_TRUE(pac_processor_->SetProxyScript(kScriptDnsResolve)); std::string result; EXPECT_TRUE(pac_processor_->MakeProxyRequest(kRequestUrl, &result)); EXPECT_EQ("PROXY 127.0.0.1:80", result); } TEST_F(AwPacProcessorTest, MultipleProxyRequest) { AwPacProcessor* other_pac_processor_ = new AwPacProcessor(); EXPECT_TRUE(pac_processor_->SetProxyScript(kScript)); EXPECT_TRUE(other_pac_processor_->SetProxyScript(kScriptDnsResolve)); std::string result; EXPECT_TRUE(pac_processor_->MakeProxyRequest(kRequestUrl, &result)); EXPECT_EQ("PROXY localhost:8080;PROXY localhost:8081;DIRECT", result); EXPECT_TRUE(other_pac_processor_->MakeProxyRequest(kRequestUrl, &result)); EXPECT_EQ("PROXY 127.0.0.1:80", result); delete other_pac_processor_; } TEST_F(AwPacProcessorTest, UnparseableScript) { EXPECT_FALSE(pac_processor_->SetProxyScript("")); std::string result; EXPECT_FALSE(pac_processor_->MakeProxyRequest(kRequestUrl, &result)); } } // namespace android_webview