blob: f32bd5e2bd911cb29afb58cbde3fc1336986c928 [file] [log] [blame]
// 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