blob: 77a1147b0e8ecfd417d8735a53d22c15f2a8ae44 [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/proximity_auth_pref_manager.h"
#include <algorithm>
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "components/prefs/testing_pref_service.h"
#include "components/proximity_auth/proximity_auth_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 ProximityAuthProximityAuthPrefManagerTest : public testing::Test {
protected:
ProximityAuthProximityAuthPrefManagerTest() {}
void SetUp() override {
ProximityAuthPrefManager::RegisterPrefs(pref_service_.registry());
}
void CheckRemoteBleDevice(const std::string& bluetooth_address,
const std::string& public_key,
ProximityAuthPrefManager& pref_manager) {
EXPECT_TRUE(pref_manager.HasDeviceWithAddress(bluetooth_address));
EXPECT_EQ(pref_manager.GetDevicePublicKey(bluetooth_address), public_key);
EXPECT_TRUE(pref_manager.HasDeviceWithPublicKey(public_key));
EXPECT_EQ(pref_manager.GetDeviceAddress(public_key), bluetooth_address);
}
TestingPrefServiceSimple pref_service_;
private:
DISALLOW_COPY_AND_ASSIGN(ProximityAuthProximityAuthPrefManagerTest);
};
TEST_F(ProximityAuthProximityAuthPrefManagerTest, RegisterPrefs) {
TestingPrefServiceSimple pref_service;
ProximityAuthPrefManager::RegisterPrefs(pref_service.registry());
EXPECT_TRUE(
pref_service.FindPreference(prefs::kProximityAuthRemoteBleDevices));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest, AddDevice) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest,
AddDevice_TwoDevicesWithSameAddress) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey2);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey2, pref_manager);
EXPECT_FALSE(pref_manager.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest,
AddDevice_TwoDevicesWithSamePublicKey) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
pref_manager.AddOrUpdateDevice(kBluetoothAddress2, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress2, kPublicKey1, pref_manager);
EXPECT_FALSE(pref_manager.HasDeviceWithAddress(kBluetoothAddress1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest, RemoveDeviceWithAddress) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
ASSERT_TRUE(pref_manager.RemoveDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(pref_manager.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(pref_manager.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest,
RemoveDeviceWithAddress_DeviceNotPresent) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
ASSERT_FALSE(pref_manager.RemoveDeviceWithAddress(kBluetoothAddress2));
EXPECT_TRUE(pref_manager.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_TRUE(pref_manager.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest, RemoveDeviceWithPublicKey) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
ASSERT_TRUE(pref_manager.RemoveDeviceWithPublicKey(kPublicKey1));
EXPECT_FALSE(pref_manager.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_FALSE(pref_manager.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest,
RemoveDeviceWithPublicKey_DeviceNotPresent) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
ASSERT_FALSE(pref_manager.RemoveDeviceWithPublicKey(kPublicKey2));
EXPECT_TRUE(pref_manager.HasDeviceWithAddress(kBluetoothAddress1));
EXPECT_TRUE(pref_manager.HasDeviceWithPublicKey(kPublicKey1));
}
TEST_F(ProximityAuthProximityAuthPrefManagerTest, GetPublicKeys) {
ProximityAuthPrefManager pref_manager(&pref_service_);
pref_manager.AddOrUpdateDevice(kBluetoothAddress1, kPublicKey1);
CheckRemoteBleDevice(kBluetoothAddress1, kPublicKey1, pref_manager);
pref_manager.AddOrUpdateDevice(kBluetoothAddress2, kPublicKey2);
CheckRemoteBleDevice(kBluetoothAddress2, kPublicKey2, pref_manager);
std::vector<std::string> public_keys = pref_manager.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