Index: device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc |
diff --git a/device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc b/device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc |
index 639f3c56ba5b3b92f663e31c721e993db71f7203..4c9afbd8b121672ac445b3b08d3065b2d66a786e 100644 |
--- a/device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc |
+++ b/device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc |
@@ -14,7 +14,10 @@ |
#include "base/run_loop.h" |
#include "device/bluetooth/bluetooth_adapter_factory.h" |
#include "device/bluetooth/bluez/bluetooth_adapter_bluez.h" |
+#include "device/bluetooth/bluez/bluetooth_device_bluez.h" |
#include "device/bluetooth/dbus/bluez_dbus_manager.h" |
+#include "device/bluetooth/dbus/fake_bluetooth_device_client.h" |
+#include "device/bluetooth/test/bluetooth_test_bluez.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace bluez { |
@@ -27,30 +30,48 @@ constexpr char kServiceUuid1[] = "00001801-0000-1000-8000-00805f9b34fb"; |
constexpr char kServiceUuid2[] = "00001801-0000-1000-7000-00805f9b34fb"; |
constexpr char kServiceUuid3[] = "00001801-0000-1000-3000-00805f9b34fb"; |
+class TestPairingDelegate : public device::BluetoothDevice::PairingDelegate { |
+ public: |
+ void RequestPinCode(device::BluetoothDevice* device) override { |
+ LOG(ERROR) << "RKC: 1"; |
xiyuan
2016/06/29 22:43:08
remove debugging log, here and other places?
rkc
2016/06/30 20:02:24
Whoops.
Done.
|
+ } |
+ void RequestPasskey(device::BluetoothDevice* device) override { |
+ LOG(ERROR) << "RKC: 2"; |
+ } |
+ void DisplayPinCode(device::BluetoothDevice* device, |
+ const std::string& pincode) override { |
+ LOG(ERROR) << "RKC: 3"; |
+ } |
+ void DisplayPasskey(device::BluetoothDevice* device, |
+ uint32_t passkey) override { |
+ LOG(ERROR) << "RKC: 4"; |
+ } |
+ void KeysEntered(device::BluetoothDevice* device, uint32_t entered) override { |
+ LOG(ERROR) << "RKC: 5"; |
+ } |
+ void ConfirmPasskey(device::BluetoothDevice* device, |
+ uint32_t passkey) override { |
+ LOG(ERROR) << "RKC: 6"; |
+ } |
+ void AuthorizePairing(device::BluetoothDevice* device) override { |
+ LOG(ERROR) << "RKC: 7"; |
+ } |
+}; |
+ |
} // namespace |
-class BluetoothServiceRecordBlueZTest : public testing::Test { |
+class BluetoothServiceRecordBlueZTest : public device::BluetoothTestBlueZ { |
public: |
BluetoothServiceRecordBlueZTest() |
: adapter_bluez_(nullptr), |
success_callbacks_(0), |
error_callbacks_(0), |
- run_loop_(nullptr), |
last_seen_handle_(0) {} |
void SetUp() override { |
- std::unique_ptr<bluez::BluezDBusManagerSetter> dbus_setter = |
- bluez::BluezDBusManager::GetSetterForTesting(); |
- |
- device::BluetoothAdapterFactory::GetAdapter( |
- base::Bind(&BluetoothServiceRecordBlueZTest::AdapterCallback, |
- base::Unretained(this))); |
- RunRunLoop(); |
- } |
- |
- void TearDown() override { |
- device::BluetoothAdapterFactory::Shutdown(); |
- bluez::BluezDBusManager::Shutdown(); |
+ BluetoothTestBlueZ::SetUp(); |
+ InitWithFakeAdapter(); |
+ adapter_bluez_ = static_cast<bluez::BluetoothAdapterBlueZ*>(adapter_.get()); |
} |
uint32_t CreateServiceRecordWithCallbacks( |
@@ -89,39 +110,63 @@ class BluetoothServiceRecordBlueZTest : public testing::Test { |
EXPECT_EQ(old_error_callbacks + 1 - success, error_callbacks_); |
} |
+ void GetServiceRecords(BluetoothDeviceBlueZ* device, bool expect_success) { |
+ const size_t old_success_callbacks = success_callbacks_; |
+ const size_t old_error_callbacks = error_callbacks_; |
+ records_.clear(); |
+ device->GetServiceRecords( |
+ base::Bind(&BluetoothServiceRecordBlueZTest::GetServiceRecordsCallback, |
+ base::Unretained(this)), |
+ base::Bind(&BluetoothServiceRecordBlueZTest::ErrorCallback, |
+ base::Unretained(this))); |
+ size_t success = expect_success ? 1 : 0; |
Miao
2016/06/30 04:55:59
Instead of passing an extra |bool expect_success|
rkc
2016/06/30 20:02:24
I expect us to have more tests :)
|
+ EXPECT_EQ(old_success_callbacks + success, success_callbacks_); |
+ EXPECT_EQ(old_error_callbacks + 1 - success, error_callbacks_); |
+ } |
+ |
+ void VerifyRecords() { |
+ EXPECT_EQ(2u, records_.size()); |
+ |
+ std::vector<uint16_t> ids0 = records_[0].GetAttributeIds(); |
+ EXPECT_EQ(2u, ids0.size()); |
+ |
+ BluetoothServiceAttributeValueBlueZ service_handle0 = |
+ records_[0].GetAttributeValue(ids0[0]); |
+ int32_t int_value; |
+ EXPECT_TRUE(service_handle0.value().GetAsInteger(&int_value)); |
+ EXPECT_EQ(0x1337, int_value); |
+ |
+ BluetoothServiceAttributeValueBlueZ service_class_list = |
+ records_[0].GetAttributeValue(ids0[1]); |
+ std::string str_value; |
+ EXPECT_TRUE( |
+ service_class_list.sequence()[0].value().GetAsString(&str_value)); |
+ EXPECT_EQ("1802", str_value); |
+ |
+ std::vector<uint16_t> ids1 = records_[1].GetAttributeIds(); |
+ EXPECT_EQ(1u, ids1.size()); |
+ |
+ BluetoothServiceAttributeValueBlueZ service_handle1 = |
+ records_[1].GetAttributeValue(ids1[0]); |
+ EXPECT_TRUE(service_handle1.value().GetAsInteger(&int_value)); |
+ EXPECT_EQ(0xffffffff, static_cast<uint32_t>(int_value)); |
+ } |
+ |
protected: |
BluetoothServiceRecordBlueZ CreateaServiceRecord(const std::string uuid) { |
- std::map<uint16_t, BluetoothServiceAttributeValueBlueZ> attributes; |
- attributes.insert(std::pair<uint16_t, BluetoothServiceAttributeValueBlueZ>( |
- kServiceUuidAttributeId, |
- BluetoothServiceAttributeValueBlueZ( |
- BluetoothServiceAttributeValueBlueZ::UUID, 16, |
- base::MakeUnique<base::StringValue>(uuid)))); |
- return BluetoothServiceRecordBlueZ(attributes); |
+ BluetoothServiceRecordBlueZ record; |
+ record.AddRecordEntry(kServiceUuidAttributeId, |
+ BluetoothServiceAttributeValueBlueZ( |
+ BluetoothServiceAttributeValueBlueZ::UUID, 16, |
+ base::MakeUnique<base::StringValue>(uuid))); |
+ return record; |
} |
- scoped_refptr<device::BluetoothAdapter> adapter_; |
BluetoothAdapterBlueZ* adapter_bluez_; |
size_t success_callbacks_; |
size_t error_callbacks_; |
private: |
- void RunRunLoop() { |
- run_loop_ = base::MakeUnique<base::RunLoop>(); |
- run_loop_->Run(); |
- } |
- |
- void QuitRunLoop() { |
- if (run_loop_) |
- run_loop_->Quit(); |
- } |
- |
- void AdapterCallback(scoped_refptr<device::BluetoothAdapter> adapter) { |
- adapter_ = adapter; |
- adapter_bluez_ = static_cast<BluetoothAdapterBlueZ*>(adapter_.get()); |
- QuitRunLoop(); |
- } |
- |
void CreateServiceSuccessCallback(uint32_t handle) { |
last_seen_handle_ = handle; |
++success_callbacks_; |
@@ -133,9 +178,14 @@ class BluetoothServiceRecordBlueZTest : public testing::Test { |
++error_callbacks_; |
} |
- base::MessageLoop message_loop_; |
- std::unique_ptr<base::RunLoop> run_loop_; |
+ void GetServiceRecordsCallback( |
+ std::vector<BluetoothServiceRecordBlueZ> records) { |
+ records_ = records; |
+ ++success_callbacks_; |
+ } |
+ |
uint32_t last_seen_handle_; |
+ std::vector<BluetoothServiceRecordBlueZ> records_; |
DISALLOW_COPY_AND_ASSIGN(BluetoothServiceRecordBlueZTest); |
}; |
@@ -157,4 +207,15 @@ TEST_F(BluetoothServiceRecordBlueZTest, CreateAndRemove) { |
RemoveServiceRecordWithCallbacks(handle2, true); |
} |
+TEST_F(BluetoothServiceRecordBlueZTest, GetServiceRecords) { |
+ BluetoothDeviceBlueZ* device = |
+ static_cast<BluetoothDeviceBlueZ*>(adapter_->GetDevice( |
+ bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress)); |
+ GetServiceRecords(device, false); |
+ device->Connect(nullptr, GetCallback(Call::EXPECTED), |
+ GetConnectErrorCallback(Call::NOT_EXPECTED)); |
+ GetServiceRecords(device, true); |
+ VerifyRecords(); |
+} |
+ |
} // namespace bluez |