Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2653)

Unified Diff: device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc

Issue 2084463002: BlueZ + DBus implementations of create/remove service record functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
new file mode 100644
index 0000000000000000000000000000000000000000..639f3c56ba5b3b92f663e31c721e993db71f7203
--- /dev/null
+++ b/device/bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc
@@ -0,0 +1,160 @@
+// Copyright 2016 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 "device/bluetooth/bluez/bluetooth_service_record_bluez.h"
+
+#include <memory>
+#include <string>
+
+#include "base/bind_helpers.h"
+#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "device/bluetooth/bluetooth_adapter_factory.h"
+#include "device/bluetooth/bluez/bluetooth_adapter_bluez.h"
+#include "device/bluetooth/dbus/bluez_dbus_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace bluez {
+
+namespace {
+
+constexpr uint16_t kServiceUuidAttributeId = 0x0003;
+
+constexpr char kServiceUuid1[] = "00001801-0000-1000-8000-00805f9b34fb";
+constexpr char kServiceUuid2[] = "00001801-0000-1000-7000-00805f9b34fb";
+constexpr char kServiceUuid3[] = "00001801-0000-1000-3000-00805f9b34fb";
+
+} // namespace
+
+class BluetoothServiceRecordBlueZTest : public testing::Test {
+ 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();
+ }
+
+ uint32_t CreateServiceRecordWithCallbacks(
+ const BluetoothServiceRecordBlueZ& record) {
+ const size_t old_success_callbacks = success_callbacks_;
+ const size_t old_error_callbacks = error_callbacks_;
+ // Note: Our fake implementation will never give us a handle of 0, so we
+ // can know that we will never have a record with the handle 0. Hence using
+ // 0 as an invalid handle return value is okay.
+ last_seen_handle_ = 0;
+ adapter_bluez_->CreateServiceRecord(
+ record,
+ base::Bind(
+ &BluetoothServiceRecordBlueZTest::CreateServiceSuccessCallback,
+ base::Unretained(this)),
+ base::Bind(&BluetoothServiceRecordBlueZTest::ErrorCallback,
+ base::Unretained(this)));
+ EXPECT_EQ(old_success_callbacks + 1, success_callbacks_);
+ EXPECT_EQ(old_error_callbacks, error_callbacks_);
+ EXPECT_NE(0u, last_seen_handle_);
+ return last_seen_handle_;
+ }
+
+ void RemoveServiceRecordWithCallbacks(uint32_t handle, bool expect_success) {
+ const size_t old_success_callbacks = success_callbacks_;
+ const size_t old_error_callbacks = error_callbacks_;
+ adapter_bluez_->RemoveServiceRecord(
+ handle,
+ base::Bind(
+ &BluetoothServiceRecordBlueZTest::RemoveServiceSuccessCallback,
+ base::Unretained(this)),
+ base::Bind(&BluetoothServiceRecordBlueZTest::ErrorCallback,
+ base::Unretained(this)));
+ size_t success = expect_success ? 1 : 0;
+ EXPECT_EQ(old_success_callbacks + success, success_callbacks_);
+ EXPECT_EQ(old_error_callbacks + 1 - success, error_callbacks_);
+ }
+
+ 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);
+ }
+
+ 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_;
+ }
+
+ void RemoveServiceSuccessCallback() { ++success_callbacks_; }
+
+ void ErrorCallback(BluetoothServiceRecordBlueZ::ErrorCode code) {
+ ++error_callbacks_;
+ }
+
+ base::MessageLoop message_loop_;
+ std::unique_ptr<base::RunLoop> run_loop_;
+ uint32_t last_seen_handle_;
+
+ DISALLOW_COPY_AND_ASSIGN(BluetoothServiceRecordBlueZTest);
+};
+
+TEST_F(BluetoothServiceRecordBlueZTest, CreateAndRemove) {
+ uint32_t handle1 =
+ CreateServiceRecordWithCallbacks(CreateaServiceRecord(kServiceUuid1));
+ uint32_t handle2 =
+ CreateServiceRecordWithCallbacks(CreateaServiceRecord(kServiceUuid2));
+ uint32_t handle3 =
+ CreateServiceRecordWithCallbacks(CreateaServiceRecord(kServiceUuid1));
+ uint32_t handle4 =
+ CreateServiceRecordWithCallbacks(CreateaServiceRecord(kServiceUuid3));
+
+ RemoveServiceRecordWithCallbacks(handle1, true);
+ RemoveServiceRecordWithCallbacks(handle3, true);
+ RemoveServiceRecordWithCallbacks(handle1, false);
+ RemoveServiceRecordWithCallbacks(handle4, true);
+ RemoveServiceRecordWithCallbacks(handle2, true);
+}
+
+} // namespace bluez
« no previous file with comments | « device/bluetooth/bluez/bluetooth_service_record_bluez.cc ('k') | device/bluetooth/dbus/bluetooth_adapter_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698