// Copyright 2018 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 "chromeos/printing/printer_configuration.h"
#include "chromeos/printing/uri_components.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

TEST(PrinterConfigurationTest, EmptyScheme) {
  auto result = chromeos::ParseUri("://hostname.com/");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, JustScheme) {
  auto result = chromeos::ParseUri("ipps://");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, InvalidUriDanglingPort) {
  auto result = chromeos::ParseUri("ipp://192.168.1.1:");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, InvalidUriEmptyPort) {
  auto result = chromeos::ParseUri("ipp://192.168.1.1:/printer");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, InvalidPort) {
  auto result = chromeos::ParseUri("ipp://1.2.3.4:abcd");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, MissingScheme) {
  auto result = chromeos::ParseUri("/10.2.12.3/");
  EXPECT_FALSE(result.has_value());
}

TEST(PrinterConfigurationTest, ParseUriIp) {
  auto result = chromeos::ParseUri("ipp://192.168.1.5");

  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->scheme(), "ipp");
  EXPECT_EQ(result->host(), "192.168.1.5");
  EXPECT_TRUE(result->path().empty());
}

TEST(PrinterConfigurationTest, ParseUriPort) {
  auto result = chromeos::ParseUri("ipp://1.2.3.4:4444");

  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->port(), 4444);
}

TEST(PrinterConfigurationTest, ParseTrailingSlash) {
  auto result = chromeos::ParseUri("ipp://1.2.3.4/");
  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->path(), "/");
  EXPECT_EQ(result->host(), "1.2.3.4");
}

TEST(PrinterConfigurationTest, ParseUriHostNameAndPort) {
  auto result = chromeos::ParseUri("ipp://chromium.org:8");
  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->port(), 8);
  EXPECT_EQ(result->host(), "chromium.org");
}

TEST(PrinterConfigurationTest, ParseUriPathNoPort) {
  auto result = chromeos::ParseUri("ipps://chromium.org/printers/printprint");
  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->host(), "chromium.org");
  EXPECT_EQ(result->path(), "/printers/printprint");
}

TEST(PrinterConfigurationTest, ParseUriSubdomainQueueAndPort) {
  auto result =
      chromeos::ParseUri("ipp://codesearch.chromium.org:1234/ipp/print");
  ASSERT_TRUE(result.has_value());
  EXPECT_EQ(result->host(), "codesearch.chromium.org");
  EXPECT_EQ(result->port(), 1234);
  EXPECT_EQ(result->path(), "/ipp/print");
}

TEST(PrinterConfigurationTest, RequiresIpResolution) {
  chromeos::Printer printer;
  printer.set_effective_uri("");
  printer.set_id("zeroconf-testid");
  printer.set_uri("ipp://test.local:631/ipp/print");
  EXPECT_TRUE(printer.RequiresIpResolution());
}

// In this case we expect RequiresIpResolution() to return false since
// |effective_uri_| has already been computed.
TEST(PrinterConfigurationTest, RequiresIpResolutionNonEmptyEffectiveUri) {
  chromeos::Printer printer;
  printer.set_effective_uri("test.local:631");
  printer.set_id("zeroconf-testid");
  printer.set_uri("ipp://test.local:631/ipp/print");
  EXPECT_FALSE(printer.RequiresIpResolution());
}

// In this case we expect RequiresIpResolution() to return false since |id_|
// does not have the "zeroconf-" prefix.
TEST(PrinterConfigurationTest, RequiresIpResolutionNotZeroconf) {
  chromeos::Printer printer;
  printer.set_effective_uri("");
  printer.set_id("testid");
  printer.set_uri("ipp://test.local:631/ipp/print");
  EXPECT_FALSE(printer.RequiresIpResolution());
}

// In this case we expect RequiresIpResolution() to return false since the
// hostname in |uri_| does not end with ".local".
TEST(PrinterConfigurationTest, RequiresIpResolutionNoLocal) {
  chromeos::Printer printer;
  printer.set_effective_uri("");
  printer.set_id("zeroconf-testid");
  printer.set_uri("ipp://localhost:631/ipp/print");
  EXPECT_FALSE(printer.RequiresIpResolution());
}

}  // namespace
