blob: 4db930dbb5f8c3d740857695ca6bf85575d09bfe [file] [log] [blame]
// Copyright 2015 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 "components/proximity_auth/ble/bluetooth_low_energy_device_whitelist.h"
#include <algorithm>
#include <string>
#include <vector>
#include "base/memory/scoped_ptr.h"
#include "base/prefs/testing_pref_service.h"
#include "components/proximity_auth/ble/pref_names.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace proximity_auth {
namespace {
const char kBluetoothAddress1[] = "11:22:33:44:55:66";
const char kPublicKey1[] = "public key 1";
const char kBluetoothAddress2[] = "22:33:44:55:66:77";
const char kPublicKey2[] = "public key 2";
} // namespace
class ProximityAuthBluetoothLowEnergyDeviceWhitelistTest
: public testing::Test {
protected:
ProximityAuthBluetoothLowEnergyDeviceWhitelistTest() {}
void SetUp() override {
BluetoothLowEnergyDeviceWhitelist::RegisterPrefs(pref_service_.registry());
}
void CheckWhitelistedDevice(
const std::string& bluetooth_address,
const std::string& public_key,
BluetoothLowEnergyDeviceWhitelist& device_whitelist) {
EXPECT_TRUE(device_whitelist.HasDeviceWithAddress(bluetooth_address));
EXPECT_EQ(device_whitelist.GetDevicePublicKey(bluetooth_address),
public_key);
EXPECT_TRUE(device_whitelist.HasDeviceWithPublicKey(public_key));
EXPECT_EQ(device_whitelist.GetDeviceAddress(public_key), bluetooth_address);
}
TestingPrefServiceSimple pref_service_;
private:
DISALLOW_COPY_AND_ASSIGN(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest);
};
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest, RegisterPrefs) {
TestingPrefServiceSimple pref_service;
BluetoothLowEnergyDeviceWhitelist::RegisterPrefs(pref_service.registry());
EXPECT_TRUE(
pref_service.FindPreference(prefs::kBluetoothLowEnergyDeviceWhitelist));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest, AddDevice) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
AddDevice_TwoDevicesWithSameAddress) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey2);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey2, device_whitelist);
EXPECT_FALSE(device_whitelist.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
AddDevice_TwoDevicesWithSamePublicKey) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress2, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress2, kPublicKey1, device_whitelist);
EXPECT_FALSE(device_whitelist.HasDeviceWithAddress(kBluetoothAddress1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
RemoveDeviceWithAddress) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
ASSERT_TRUE(device_whitelist.RemoveDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(device_whitelist.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(device_whitelist.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
RemoveDeviceWithAddress_DeviceNotPresent) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
ASSERT_FALSE(device_whitelist.RemoveDeviceWithAddress(kBluetoothAddress2));
EXPECT_TRUE(device_whitelist.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_TRUE(device_whitelist.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
RemoveDeviceWithPublicKey) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
ASSERT_TRUE(device_whitelist.RemoveDeviceWithPublicKey(kPublicKey1));
EXPECT_FALSE(device_whitelist.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(device_whitelist.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest,
RemoveDeviceWithPublicKey_DeviceNotPresent) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
ASSERT_FALSE(device_whitelist.RemoveDeviceWithPublicKey(kPublicKey2));
EXPECT_TRUE(device_whitelist.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_TRUE(device_whitelist.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthBluetoothLowEnergyDeviceWhitelistTest, GetPublicKeys) {
BluetoothLowEnergyDeviceWhitelist device_whitelist(&pref_service_);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckWhitelistedDevice(kBluetoothAddress1, kPublicKey1, device_whitelist);
device_whitelist.AddOrUpdateDevice(kBluetoothAddress2, kPublicKey2);
CheckWhitelistedDevice(kBluetoothAddress2, kPublicKey2, device_whitelist);
std::vector<std::string> public_keys = device_whitelist.GetPublicKeys();
// Note: it's not guarantee that the order in |public_key| is the same as
// insertion, so directly comparing vectors would not work.
EXPECT_TRUE(public_keys.size() == 2);
EXPECT_TRUE(std::find(public_keys.begin(), public_keys.end(), kPublicKey1) !=
public_keys.end());
EXPECT_TRUE(std::find(public_keys.begin(), public_keys.end(), kPublicKey2) !=
public_keys.end());
}
} // namespace proximity_auth