// 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
