blob: 330571dc99b38f9a74cbe672d2be98d721169ff7 [file] [log] [blame]
/******************************************************************************
*
* Copyright 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
#include "device_database.h"
#include "classic_device.h"
#include <gtest/gtest.h>
using namespace bluetooth::hci;
namespace bluetooth::hci {
namespace {
Address address({0x01, 0x02, 0x03, 0x04, 0x05, 0x06});
std::string address_str = "06:05:04:03:02:01";
class DeviceDatabaseTest : public ::testing::Test {
protected:
DeviceDatabaseTest() = default;
void SetUp() override {}
void TearDown() override {}
DeviceDatabase device_database_;
};
TEST_F(DeviceDatabaseTest, create_classic_device) {
auto classic_device = device_database_.CreateClassicDevice(address);
ASSERT_TRUE(classic_device);
ASSERT_EQ(CLASSIC, classic_device->GetDeviceType());
ASSERT_EQ(address_str, classic_device->GetUuid());
}
TEST_F(DeviceDatabaseTest, create_le_device) {
auto le_device = device_database_.CreateLeDevice(address);
ASSERT_TRUE(le_device);
ASSERT_EQ(LE, le_device->GetDeviceType());
ASSERT_EQ(address_str, le_device->GetUuid());
}
TEST_F(DeviceDatabaseTest, create_dual_device) {
auto dual_device = device_database_.CreateDualDevice(address);
ASSERT_TRUE(dual_device);
ASSERT_EQ(DUAL, dual_device->GetDeviceType());
ASSERT_EQ(DUAL, dual_device->GetClassicDevice()->GetDeviceType());
ASSERT_EQ(DUAL, dual_device->GetLeDevice()->GetDeviceType());
ASSERT_EQ(address_str, dual_device->GetUuid());
}
// Shouldn't fail when creating twice. Should just get back a s_ptr the same device
TEST_F(DeviceDatabaseTest, create_classic_device_twice) {
auto classic_device = device_database_.CreateClassicDevice(address);
ASSERT_TRUE(classic_device);
ASSERT_EQ(CLASSIC, classic_device->GetDeviceType());
ASSERT_EQ(address_str, classic_device->GetUuid());
ASSERT_TRUE(device_database_.CreateClassicDevice(address));
}
TEST_F(DeviceDatabaseTest, create_le_device_twice) {
auto le_device = device_database_.CreateLeDevice(address);
ASSERT_TRUE(le_device);
ASSERT_EQ(LE, le_device->GetDeviceType());
ASSERT_EQ(address_str, le_device->GetUuid());
ASSERT_TRUE(device_database_.CreateLeDevice(address));
}
TEST_F(DeviceDatabaseTest, create_dual_device_twice) {
auto dual_device = device_database_.CreateDualDevice(address);
ASSERT_TRUE(dual_device);
// Dual
ASSERT_EQ(DUAL, dual_device->GetDeviceType());
ASSERT_EQ(address_str, dual_device->GetUuid());
// Classic
ASSERT_EQ(DUAL, dual_device->GetClassicDevice()->GetDeviceType());
ASSERT_EQ(address_str, dual_device->GetClassicDevice()->GetUuid());
// LE
ASSERT_EQ(DUAL, dual_device->GetLeDevice()->GetDeviceType());
ASSERT_EQ(address_str, dual_device->GetLeDevice()->GetUuid());
ASSERT_TRUE(device_database_.CreateDualDevice(address));
}
TEST_F(DeviceDatabaseTest, remove_device) {
std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address);
ASSERT_TRUE(created_device);
ASSERT_TRUE(device_database_.RemoveDevice(created_device));
ASSERT_TRUE(device_database_.CreateClassicDevice(address));
}
TEST_F(DeviceDatabaseTest, remove_device_twice) {
std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address);
ASSERT_TRUE(device_database_.RemoveDevice(created_device));
ASSERT_FALSE(device_database_.RemoveDevice(created_device));
}
TEST_F(DeviceDatabaseTest, get_nonexistent_device) {
std::shared_ptr<Device> device_ptr = device_database_.GetClassicDevice(address_str);
ASSERT_FALSE(device_ptr);
}
TEST_F(DeviceDatabaseTest, address_modification_check) {
std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address);
std::shared_ptr<Device> gotten_device = device_database_.GetClassicDevice(address.ToString());
ASSERT_TRUE(created_device);
ASSERT_TRUE(gotten_device);
ASSERT_EQ(address_str, created_device->GetAddress().ToString());
ASSERT_EQ(address_str, gotten_device->GetAddress().ToString());
device_database_.UpdateDeviceAddress(created_device, Address({0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
ASSERT_EQ("01:01:01:01:01:01", created_device->GetAddress().ToString());
ASSERT_EQ("01:01:01:01:01:01", gotten_device->GetAddress().ToString());
std::shared_ptr<Device> gotten_modified_device = device_database_.GetClassicDevice("01:01:01:01:01:01");
ASSERT_TRUE(gotten_modified_device);
ASSERT_TRUE(device_database_.RemoveDevice(gotten_modified_device));
ASSERT_FALSE(device_database_.GetClassicDevice("01:01:01:01:01:01"));
}
} // namespace
} // namespace bluetooth::hci