Commit 6f8919b6 authored by Kalvin Lee's avatar Kalvin Lee Committed by Commit Bot

PpdProvider v3: complete ResolvePpdReference()

This change completes the implementation of
PpdProvider::ResolvePpdReference(). Note that
PpdProviderTest.CaseInsensitiveMakeAndModel does not yet pass, as
it exercises other unimplemented methods.

Bug: chromium:888189
Test: chromeos_unittests --gtest_filter='PpdProvider.RepeatedMakeModel'
Test: chromeos_unittests --gtest_filter='PpdProvider.UsbResolution'
Test: chromeos_unittests --gtest_filter='PpdProvider.ResolveUsbManufacturer'
Change-Id: Iea05ee2e8cb4fd5c86343ca0f14848dcf42dee60
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354907
Commit-Queue: Kalvin Lee <kdlee@chromium.org>
Reviewed-by: default avatarLuum Habtemariam <luum@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804096}
parent 8d9a5cd6
This diff is collapsed.
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "chromeos/printing/ppd_metadata_manager.h" #include "chromeos/printing/ppd_metadata_manager.h"
#include "chromeos/printing/printer_config_cache.h" #include "chromeos/printing/printer_config_cache.h"
#include "chromeos/printing/printer_configuration.h" #include "chromeos/printing/printer_configuration.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace chromeos { namespace chromeos {
...@@ -39,6 +40,11 @@ namespace chromeos { ...@@ -39,6 +40,11 @@ namespace chromeos {
namespace { namespace {
using PrinterDiscoveryType = PrinterSearchData::PrinterDiscoveryType; using PrinterDiscoveryType = PrinterSearchData::PrinterDiscoveryType;
using ::testing::AllOf;
using ::testing::Eq;
using ::testing::Field;
using ::testing::StrEq;
using ::testing::UnorderedElementsAre;
// A pseudo-ppd that should get cupsFilter lines extracted from it. // A pseudo-ppd that should get cupsFilter lines extracted from it.
const char kCupsFilterPpdContents[] = R"( const char kCupsFilterPpdContents[] = R"(
...@@ -321,8 +327,25 @@ class PpdProviderTest : public ::testing::Test { ...@@ -321,8 +327,25 @@ class PpdProviderTest : public ::testing::Test {
} }
} }
})"}, })"},
{"metadata_v3/index-13.json", {"metadata_v3/index-08.json",
R"({ R"({
"ppdIndex": {
"Some canonical reference": {
"ppdMetadata": [ {
"name": "unused.ppd"
} ]
}
}
})"},
{"metadata_v3/index-10.json",
R"({
"ppdIndex": {
"Some other canonical reference": {
"ppdMetadata": [ {
"name": "unused.ppd"
} ]
}
}
})"}, })"},
{"metadata_v3/usb-031f.json", {"metadata_v3/usb-031f.json",
R"({ R"({
...@@ -337,6 +360,15 @@ class PpdProviderTest : public ::testing::Test { ...@@ -337,6 +360,15 @@ class PpdProviderTest : public ::testing::Test {
})"}, })"},
{"metadata_v3/usb-03f0.json", ""}, {"metadata_v3/usb-03f0.json", ""},
{"metadata_v3/usb-1234.json", ""}, {"metadata_v3/usb-1234.json", ""},
{"metadata_v3/usb_vendor_ids.json", R"({
"entries": [ {
"vendorId": 799,
"vendorName": "Seven Ninety Nine LLC"
}, {
"vendorId": 1008,
"vendorName": "HP"
} ]
})"},
{"metadata_v3/reverse_index-en-01.json", {"metadata_v3/reverse_index-en-01.json",
R"({ R"({
"reverseIndex": { "reverseIndex": {
...@@ -565,7 +597,7 @@ TEST_F(PpdProviderTest, ManufacturersFetchNoServer) { ...@@ -565,7 +597,7 @@ TEST_F(PpdProviderTest, ManufacturersFetchNoServer) {
TEST_F(PpdProviderTest, RepeatedMakeModel) { TEST_F(PpdProviderTest, RepeatedMakeModel) {
auto provider = auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate}); PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer(); StartFakePpdServer();
PrinterSearchData unrecognized_printer; PrinterSearchData unrecognized_printer;
...@@ -608,7 +640,7 @@ TEST_F(PpdProviderTest, RepeatedMakeModel) { ...@@ -608,7 +640,7 @@ TEST_F(PpdProviderTest, RepeatedMakeModel) {
TEST_F(PpdProviderTest, UsbResolution) { TEST_F(PpdProviderTest, UsbResolution) {
auto provider = auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate}); PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer(); StartFakePpdServer();
PrinterSearchData search_data; PrinterSearchData search_data;
...@@ -628,6 +660,8 @@ TEST_F(PpdProviderTest, UsbResolution) { ...@@ -628,6 +660,8 @@ TEST_F(PpdProviderTest, UsbResolution) {
base::Unretained(this))); base::Unretained(this)));
// Vendor id that exists, nonexistent device id, should get a NOT_FOUND. // Vendor id that exists, nonexistent device id, should get a NOT_FOUND.
// In our fake serving root, the manufacturer with vendor ID 0x031f
// (== 799) is named "Seven Ninety Nine LLC."
search_data.usb_vendor_id = 0x031f; search_data.usb_vendor_id = 0x031f;
search_data.usb_product_id = 8162; search_data.usb_product_id = 8162;
provider->ResolvePpdReference( provider->ResolvePpdReference(
...@@ -646,15 +680,28 @@ TEST_F(PpdProviderTest, UsbResolution) { ...@@ -646,15 +680,28 @@ TEST_F(PpdProviderTest, UsbResolution) {
task_environment_.RunUntilIdle(); task_environment_.RunUntilIdle();
ASSERT_EQ(captured_resolve_ppd_references_.size(), static_cast<size_t>(4)); ASSERT_EQ(captured_resolve_ppd_references_.size(), static_cast<size_t>(4));
EXPECT_EQ(captured_resolve_ppd_references_[0].code, PpdProvider::SUCCESS);
EXPECT_EQ(captured_resolve_ppd_references_[0].ref.effective_make_and_model, // ResolvePpdReference() takes place in several asynchronous steps, so
"Some canonical reference"); // order is not guaranteed.
EXPECT_EQ(captured_resolve_ppd_references_[1].code, PpdProvider::SUCCESS); EXPECT_THAT(
EXPECT_EQ(captured_resolve_ppd_references_[1].ref.effective_make_and_model, captured_resolve_ppd_references_,
"Some other canonical reference"); UnorderedElementsAre(
EXPECT_EQ(captured_resolve_ppd_references_[2].code, PpdProvider::NOT_FOUND); AllOf(Field(&CapturedResolvePpdReferenceResults::code,
EXPECT_FALSE(captured_resolve_ppd_references_[3].code == Eq(PpdProvider::SUCCESS)),
PpdProvider::SUCCESS); Field(&CapturedResolvePpdReferenceResults::ref,
Field(&Printer::PpdReference::effective_make_and_model,
StrEq("Some canonical reference")))),
AllOf(Field(&CapturedResolvePpdReferenceResults::code,
Eq(PpdProvider::SUCCESS)),
Field(&CapturedResolvePpdReferenceResults::ref,
Field(&Printer::PpdReference::effective_make_and_model,
StrEq("Some other canonical reference")))),
AllOf(Field(&CapturedResolvePpdReferenceResults::code,
Eq(PpdProvider::NOT_FOUND)),
Field(&CapturedResolvePpdReferenceResults::usb_manufacturer,
StrEq("Seven Ninety Nine LLC"))),
Field(&CapturedResolvePpdReferenceResults::code,
Eq(PpdProvider::NOT_FOUND))));
} }
// Test basic ResolvePrinters() functionality. At the same time, make // Test basic ResolvePrinters() functionality. At the same time, make
...@@ -875,7 +922,7 @@ TEST_F(PpdProviderTest, ResolvedPpdsGetCached) { ...@@ -875,7 +922,7 @@ TEST_F(PpdProviderTest, ResolvedPpdsGetCached) {
TEST_F(PpdProviderTest, CaseInsensitiveMakeAndModel) { TEST_F(PpdProviderTest, CaseInsensitiveMakeAndModel) {
auto provider = auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate}); PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer(); StartFakePpdServer();
std::string ref = "pRiNteR_A_reF"; std::string ref = "pRiNteR_A_reF";
...@@ -1141,7 +1188,7 @@ TEST_F(PpdProviderTest, UserPpdAlwaysRefreshedIfAvailable) { ...@@ -1141,7 +1188,7 @@ TEST_F(PpdProviderTest, UserPpdAlwaysRefreshedIfAvailable) {
TEST_F(PpdProviderTest, ResolveUsbManufacturer) { TEST_F(PpdProviderTest, ResolveUsbManufacturer) {
auto provider = auto provider =
CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads, CreateProvider({"en", PpdCacheRunLocation::kInBackgroundThreads,
PropagateLocaleToMetadataManager::kDoNotPropagate}); PropagateLocaleToMetadataManager::kDoPropagate});
StartFakePpdServer(); StartFakePpdServer();
PrinterSearchData search_data; PrinterSearchData search_data;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment