chromium/android_webview/browser/aw_pac_processor_unittest.cc

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <android/multinetwork.h>
#include <string>

#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<AwPacProcessor> 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