// 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 "net/base/scheme_host_port_matcher.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace net {

namespace {

TEST(SchemeHostPortMatcherTest, ParseMultipleRules) {
  SchemeHostPortMatcher matcher =
      SchemeHostPortMatcher::FromRawString(".google.com , .foobar.com:30");
  EXPECT_EQ(2u, matcher.rules().size());

  EXPECT_TRUE(matcher.Includes(GURL("http://baz.google.com:40")));
  EXPECT_FALSE(matcher.Includes(GURL("http://google.com:40")));
  EXPECT_TRUE(matcher.Includes(GURL("http://bar.foobar.com:30")));
  EXPECT_FALSE(matcher.Includes(GURL("http://bar.foobar.com")));
  EXPECT_FALSE(matcher.Includes(GURL("http://bar.foobar.com:33")));
}

TEST(SchemeHostPortMatcherTest, WithBadInputs) {
  SchemeHostPortMatcher matcher = SchemeHostPortMatcher::FromRawString(
      ":// , , .google.com , , http://baz");

  EXPECT_EQ(2u, matcher.rules().size());
  EXPECT_EQ("*.google.com", matcher.rules()[0]->ToString());
  EXPECT_EQ("http://baz", matcher.rules()[1]->ToString());

  EXPECT_TRUE(matcher.Includes(GURL("http://baz.google.com:40")));
  EXPECT_TRUE(matcher.Includes(GURL("http://baz")));
  EXPECT_FALSE(matcher.Includes(GURL("http://google.com")));
}

// Tests that URLMatcher does not include logic specific to ProxyBypassRules.
//  * Should not implicitly bypass localhost or link-local addresses
//  * Should not match proxy bypass specific rules like <-loopback> and <local>
//
// Historically, SchemeHostPortMatcher was refactored out of ProxyBypassRules.
// This test confirms that the layering separation is as expected.
TEST(SchemeHostPortMatcherTest, DoesNotMimicProxyBypassRules) {
  // Should not parse <-loopback> as its own rule (will treat it as a hostname
  // rule).
  SchemeHostPortMatcher matcher =
      SchemeHostPortMatcher::FromRawString("<-loopback>");
  EXPECT_EQ(1u, matcher.rules().size());
  EXPECT_EQ("<-loopback>", matcher.rules().front()->ToString());

  // Should not parse <local> as its own rule (will treat it as a hostname
  // rule).
  matcher = SchemeHostPortMatcher::FromRawString("<local>");
  EXPECT_EQ(1u, matcher.rules().size());
  EXPECT_EQ("<local>", matcher.rules().front()->ToString());

  // Should not implicitly match localhost or link-local addresses.
  matcher = SchemeHostPortMatcher::FromRawString("www.example.com");
  EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
            matcher.Evaluate(GURL("http://localhost")));
  EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
            matcher.Evaluate(GURL("http://169.254.1.1")));
}

}  // namespace

}  // namespace net
