summaryrefslogtreecommitdiff
path: root/chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc')
-rw-r--r--chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc208
1 files changed, 208 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc b/chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc
new file mode 100644
index 00000000000..cb300ba7018
--- /dev/null
+++ b/chromium/third_party/nearby/src/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc
@@ -0,0 +1,208 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "connections/implementation/mediums/ble_v2/ble_advertisement_header.h"
+
+#include "gtest/gtest.h"
+#include "internal/platform/base64_utils.h"
+
+namespace location {
+namespace nearby {
+namespace connections {
+namespace mediums {
+namespace {
+
+constexpr BleAdvertisementHeader::Version kVersion =
+ BleAdvertisementHeader::Version::kV2;
+constexpr int kNumSlots = 2;
+constexpr std::int16_t kPsmValue = 1;
+constexpr absl::string_view kServiceIDBloomFilter{
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"};
+constexpr absl::string_view kAdvertisementHash{"\x0a\x0b\x0c\x0d"};
+
+TEST(BleAdvertisementHeaderTest, ConstructionWorks) {
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_TRUE(ble_advertisement_header.IsValid());
+ EXPECT_EQ(kVersion, ble_advertisement_header.GetVersion());
+ EXPECT_FALSE(ble_advertisement_header.IsExtendedAdvertisement());
+ EXPECT_EQ(kNumSlots, ble_advertisement_header.GetNumSlots());
+ EXPECT_EQ(service_id_bloom_filter,
+ ble_advertisement_header.GetServiceIdBloomFilter());
+ EXPECT_EQ(advertisement_hash,
+ ble_advertisement_header.GetAdvertisementHash());
+ EXPECT_EQ(kPsmValue, ble_advertisement_header.GetPsmValue());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFailsWithBadVersion) {
+ auto bad_version = static_cast<BleAdvertisementHeader::Version>(666);
+
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ bad_version, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFailsWitZeroNumSlot) {
+ int num_slot = 0;
+
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, num_slot, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest,
+ ConstructionFailsWithShortServiceIdBloomFilter) {
+ char short_service_id_bloom_filter[] = "\x01\x02\x03\x04\x05\x06\x07\x08\x09";
+
+ ByteArray short_service_id_bloom_filter_bytes{short_service_id_bloom_filter};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false,
+ kNumSlots, short_service_id_bloom_filter_bytes,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest,
+ ConstructionFailsWithLongServiceIdBloomFilter) {
+ char long_service_id_bloom_filter[] =
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b";
+
+ ByteArray service_id_bloom_filter{long_service_id_bloom_filter};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFailsWithShortAdvertisementHash) {
+ char short_advertisement_hash[] = "\x0a\x0b\x0c";
+
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{short_advertisement_hash};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFailsWithLongAdvertisementHash) {
+ char long_advertisement_hash[] = "\x0a\x0b\x0c\x0d\x0e";
+
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{long_advertisement_hash};
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+
+ EXPECT_FALSE(ble_advertisement_header.IsValid());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFromSerializedStringWorks) {
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader org_ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+ auto ble_advertisement_header_bytes = ByteArray(org_ble_advertisement_header);
+
+ BleAdvertisementHeader ble_advertisement_header{
+ ble_advertisement_header_bytes};
+
+ EXPECT_TRUE(ble_advertisement_header.IsValid());
+ EXPECT_EQ(kVersion, ble_advertisement_header.GetVersion());
+ EXPECT_FALSE(ble_advertisement_header.IsExtendedAdvertisement());
+ EXPECT_EQ(kNumSlots, ble_advertisement_header.GetNumSlots());
+ EXPECT_EQ(service_id_bloom_filter,
+ ble_advertisement_header.GetServiceIdBloomFilter());
+ EXPECT_EQ(advertisement_hash,
+ ble_advertisement_header.GetAdvertisementHash());
+ EXPECT_EQ(kPsmValue, ble_advertisement_header.GetPsmValue());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFromExtraBytesWorks) {
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+ auto ble_advertisement_header_bytes = ByteArray(ble_advertisement_header);
+
+ ByteArray long_ble_advertisement_header_bytes{
+ ble_advertisement_header_bytes.size() + 1};
+ long_ble_advertisement_header_bytes.CopyAt(0, ble_advertisement_header_bytes);
+
+ BleAdvertisementHeader long_ble_advertisement_header{
+ long_ble_advertisement_header_bytes};
+
+ EXPECT_TRUE(long_ble_advertisement_header.IsValid());
+ EXPECT_EQ(kVersion, long_ble_advertisement_header.GetVersion());
+ EXPECT_FALSE(ble_advertisement_header.IsExtendedAdvertisement());
+ EXPECT_EQ(kNumSlots, long_ble_advertisement_header.GetNumSlots());
+ EXPECT_EQ(service_id_bloom_filter,
+ long_ble_advertisement_header.GetServiceIdBloomFilter());
+ EXPECT_EQ(advertisement_hash,
+ long_ble_advertisement_header.GetAdvertisementHash());
+ EXPECT_EQ(kPsmValue, long_ble_advertisement_header.GetPsmValue());
+}
+
+TEST(BleAdvertisementHeaderTest, ConstructionFromShortLengthFails) {
+ ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)};
+ ByteArray advertisement_hash{std::string(kAdvertisementHash)};
+
+ BleAdvertisementHeader ble_advertisement_header{
+ kVersion, false, kNumSlots, service_id_bloom_filter,
+ advertisement_hash, kPsmValue};
+ auto ble_advertisement_header_bytes = ByteArray(ble_advertisement_header);
+
+ ByteArray short_ble_advertisement_header_bytes{
+ ble_advertisement_header_bytes.size() - 3};
+ short_ble_advertisement_header_bytes.CopyAt(0,
+ ble_advertisement_header_bytes);
+
+ BleAdvertisementHeader short_ble_advertisement_header{
+ short_ble_advertisement_header_bytes};
+
+ EXPECT_FALSE(short_ble_advertisement_header.IsValid());
+}
+
+} // namespace
+} // namespace mediums
+} // namespace connections
+} // namespace nearby
+} // namespace location