// // Copyright 2015 Google, Inc. // // 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: // // http://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 #include "service/common/bluetooth/advertise_data.h" #include "stack/include/bt_types.h" #include "stack/include/hcidefs.h" namespace bluetooth { TEST(AdvertiseDataTest, EmptyData) { const std::vector data0; AdvertiseData adv0(data0); EXPECT_TRUE(adv0.IsValid()); // Single empty field not allowed. const std::vector data1{0x00}; AdvertiseData adv1(data1); EXPECT_FALSE(adv1.IsValid()); } TEST(AdvertiseDataTest, BadTLV) { // Single field, field empty. const std::vector data0{0x01}; AdvertiseData adv0(data0); EXPECT_FALSE(adv0.IsValid()); // Single field, first field length too long. const std::vector data1{0x05, 0x02, 0x00, 0x00, 0x00}; AdvertiseData adv1(data1); EXPECT_FALSE(adv1.IsValid()); // Two fields, second field length too long. const std::vector data2{0x02, 0x02, 0x00, 0x02, 0x00}; AdvertiseData adv2(data2); EXPECT_FALSE(adv2.IsValid()); // Two fields, second field empty. const std::vector data3{0x02, 0x02, 0x00, 0x01}; AdvertiseData adv3(data3); EXPECT_FALSE(adv3.IsValid()); } TEST(AdvertiseDataTest, GoodTLV) { // Singe field. const std::vector data0{0x03, 0x02, 0x01, 0x02}; AdvertiseData adv0(data0); EXPECT_TRUE(adv0.IsValid()); // Twi fields. const std::vector data1{0x03, 0x02, 0x01, 0x02, 0x02, 0x03, 0x01}; AdvertiseData adv1(data1); EXPECT_TRUE(adv0.IsValid()); } TEST(AdvertiseDataTest, DisallowedFields) { // Singe field. const std::vector data0{0x02, HCI_EIR_FLAGS_TYPE, 0x00}; AdvertiseData adv0(data0); EXPECT_FALSE(adv0.IsValid()); // Two fields, first invalid. const std::vector data1{ 0x02, HCI_EIR_FLAGS_TYPE, 0x00, 0x03, 0x02, 0x01, 0x02}; AdvertiseData adv1(data1); EXPECT_FALSE(adv1.IsValid()); // Two fields, second invalid. const std::vector data2{ 0x03, 0x02, 0x01, 0x02, 0x02, HCI_EIR_FLAGS_TYPE, 0x00}; AdvertiseData adv2(data2); EXPECT_FALSE(adv2.IsValid()); // Check all rejectlisted fields uint8_t rejectlist[] = {HCI_EIR_FLAGS_TYPE, HCI_EIR_OOB_BD_ADDR_TYPE, HCI_EIR_OOB_COD_TYPE, HCI_EIR_OOB_SSP_HASH_C_TYPE, HCI_EIR_OOB_SSP_RAND_R_TYPE}; for (size_t i = 0; i < sizeof(rejectlist); i++) { const std::vector data{0x02, rejectlist[i], 0x00}; AdvertiseData adv(data); EXPECT_FALSE(adv.IsValid()); } } TEST(AdvertiseDataTest, EqualsData) { const std::vector data0{0x02, 0x02, 0x00}; const std::vector data1{0x02, 0x03, 0x00}; AdvertiseData adv0(data0); AdvertiseData adv1(data1); EXPECT_FALSE(adv0 == adv1); AdvertiseData adv2(data1); EXPECT_TRUE(adv1 == adv2); } } // namespace bluetooth