Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: components/usb_service/usb_device_filter_unittest.cc

Issue 462753002: Add usb_service::UsbDeviceFilter class for device matching. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add UsbDevice::RequestUsbAccess to the mock (and fix spelling). Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/usb_service/usb_device_filter.cc ('k') | components/usb_service/usb_device_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/usb_service/usb_device_filter_unittest.cc
diff --git a/components/usb_service/usb_device_filter_unittest.cc b/components/usb_service/usb_device_filter_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a8120682a32ce74aa71086479ec0963094b0a506
--- /dev/null
+++ b/components/usb_service/usb_device_filter_unittest.cc
@@ -0,0 +1,239 @@
+// Copyright 2014 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 <vector>
+
+#include "base/memory/ref_counted.h"
+#include "components/usb_service/usb_device.h"
+#include "components/usb_service/usb_device_filter.h"
+#include "components/usb_service/usb_device_handle.h"
+#include "components/usb_service/usb_interface.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using usb_service::UsbConfigDescriptor;
+using usb_service::UsbDevice;
+using usb_service::UsbDeviceFilter;
+using usb_service::UsbDeviceHandle;
+using usb_service::UsbEndpointDescriptor;
+using usb_service::UsbInterfaceAltSettingDescriptor;
+using usb_service::UsbInterfaceDescriptor;
+
+namespace {
+
+class MockUsbInterfaceAltSettingDescriptor
+ : public UsbInterfaceAltSettingDescriptor {
+ public:
+ MockUsbInterfaceAltSettingDescriptor(int interface_number,
+ int alternate_setting,
+ int interface_class,
+ int interface_subclass,
+ int interface_protocol)
+ : interface_number_(interface_number),
+ alternate_setting_(alternate_setting),
+ interface_class_(interface_class),
+ interface_subclass_(interface_subclass),
+ interface_protocol_(interface_protocol) {}
+
+ virtual size_t GetNumEndpoints() const OVERRIDE { return 0; }
+ virtual scoped_refptr<const UsbEndpointDescriptor> GetEndpoint(
+ size_t index) const OVERRIDE {
+ return NULL;
+ }
+ virtual int GetInterfaceNumber() const OVERRIDE { return interface_number_; }
+ virtual int GetAlternateSetting() const OVERRIDE {
+ return alternate_setting_;
+ }
+ virtual int GetInterfaceClass() const OVERRIDE { return interface_class_; }
+ virtual int GetInterfaceSubclass() const OVERRIDE {
+ return interface_subclass_;
+ }
+ virtual int GetInterfaceProtocol() const OVERRIDE {
+ return interface_protocol_;
+ }
+
+ protected:
+ virtual ~MockUsbInterfaceAltSettingDescriptor() {}
+
+ private:
+ int interface_number_;
+ int alternate_setting_;
+ int interface_class_;
+ int interface_subclass_;
+ int interface_protocol_;
+};
+
+typedef std::vector<scoped_refptr<UsbInterfaceAltSettingDescriptor> >
+ UsbInterfaceAltSettingDescriptorList;
+
+class MockUsbInterfaceDescriptor : public UsbInterfaceDescriptor {
+ public:
+ MockUsbInterfaceDescriptor(
+ const UsbInterfaceAltSettingDescriptorList& alt_settings)
+ : alt_settings_(alt_settings) {}
+
+ virtual size_t GetNumAltSettings() const OVERRIDE {
+ return alt_settings_.size();
+ }
+ virtual scoped_refptr<const UsbInterfaceAltSettingDescriptor> GetAltSetting(
+ size_t index) const OVERRIDE {
+ return alt_settings_[index];
+ }
+
+ protected:
+ virtual ~MockUsbInterfaceDescriptor() {}
+
+ private:
+ UsbInterfaceAltSettingDescriptorList alt_settings_;
+};
+
+typedef std::vector<scoped_refptr<UsbInterfaceDescriptor> >
+ UsbInterfaceDescriptorList;
+
+class MockUsbConfigDescriptor : public UsbConfigDescriptor {
+ public:
+ MockUsbConfigDescriptor(const UsbInterfaceDescriptorList& interfaces)
+ : interfaces_(interfaces) {}
+
+ virtual size_t GetNumInterfaces() const OVERRIDE {
+ return interfaces_.size();
+ }
+ virtual scoped_refptr<const UsbInterfaceDescriptor> GetInterface(
+ size_t index) const OVERRIDE {
+ return interfaces_[index];
+ }
+
+ protected:
+ virtual ~MockUsbConfigDescriptor() {}
+
+ private:
+ UsbInterfaceDescriptorList interfaces_;
+};
+
+class MockUsbDevice : public UsbDevice {
+ public:
+ MockUsbDevice(uint16 vendor_id,
+ uint16 product_id,
+ uint32 unique_id,
+ scoped_refptr<UsbConfigDescriptor> config_desc)
+ : UsbDevice(vendor_id, product_id, unique_id),
+ config_desc_(config_desc) {}
+
+ virtual scoped_refptr<UsbDeviceHandle> Open() OVERRIDE { return NULL; }
+ virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) OVERRIDE {
+ NOTREACHED();
+ return true;
+ }
+#if defined(OS_CHROMEOS)
+ virtual void RequestUsbAccess(
+ int interface_id,
+ const base::Callback<void(bool success)>& callback) OVERRIDE {
+ NOTREACHED();
+ }
+#endif // OS_CHROMEOS
+ virtual scoped_refptr<UsbConfigDescriptor> ListInterfaces() OVERRIDE {
+ return config_desc_;
+ }
+
+ protected:
+ virtual ~MockUsbDevice() {}
+
+ private:
+ scoped_refptr<UsbConfigDescriptor> config_desc_;
+};
+
+class UsbFilterTest : public testing::Test {
+ public:
+ virtual void SetUp() OVERRIDE {
+ UsbInterfaceAltSettingDescriptorList alt_settings;
+ alt_settings.push_back(make_scoped_refptr(
+ new MockUsbInterfaceAltSettingDescriptor(1, 0, 0xFF, 0x42, 1)));
+
+ UsbInterfaceDescriptorList interfaces;
+ interfaces.push_back(
+ make_scoped_refptr(new MockUsbInterfaceDescriptor(alt_settings)));
+
+ scoped_refptr<UsbConfigDescriptor> config_desc(
+ new MockUsbConfigDescriptor(interfaces));
+
+ android_phone_ = new MockUsbDevice(0x18d1, 0x4ee2, 0, config_desc);
+ }
+
+ protected:
+ scoped_refptr<UsbDevice> android_phone_;
+};
+
+} // namespace
+
+TEST_F(UsbFilterTest, MatchAny) {
+ UsbDeviceFilter filter;
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchVendorId) {
+ UsbDeviceFilter filter;
+ filter.SetVendorId(0x18d1);
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchVendorIdNegative) {
+ UsbDeviceFilter filter;
+ filter.SetVendorId(0x1d6b);
+ ASSERT_FALSE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchProductId) {
+ UsbDeviceFilter filter;
+ filter.SetVendorId(0x18d1);
+ filter.SetProductId(0x4ee2);
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchProductIdNegative) {
+ UsbDeviceFilter filter;
+ filter.SetVendorId(0x18d1);
+ filter.SetProductId(0x4ee1);
+ ASSERT_FALSE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceClass) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xff);
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceClassNegative) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xe0);
+ ASSERT_FALSE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceSubclass) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xff);
+ filter.SetInterfaceSubclass(0x42);
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceSubclassNegative) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xff);
+ filter.SetInterfaceSubclass(0x01);
+ ASSERT_FALSE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceProtocol) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xff);
+ filter.SetInterfaceSubclass(0x42);
+ filter.SetInterfaceProtocol(0x01);
+ ASSERT_TRUE(filter.Matches(android_phone_));
+}
+
+TEST_F(UsbFilterTest, MatchInterfaceProtocolNegative) {
+ UsbDeviceFilter filter;
+ filter.SetInterfaceClass(0xff);
+ filter.SetInterfaceSubclass(0x42);
+ filter.SetInterfaceProtocol(0x02);
+ ASSERT_FALSE(filter.Matches(android_phone_));
+}
« no previous file with comments | « components/usb_service/usb_device_filter.cc ('k') | components/usb_service/usb_device_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698