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

Unified Diff: components/arc/bluetooth/bluetooth_type_converters_unittest.cc

Issue 2149713002: arc: bluetooth: Add SDP host side support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: arc: bluetooth: Add SDP host side support Created 4 years, 3 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
« no previous file with comments | « components/arc/bluetooth/bluetooth_type_converters.cc ('k') | components/arc/common/bluetooth.mojom » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/arc/bluetooth/bluetooth_type_converters_unittest.cc
diff --git a/components/arc/bluetooth/bluetooth_type_converters_unittest.cc b/components/arc/bluetooth/bluetooth_type_converters_unittest.cc
index 57e296d2516ab7544bd68f75f861ed5c1b859fea..0a5f2c256251e823a502c8bae31c8e115c162165 100644
--- a/components/arc/bluetooth/bluetooth_type_converters_unittest.cc
+++ b/components/arc/bluetooth/bluetooth_type_converters_unittest.cc
@@ -4,15 +4,20 @@
#include "components/arc/bluetooth/bluetooth_type_converters.h"
+#include <algorithm>
+#include <memory>
#include <string>
#include <vector>
+#include "base/values.h"
#include "device/bluetooth/bluetooth_gatt_service.h"
#include "device/bluetooth/bluetooth_uuid.h"
+#include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h"
#include "mojo/public/cpp/bindings/array.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
+
constexpr char kAddressStr[] = "1A:2B:3C:4D:5E:6F";
constexpr char kInvalidAddressStr[] = "00:00:00:00:00:00";
constexpr uint8_t kAddressArray[] = {0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f};
@@ -23,6 +28,62 @@ constexpr uint8_t kUuidArray[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34,
0x23, 0x45, 0x67, 0x89};
constexpr size_t kUuidSize = 16;
constexpr uint8_t kFillerByte = 0x79;
+
+arc::mojom::BluetoothSdpAttributePtr CreateDeepMojoSequenceAttribute(
+ size_t depth) {
+ auto value = arc::mojom::BluetoothSdpAttribute::New();
+
+ if (depth > 0u) {
+ value->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE;
+ value->value.Clear();
+ value->sequence.push_back(CreateDeepMojoSequenceAttribute(depth - 1));
+ value->type_size = static_cast<uint32_t>(value->sequence.size());
+ } else {
+ uint16_t data = 3;
+ value->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT;
+ value->type_size = static_cast<uint32_t>(sizeof(data));
+ value->value.AppendInteger(static_cast<int>(data));
+ value->sequence = mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+ }
+ return value;
+}
+
+size_t GetDepthOfMojoAttribute(
+ const arc::mojom::BluetoothSdpAttributePtr& attribute) {
+ size_t depth = 1;
+ if (attribute->type == bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE) {
+ for (const auto& value : attribute->sequence)
+ depth = std::max(depth, GetDepthOfMojoAttribute(value) + 1);
+ }
+ return depth;
+}
+
+bluez::BluetoothServiceAttributeValueBlueZ CreateDeepBlueZSequenceAttribute(
+ size_t depth) {
+ if (depth > 0u) {
+ std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence>
+ sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence());
+ sequence->push_back(CreateDeepBlueZSequenceAttribute(depth - 1));
+
+ return bluez::BluetoothServiceAttributeValueBlueZ(std::move(sequence));
+ } else {
+ return bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(uint16_t),
+ base::WrapUnique(new base::FundamentalValue(3)));
+ }
+}
+
+size_t GetDepthOfBlueZAttribute(
+ const bluez::BluetoothServiceAttributeValueBlueZ& attribute) {
+ size_t depth = 1;
+ if (attribute.type() ==
+ bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE) {
+ for (const auto& value : attribute.sequence())
+ depth = std::max(depth, GetDepthOfBlueZAttribute(value) + 1);
+ }
+ return depth;
+}
+
} // namespace
namespace mojo {
@@ -80,4 +141,370 @@ TEST(BluetoothTypeConvertorTest,
EXPECT_FALSE(uuidMojo.To<device::BluetoothUUID>().IsValid());
}
+TEST(BluetoothTypeConvertorTest, ConvertMojoValueAttributeToBlueZAttribute) {
+ // Construct Mojo attribute with NULLTYPE value.
+ auto nulltypeAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ nulltypeAttributeMojo->type =
+ bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE;
+ nulltypeAttributeMojo->type_size = 0;
+ nulltypeAttributeMojo->value.Append(base::Value::CreateNullValue());
+ nulltypeAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto nulltypeAttributeBlueZ =
+ nulltypeAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE,
+ nulltypeAttributeBlueZ.type());
+ EXPECT_EQ(0u, nulltypeAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_NULL, nulltypeAttributeBlueZ.value().GetType());
+
+ // Construct Mojo attribute with TYPE_BOOLEAN value.
+ bool valueBool = true;
+ auto boolAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ boolAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::BOOL;
+ boolAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueBool));
+ boolAttributeMojo->value.AppendBoolean(valueBool);
+ boolAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto boolAttributeBlueZ =
+ boolAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::BOOL,
+ boolAttributeBlueZ.type());
+ EXPECT_EQ(sizeof(valueBool), boolAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_BOOLEAN, boolAttributeBlueZ.value().GetType());
+ EXPECT_TRUE(boolAttributeBlueZ.value().GetAsBoolean(&valueBool));
+ EXPECT_TRUE(valueBool);
+
+ // Construct Mojo attribute with TYPE_UINT value.
+ uint16_t valueUint16 = 10;
+ int valueUint16AsInt = 0;
+ auto uintAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ uintAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT;
+ uintAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueUint16));
+ uintAttributeMojo->value.AppendInteger(static_cast<int>(valueUint16));
+ uintAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto uintAttributeBlueZ =
+ uintAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT,
+ uintAttributeBlueZ.type());
+ EXPECT_EQ(sizeof(valueUint16), uintAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_INTEGER, uintAttributeBlueZ.value().GetType());
+ EXPECT_TRUE(uintAttributeBlueZ.value().GetAsInteger(&valueUint16AsInt));
+ EXPECT_EQ(valueUint16, static_cast<uint16_t>(valueUint16AsInt));
+
+ // Construct Mojo attribute with TYPE_INT value.
+ int16_t valueInt16 = 20;
+ int valueInt16AsInt = 0;
+ auto intAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ intAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::INT;
+ intAttributeMojo->type_size = static_cast<uint32_t>(sizeof(valueInt16));
+ intAttributeMojo->value.AppendInteger(static_cast<int>(valueInt16));
+ intAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto intAttributeBlueZ =
+ intAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::INT,
+ intAttributeBlueZ.type());
+ EXPECT_EQ(sizeof(valueInt16), intAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_INTEGER, intAttributeBlueZ.value().GetType());
+ EXPECT_TRUE(intAttributeBlueZ.value().GetAsInteger(&valueInt16AsInt));
+ EXPECT_EQ(valueInt16, static_cast<int16_t>(valueInt16AsInt));
+
+ // Construct Mojo attribute with TYPE_UUID.
+ std::string expectedUUID("00000000-0000-1000-8000-00805f9b34fb");
+ std::string actualUUID;
+ auto uuidAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ uuidAttributeMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::UUID;
+ // UUIDs are all stored in string form, but it can be converted to one of
+ // UUID16, UUID32 and UUID128.
+ uuidAttributeMojo->type_size = static_cast<uint32_t>(sizeof(uint16_t));
+ uuidAttributeMojo->value.AppendString(expectedUUID);
+ uuidAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto uuidAttributeBlueZ =
+ uuidAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID,
+ uuidAttributeBlueZ.type());
+ EXPECT_EQ(sizeof(uint16_t), uuidAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_STRING, uuidAttributeBlueZ.value().GetType());
+ EXPECT_TRUE(uuidAttributeBlueZ.value().GetAsString(&actualUUID));
+ EXPECT_EQ(expectedUUID, actualUUID);
+
+ // Construct Mojo attribute with TYPE_STRING. TYPE_URL is the same case as
+ // TYPE_STRING.
+ std::string expectedString("Some SDP service");
+ std::string actualString;
+ auto stringAttributeMojo = arc::mojom::BluetoothSdpAttribute::New();
+ stringAttributeMojo->type =
+ bluez::BluetoothServiceAttributeValueBlueZ::STRING;
+ stringAttributeMojo->type_size =
+ static_cast<uint32_t>(expectedString.length());
+ stringAttributeMojo->value.AppendString(expectedString);
+ stringAttributeMojo->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto stringAttributeBlueZ =
+ stringAttributeMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::STRING,
+ stringAttributeBlueZ.type());
+ EXPECT_EQ(expectedString.length(), stringAttributeBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_STRING, stringAttributeBlueZ.value().GetType());
+ EXPECT_TRUE(stringAttributeBlueZ.value().GetAsString(&actualString));
+ EXPECT_EQ(expectedString, actualString);
+}
+
+TEST(BluetoothTypeConvertorTest, ConvertMojoSequenceAttributeToBlueZAttribute) {
+ // Create an UUID value.
+ std::string l2capUUID("00000100-0000-1000-8000-00805f9b34fb");
+ auto valueUUID = arc::mojom::BluetoothSdpAttribute::New();
+ valueUUID->type = bluez::BluetoothServiceAttributeValueBlueZ::UUID;
+ valueUUID->type_size = static_cast<uint32_t>(sizeof(uint16_t));
+ valueUUID->value.AppendString(l2capUUID);
+ valueUUID->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ // Create an UINT value.
+ uint16_t l2capChannel = 3;
+ auto valueUint16 = arc::mojom::BluetoothSdpAttribute::New();
+ valueUint16->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT;
+ valueUint16->type_size = static_cast<uint32_t>(sizeof(l2capChannel));
+ valueUint16->value.AppendInteger(static_cast<int>(l2capChannel));
+ valueUint16->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ // Create a sequence with the above two values.
+ auto sequenceMojo = arc::mojom::BluetoothSdpAttribute::New();
+ sequenceMojo->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE;
+ sequenceMojo->sequence.push_back(std::move(valueUUID));
+ sequenceMojo->sequence.push_back(std::move(valueUint16));
+ sequenceMojo->type_size = sequenceMojo->sequence.size();
+ sequenceMojo->value.Clear();
+
+ auto sequenceBlueZ =
+ sequenceMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE,
+ sequenceBlueZ.type());
+ EXPECT_EQ(sequenceMojo->sequence.size(), sequenceBlueZ.sequence().size());
+
+ const auto& sequence = sequenceBlueZ.sequence();
+ std::string uuid;
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID,
+ sequence.at(0).type());
+ EXPECT_EQ(sizeof(uint16_t), sequence.at(0).size());
+ EXPECT_TRUE(sequence.at(0).value().GetAsString(&uuid));
+ EXPECT_EQ(l2capUUID, uuid);
+
+ int channel;
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT,
+ sequence.at(1).type());
+ EXPECT_EQ(sizeof(l2capChannel), sequence.at(1).size());
+ EXPECT_TRUE(sequence.at(1).value().GetAsInteger(&channel));
+ EXPECT_EQ(l2capChannel, static_cast<uint16_t>(channel));
+}
+
+TEST(BluetoothTypeConvertorTest,
+ ConvertInvalidMojoValueAttributeToBlueZAttribute) {
+ // Create a Mojo attribute without value defined.
+ auto valueNoData = arc::mojom::BluetoothSdpAttribute::New();
+ valueNoData->type = bluez::BluetoothServiceAttributeValueBlueZ::UINT;
+ valueNoData->type_size = static_cast<uint32_t>(sizeof(uint32_t));
+ valueNoData->value.Clear();
+ valueNoData->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto valueNoDataBlueZ =
+ valueNoData.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE,
+ valueNoDataBlueZ.type());
+ EXPECT_EQ(0u, valueNoDataBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_NULL, valueNoDataBlueZ.value().GetType());
+}
+
+TEST(BluetoothTypeConvertorTest,
+ ConvertInvalidMojoSequenceAttributeToBlueZAttribute) {
+ // Create a Mojo attribute with an empty sequence.
+ auto sequenceNoData = arc::mojom::BluetoothSdpAttribute::New();
+ sequenceNoData->type = bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE;
+ sequenceNoData->type_size = 0;
+ sequenceNoData->value.Append(base::Value::CreateNullValue());
+ sequenceNoData->sequence =
+ mojo::Array<arc::mojom::BluetoothSdpAttributePtr>::New(0);
+
+ auto sequenceNoDataBlueZ =
+ sequenceNoData.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE,
+ sequenceNoDataBlueZ.type());
+ EXPECT_EQ(0u, sequenceNoDataBlueZ.size());
+ EXPECT_EQ(base::Value::TYPE_NULL, sequenceNoDataBlueZ.value().GetType());
+
+ // Create a Mojo attribute with the depth = arc::kBluetoothSDPMaxDepth + 3.
+ auto sequenceTooDeepMojo =
+ CreateDeepMojoSequenceAttribute(arc::kBluetoothSDPMaxDepth + 3);
+ auto sequenceTooDeepBlueZ =
+ sequenceTooDeepMojo.To<bluez::BluetoothServiceAttributeValueBlueZ>();
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE,
+ sequenceTooDeepBlueZ.type());
+ EXPECT_EQ(1u, sequenceTooDeepBlueZ.size());
+ EXPECT_EQ(arc::kBluetoothSDPMaxDepth,
+ GetDepthOfBlueZAttribute(sequenceTooDeepBlueZ));
+}
+
+TEST(BluetoothTypeConvertorTest, ConvertBlueZValueAttributeToMojoAttribute) {
+ // Check NULL type.
+ auto nulltypeAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ();
+ base::Value* actualValue;
+
+ auto nulltypeAttributeMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(nulltypeAttributeBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE,
+ nulltypeAttributeMojo->type);
+ EXPECT_EQ(0u, nulltypeAttributeMojo->type_size);
+ EXPECT_TRUE(nulltypeAttributeMojo->value.Get(0, &actualValue));
+ EXPECT_EQ(base::Value::TYPE_NULL, actualValue->GetType());
+
+ // Check integer types (INT, UINT).
+ uint16_t valueUint16 = 10;
+ int valueUint16AsInt;
+ auto uintAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(valueUint16),
+ base::MakeUnique<base::FundamentalValue>(
+ base::FundamentalValue(static_cast<int>(valueUint16))));
+
+ auto uintAttributeMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(uintAttributeBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT,
+ uintAttributeMojo->type);
+ EXPECT_EQ(sizeof(valueUint16), uintAttributeMojo->type_size);
+ EXPECT_TRUE(uintAttributeMojo->value.GetInteger(0, &valueUint16AsInt));
+ EXPECT_EQ(valueUint16, static_cast<uint16_t>(valueUint16AsInt));
+
+ // Check bool type.
+ bool valueBool = false;
+ bool actualBool = true;
+ auto boolAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::BOOL, sizeof(bool),
+ base::MakeUnique<base::FundamentalValue>(
+ base::FundamentalValue(valueBool)));
+
+ auto boolAttributeMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(boolAttributeBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::BOOL,
+ boolAttributeMojo->type);
+ EXPECT_EQ(static_cast<uint32_t>(sizeof(valueBool)),
+ boolAttributeMojo->type_size);
+ EXPECT_TRUE(boolAttributeMojo->value.GetBoolean(0, &actualBool));
+ EXPECT_FALSE(valueBool);
+
+ // Check UUID type.
+ std::string valueUUID("00000100-0000-1000-8000-00805f9b34fb");
+ std::string actualUUID;
+ auto uuidAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::UUID, sizeof(uint16_t),
+ base::MakeUnique<base::StringValue>(base::StringValue(valueUUID)));
+
+ auto uuidAttributeMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(uuidAttributeBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID,
+ uuidAttributeMojo->type);
+ EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)),
+ uuidAttributeMojo->type_size);
+ EXPECT_TRUE(uuidAttributeMojo->value.GetString(0, &actualUUID));
+ EXPECT_EQ(valueUUID, actualUUID);
+
+ // Check string types (STRING, URL).
+ std::string valueString("Some Service Name");
+ std::string actualString;
+ auto stringAttributeBlueZ = bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::STRING, valueString.length(),
+ base::MakeUnique<base::StringValue>(valueString));
+
+ auto stringAttributeMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(stringAttributeBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::STRING,
+ stringAttributeMojo->type);
+ EXPECT_EQ(static_cast<uint32_t>(valueString.length()),
+ stringAttributeMojo->type_size);
+ EXPECT_TRUE(stringAttributeMojo->value.GetString(0, &actualString));
+ EXPECT_EQ(valueString, actualString);
+}
+
+TEST(BluetoothTypeConvertorTest, ConvertBlueZSequenceAttributeToMojoAttribute) {
+ std::string l2capUUID("00000100-0000-1000-8000-00805f9b34fb");
+ uint16_t l2capChannel = 3;
+
+ std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence>
+ sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence());
+ sequence->push_back(bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::UUID, sizeof(uint16_t),
+ base::MakeUnique<base::StringValue>(base::StringValue(l2capUUID))));
+ sequence->push_back(bluez::BluetoothServiceAttributeValueBlueZ(
+ bluez::BluetoothServiceAttributeValueBlueZ::UINT, sizeof(uint16_t),
+ base::MakeUnique<base::FundamentalValue>(
+ base::FundamentalValue(l2capChannel))));
+
+ auto sequenceBlueZ =
+ bluez::BluetoothServiceAttributeValueBlueZ(std::move(sequence));
+
+ ASSERT_EQ(2u, sequenceBlueZ.sequence().size());
+
+ auto sequenceMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(sequenceBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE,
+ sequenceMojo->type);
+ EXPECT_EQ(static_cast<uint32_t>(sequenceBlueZ.size()),
+ sequenceMojo->type_size);
+ EXPECT_EQ(sequenceMojo->type_size, sequenceMojo->sequence.size());
+
+ std::string uuid;
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UUID,
+ sequenceMojo->sequence[0]->type);
+ EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)),
+ sequenceMojo->sequence[0]->type_size);
+ EXPECT_TRUE(sequenceMojo->sequence[0]->value.GetString(0, &uuid));
+ EXPECT_EQ(l2capUUID, uuid);
+
+ int channel;
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::UINT,
+ sequenceMojo->sequence[1]->type);
+ EXPECT_EQ(static_cast<uint32_t>(sizeof(uint16_t)),
+ sequenceMojo->sequence[1]->type_size);
+ EXPECT_TRUE(sequenceMojo->sequence[1]->value.GetInteger(0, &channel));
+ EXPECT_EQ(l2capChannel, static_cast<uint16_t>(channel));
+}
+
+TEST(BluetoothTypeConvertorTest,
+ ConvertDeepBlueZSequenceAttributeToBlueZAttribute) {
+ bluez::BluetoothServiceAttributeValueBlueZ sequenceBlueZ =
+ CreateDeepBlueZSequenceAttribute(arc::kBluetoothSDPMaxDepth + 3);
+
+ auto sequenceMojo =
+ ConvertTo<arc::mojom::BluetoothSdpAttributePtr>(sequenceBlueZ);
+
+ EXPECT_EQ(bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE,
+ sequenceMojo->type);
+ EXPECT_EQ((uint32_t)1, sequenceMojo->type_size);
+ EXPECT_EQ(arc::kBluetoothSDPMaxDepth, GetDepthOfMojoAttribute(sequenceMojo));
+}
+
} // namespace mojo
« no previous file with comments | « components/arc/bluetooth/bluetooth_type_converters.cc ('k') | components/arc/common/bluetooth.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698