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

Side by Side Diff: components/arc/bluetooth/bluetooth_struct_traits_unittest.cc

Issue 2394683007: Reland "components/arc: implement multi advertising" (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/arc/bluetooth/bluetooth_struct_traits.h" 5 #include "components/arc/bluetooth/bluetooth_struct_traits.h"
6 6
7 #include "base/macros.h"
7 #include "device/bluetooth/bluetooth_uuid.h" 8 #include "device/bluetooth/bluetooth_uuid.h"
8 #include "mojo/public/cpp/bindings/array.h" 9 #include "mojo/public/cpp/bindings/array.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 11
11 namespace { 12 namespace {
12 13
13 constexpr char kUuidStr[] = "12345678-1234-5678-9abc-def123456789"; 14 constexpr char kUuidStr[] = "12345678-1234-5678-9abc-def123456789";
14 constexpr uint8_t kUuidArray[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 15 constexpr uint8_t kUuidArray[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34,
15 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1, 16 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1,
16 0x23, 0x45, 0x67, 0x89}; 17 0x23, 0x45, 0x67, 0x89};
17 constexpr size_t kUuidSize = 16; 18 constexpr size_t kUuidSize = 16;
18 19
20 constexpr char kUuid16Str[] = "1234";
21 constexpr uint16_t kUuid16 = 0x1234;
22 constexpr uint8_t kServiceData[] = {0x11, 0x22, 0x33, 0x44, 0x55};
23 constexpr uint8_t kManufacturerData[] = {0x00, 0xe0};
24
19 template <typename MojoType, typename UserType> 25 template <typename MojoType, typename UserType>
20 mojo::StructPtr<MojoType> ConvertToMojo(UserType& input) { 26 mojo::StructPtr<MojoType> ConvertToMojo(UserType& input) {
21 mojo::Array<uint8_t> data = MojoType::Serialize(&input); 27 mojo::Array<uint8_t> data = MojoType::Serialize(&input);
22 mojo::StructPtr<MojoType> output; 28 mojo::StructPtr<MojoType> output;
23 MojoType::Deserialize(std::move(data), &output); 29 MojoType::Deserialize(std::move(data), &output);
24 return output; 30 return output;
25 } 31 }
26 32
27 template <typename MojoType, typename UserType> 33 template <typename MojoType, typename UserType>
28 bool ConvertFromMojo(mojo::StructPtr<MojoType> input, UserType* output) { 34 bool ConvertFromMojo(mojo::StructPtr<MojoType> input, UserType* output) {
(...skipping 13 matching lines...) Expand all
42 for (size_t i = 0; i < kUuidSize; i++) { 48 for (size_t i = 0; i < kUuidSize; i++) {
43 EXPECT_EQ(kUuidArray[i], uuid_mojo->uuid[i]); 49 EXPECT_EQ(kUuidArray[i], uuid_mojo->uuid[i]);
44 } 50 }
45 } 51 }
46 52
47 TEST(BluetoothStructTraitsTest, DeserializeBluetoothUUID) { 53 TEST(BluetoothStructTraitsTest, DeserializeBluetoothUUID) {
48 arc::mojom::BluetoothUUIDPtr uuid_mojo = arc::mojom::BluetoothUUID::New(); 54 arc::mojom::BluetoothUUIDPtr uuid_mojo = arc::mojom::BluetoothUUID::New();
49 for (size_t i = 0; i < kUuidSize; i++) { 55 for (size_t i = 0; i < kUuidSize; i++) {
50 uuid_mojo->uuid.push_back(kUuidArray[i]); 56 uuid_mojo->uuid.push_back(kUuidArray[i]);
51 } 57 }
58 uuid_mojo->uuid =
59 std::vector<uint8_t>(std::begin(kUuidArray), std::end(kUuidArray));
52 device::BluetoothUUID uuid_device; 60 device::BluetoothUUID uuid_device;
53 EXPECT_TRUE(ConvertFromMojo(std::move(uuid_mojo), &uuid_device)); 61 EXPECT_TRUE(ConvertFromMojo(std::move(uuid_mojo), &uuid_device));
54 EXPECT_EQ(std::string(kUuidStr), uuid_device.canonical_value()); 62 EXPECT_EQ(std::string(kUuidStr), uuid_device.canonical_value());
55 63
56 // Size checks are performed in serialization code. UUIDs with a length 64 // Size checks are performed in serialization code. UUIDs with a length
57 // other than 16 bytes will not make it through the mojo deserialization 65 // other than 16 bytes will not make it through the mojo deserialization
58 // code since arc::mojom::BluetoothUUID::uuid is defined as 66 // code since arc::mojom::BluetoothUUID::uuid is defined as
59 // array<uint8, 16>. 67 // array<uint8, 16>.
60 } 68 }
61 69
70 TEST(BluetoothStructTraitsTest, DeserializeBluetoothAdvertisement) {
71 arc::mojom::BluetoothAdvertisementPtr advertisement_mojo =
72 arc::mojom::BluetoothAdvertisement::New();
73 mojo::Array<arc::mojom::BluetoothAdvertisingDataPtr> adv_data;
74
75 // Create service UUIDs.
76 arc::mojom::BluetoothAdvertisingDataPtr data =
77 arc::mojom::BluetoothAdvertisingData::New();
78 std::vector<device::BluetoothUUID> service_uuids;
79 service_uuids.push_back((device::BluetoothUUID(kUuidStr)));
80 data->set_service_uuids(service_uuids);
81 adv_data.push_back(std::move(data));
82
83 // Create service data.
84 data = arc::mojom::BluetoothAdvertisingData::New();
85 arc::mojom::BluetoothServiceDataPtr service_data =
86 arc::mojom::BluetoothServiceData::New();
87 service_data->uuid_16bit = kUuid16;
88 service_data->data =
89 std::vector<uint8_t>(std::begin(kServiceData), std::end(kServiceData));
90 data->set_service_data(std::move(service_data));
91 adv_data.push_back(std::move(data));
92
93 // Create manufacturer data.
94 data = arc::mojom::BluetoothAdvertisingData::New();
95 data->set_manufacturer_data(std::vector<uint8_t>(
96 std::begin(kManufacturerData), std::end(kManufacturerData)));
97 adv_data.push_back(std::move(data));
98
99 advertisement_mojo->type =
100 arc::mojom::BluetoothAdvertisementType::ADV_TYPE_CONNECTABLE;
101 advertisement_mojo->data = std::move(adv_data);
102
103 std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement;
104 EXPECT_TRUE(ConvertFromMojo(std::move(advertisement_mojo), &advertisement));
105
106 EXPECT_EQ(advertisement->type(),
107 device::BluetoothAdvertisement::ADVERTISEMENT_TYPE_PERIPHERAL);
108
109 std::unique_ptr<device::BluetoothAdvertisement::UUIDList> converted_uuids =
110 advertisement->service_uuids();
111 EXPECT_EQ(converted_uuids->size(), 1U);
112 EXPECT_EQ(*converted_uuids->begin(), kUuidStr);
113
114 std::unique_ptr<device::BluetoothAdvertisement::ServiceData>
115 converted_service = advertisement->service_data();
116 EXPECT_EQ(converted_service->size(), 1U);
117 EXPECT_EQ(converted_service->begin()->first, kUuid16Str);
118 for (size_t i = 0; i < arraysize(kServiceData); i++) {
119 EXPECT_EQ(kServiceData[i], converted_service->begin()->second[i]);
120 }
121
122 std::unique_ptr<device::BluetoothAdvertisement::ManufacturerData>
123 converted_manufacturer = advertisement->manufacturer_data();
124 EXPECT_EQ(converted_manufacturer->size(), 1U);
125 uint16_t cic = converted_manufacturer->begin()->first;
126 EXPECT_EQ(cic & 0xff, kManufacturerData[0]);
127 EXPECT_EQ((cic >> 8) & 0xff, kManufacturerData[1]);
128 EXPECT_EQ(converted_manufacturer->begin()->second.size(),
129 static_cast<unsigned long>(arraysize(kManufacturerData) -
130 sizeof(uint16_t)));
131 }
132
133 TEST(BluetoothStructTraitsTest, DeserializeBluetoothAdvertisementFailure) {
134 arc::mojom::BluetoothAdvertisementPtr advertisement_mojo =
135 arc::mojom::BluetoothAdvertisement::New();
136 mojo::Array<arc::mojom::BluetoothAdvertisingDataPtr> adv_data;
137
138 // Create empty manufacturer data. Manufacturer data must include the CIC
139 // which is 2 bytes long.
140 arc::mojom::BluetoothAdvertisingDataPtr data =
141 arc::mojom::BluetoothAdvertisingData::New();
142 data->set_manufacturer_data((mojo::Array<uint8_t>()));
143 adv_data.push_back(std::move(data));
144
145 advertisement_mojo->type =
146 arc::mojom::BluetoothAdvertisementType::ADV_TYPE_CONNECTABLE;
147 advertisement_mojo->data = std::move(adv_data);
148
149 std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement;
150 EXPECT_FALSE(ConvertFromMojo(std::move(advertisement_mojo), &advertisement));
151 }
152
62 } // namespace mojo 153 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698