| // Copyright 2019 The Chromium OS 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 "permission_broker/deny_fwupdate_hidraw_device_rule.h" |
| |
| #include <gtest/gtest.h> |
| #include <libudev.h> |
| |
| #include <string> |
| #include <unordered_map> |
| #include <vector> |
| |
| #include "base/strings/string_util.h" |
| #include "permission_broker/udev_scopers.h" |
| |
| namespace { |
| |
| const char kDefaultPath[] = "/devices/wormhole/0000:1234:1500.001/hidraw0"; |
| |
| } // namespace |
| |
| namespace permission_broker { |
| |
| |
| class DenyFwUpdateHidrawDeviceRuleTest : public testing::Test { |
| public: |
| DenyFwUpdateHidrawDeviceRuleTest() = default; |
| ~DenyFwUpdateHidrawDeviceRuleTest() override = default; |
| |
| protected: |
| DenyFwUpdateHidrawDeviceRule rule_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(DenyFwUpdateHidrawDeviceRuleTest); |
| }; |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, AllowEmptyFwDeviceList) { |
| RangeListMap fwDevices; |
| EXPECT_FALSE(rule_.IsFwUpdateDevice(kDefaultPath, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, AllowEmptyPath) { |
| RangeListMap fwDevices; |
| EXPECT_FALSE(rule_.IsFwUpdateDevice("", fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, DenyFwDevice) { |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x2000}}}}; |
| |
| EXPECT_TRUE(rule_.IsFwUpdateDevice(kDefaultPath, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, DenyFwDeviceRangeInclusive) { |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x1500}}}}; |
| |
| EXPECT_TRUE(rule_.IsFwUpdateDevice(kDefaultPath, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, AllowProductIdBlockedVendor) { |
| RangeListMap fwDevices = { |
| {0x1234, {{0x3000, 0x4000}}}}; |
| |
| EXPECT_FALSE(rule_.IsFwUpdateDevice(kDefaultPath, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, DenyDeviceParent) { |
| const char path[] = |
| "/devices/pci/0000:1234:1500.001/nuerolink/0000:4567:1500.001/hidraw0"; |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x2000}}}}; |
| |
| EXPECT_TRUE(rule_.IsFwUpdateDevice(path, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, AllowNoVendorProductPath) { |
| const char path[] = |
| "/devices/usb/mouse/hidraw0"; |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x2000}}}}; |
| |
| EXPECT_FALSE(rule_.IsFwUpdateDevice(path, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, DenyNoTrailingPeriod) { |
| const char path[] = "/devices/lasers/0000:1234:1500/hidraw0"; |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x2000}}}}; |
| |
| EXPECT_TRUE(rule_.IsFwUpdateDevice(path, fwDevices)); |
| } |
| |
| TEST_F(DenyFwUpdateHidrawDeviceRuleTest, AllowCloseMatch) { |
| const char path[] = "/devices/lasers/0000:1234:1500:0/hidraw0"; |
| RangeListMap fwDevices = { |
| {0x1234, {{0x1000, 0x2000}}}}; |
| |
| EXPECT_FALSE(rule_.IsFwUpdateDevice(path, fwDevices)); |
| } |
| |
| } // namespace permission_broker |