1 /****************************************************************************** 2 * 3 * Copyright 2019 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 #include "device_database.h" 19 #include "classic_device.h" 20 21 #include <gtest/gtest.h> 22 23 using namespace bluetooth::hci; 24 25 namespace bluetooth::hci { 26 namespace { 27 28 Address address({0x01, 0x02, 0x03, 0x04, 0x05, 0x06}); 29 std::string address_str = "06:05:04:03:02:01"; 30 class DeviceDatabaseTest : public ::testing::Test { 31 protected: 32 DeviceDatabaseTest() = default; 33 34 void SetUp() override {} 35 36 void TearDown() override {} 37 38 DeviceDatabase device_database_; 39 }; 40 41 TEST_F(DeviceDatabaseTest, create_classic_device) { 42 auto classic_device = device_database_.CreateClassicDevice(address); 43 ASSERT_TRUE(classic_device); 44 ASSERT_EQ(CLASSIC, classic_device->GetDeviceType()); 45 ASSERT_EQ(address_str, classic_device->GetUuid()); 46 } 47 48 TEST_F(DeviceDatabaseTest, create_le_device) { 49 auto le_device = device_database_.CreateLeDevice(address); 50 ASSERT_TRUE(le_device); 51 ASSERT_EQ(LE, le_device->GetDeviceType()); 52 ASSERT_EQ(address_str, le_device->GetUuid()); 53 } 54 55 TEST_F(DeviceDatabaseTest, create_dual_device) { 56 auto dual_device = device_database_.CreateDualDevice(address); 57 ASSERT_TRUE(dual_device); 58 ASSERT_EQ(DUAL, dual_device->GetDeviceType()); 59 ASSERT_EQ(DUAL, dual_device->GetClassicDevice()->GetDeviceType()); 60 ASSERT_EQ(DUAL, dual_device->GetLeDevice()->GetDeviceType()); 61 ASSERT_EQ(address_str, dual_device->GetUuid()); 62 } 63 64 // Shouldn't fail when creating twice. Should just get back a s_ptr the same device 65 TEST_F(DeviceDatabaseTest, create_classic_device_twice) { 66 auto classic_device = device_database_.CreateClassicDevice(address); 67 ASSERT_TRUE(classic_device); 68 ASSERT_EQ(CLASSIC, classic_device->GetDeviceType()); 69 ASSERT_EQ(address_str, classic_device->GetUuid()); 70 ASSERT_TRUE(device_database_.CreateClassicDevice(address)); 71 } 72 73 TEST_F(DeviceDatabaseTest, create_le_device_twice) { 74 auto le_device = device_database_.CreateLeDevice(address); 75 ASSERT_TRUE(le_device); 76 ASSERT_EQ(LE, le_device->GetDeviceType()); 77 ASSERT_EQ(address_str, le_device->GetUuid()); 78 ASSERT_TRUE(device_database_.CreateLeDevice(address)); 79 } 80 81 TEST_F(DeviceDatabaseTest, create_dual_device_twice) { 82 auto dual_device = device_database_.CreateDualDevice(address); 83 ASSERT_TRUE(dual_device); 84 85 // Dual 86 ASSERT_EQ(DUAL, dual_device->GetDeviceType()); 87 ASSERT_EQ(address_str, dual_device->GetUuid()); 88 89 // Classic 90 ASSERT_EQ(DUAL, dual_device->GetClassicDevice()->GetDeviceType()); 91 ASSERT_EQ(address_str, dual_device->GetClassicDevice()->GetUuid()); 92 93 // LE 94 ASSERT_EQ(DUAL, dual_device->GetLeDevice()->GetDeviceType()); 95 ASSERT_EQ(address_str, dual_device->GetLeDevice()->GetUuid()); 96 97 ASSERT_TRUE(device_database_.CreateDualDevice(address)); 98 } 99 100 TEST_F(DeviceDatabaseTest, remove_device) { 101 std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address); 102 ASSERT_TRUE(created_device); 103 ASSERT_TRUE(device_database_.RemoveDevice(created_device)); 104 ASSERT_TRUE(device_database_.CreateClassicDevice(address)); 105 } 106 107 TEST_F(DeviceDatabaseTest, remove_device_twice) { 108 std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address); 109 ASSERT_TRUE(device_database_.RemoveDevice(created_device)); 110 ASSERT_FALSE(device_database_.RemoveDevice(created_device)); 111 } 112 113 TEST_F(DeviceDatabaseTest, get_nonexistent_device) { 114 std::shared_ptr<Device> device_ptr = device_database_.GetClassicDevice(address_str); 115 ASSERT_FALSE(device_ptr); 116 } 117 118 TEST_F(DeviceDatabaseTest, address_modification_check) { 119 std::shared_ptr<Device> created_device = device_database_.CreateClassicDevice(address); 120 std::shared_ptr<Device> gotten_device = device_database_.GetClassicDevice(address.ToString()); 121 ASSERT_TRUE(created_device); 122 ASSERT_TRUE(gotten_device); 123 ASSERT_EQ(address_str, created_device->GetAddress().ToString()); 124 ASSERT_EQ(address_str, gotten_device->GetAddress().ToString()); 125 device_database_.UpdateDeviceAddress(created_device, Address({0x01, 0x01, 0x01, 0x01, 0x01, 0x01})); 126 ASSERT_EQ("01:01:01:01:01:01", created_device->GetAddress().ToString()); 127 ASSERT_EQ("01:01:01:01:01:01", gotten_device->GetAddress().ToString()); 128 std::shared_ptr<Device> gotten_modified_device = device_database_.GetClassicDevice("01:01:01:01:01:01"); 129 ASSERT_TRUE(gotten_modified_device); 130 ASSERT_TRUE(device_database_.RemoveDevice(gotten_modified_device)); 131 ASSERT_FALSE(device_database_.GetClassicDevice("01:01:01:01:01:01")); 132 } 133 } // namespace 134 } // namespace bluetooth::hci 135