180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//
280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  Copyright (C) 2015 Google, Inc.
380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//
480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  Licensed under the Apache License, Version 2.0 (the "License");
580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  you may not use this file except in compliance with the License.
680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  You may obtain a copy of the License at:
780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//
880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  http://www.apache.org/licenses/LICENSE-2.0
980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//
1080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  Unless required by applicable law or agreed to in writing, software
1180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  distributed under the License is distributed on an "AS IS" BASIS,
1280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  See the License for the specific language governing permissions and
1480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//  limitations under the License.
1580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray//
1680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
1780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray#include <gtest/gtest.h>
1880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
19234138e2606dd7a54fbcc540643511abc0a3598dArman Uguray#include "service/common/bluetooth/gatt_identifier.h"
20234138e2606dd7a54fbcc540643511abc0a3598dArman Uguray#include "service/common/bluetooth/uuid.h"
2180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
2280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguraynamespace bluetooth {
2380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguraynamespace {
2480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
2580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst std::string kAddr0 = "00:01:02:03:04:05";
2680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst std::string kAddr1 = "06:07:08:08:0a:0b";
2780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
2880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst UUID kUUID0;
2980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst UUID kUUID1("180d");
3080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
3180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst int kId0 = 0;
3280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Ugurayconst int kId1 = 1;
3380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
3480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman UgurayTEST(GattIdentifierTest, ServiceId) {
3580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service0 = GattIdentifier::CreateServiceId(kAddr0, kId0, kUUID0, true);
3680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
3780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(service0->IsService());
3880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(service0->IsCharacteristic());
3980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(service0->IsDescriptor());
4080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
4180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(service0->GetOwningServiceId());
4280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(service0->GetOwningCharacteristicId());
4380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
4480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  // Create different variants, swapping one entry at a time.
4580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service1 = GattIdentifier::CreateServiceId(kAddr1, kId0, kUUID0, true);
4680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service2 = GattIdentifier::CreateServiceId(kAddr0, kId1, kUUID0, true);
4780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service3 = GattIdentifier::CreateServiceId(kAddr0, kId0, kUUID1, true);
4880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service4 = GattIdentifier::CreateServiceId(kAddr0, kId0, kUUID0, false);
4980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
5080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service1 != *service0);
5180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service2 != *service0);
5280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service3 != *service0);
5380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service4 != *service0);
5480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
5580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  GattIdentifier service_copy = *service0;
5680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(service_copy == *service0);
5780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray}
5880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
5980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman UgurayTEST(GattIdentifierTest, CharacteristicId) {
6080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service0 = GattIdentifier::CreateServiceId(kAddr0, kId0, kUUID0, true);
6180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char0 = GattIdentifier::CreateCharacteristicId(kId1, kUUID1, *service0);
6280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
6380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(char0->IsService());
6480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(char0->IsCharacteristic());
6580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(char0->IsDescriptor());
6680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
6780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(char0->GetOwningCharacteristicId());
6880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*char0->GetOwningServiceId() == *service0);
6980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
7080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service1 = GattIdentifier::CreateServiceId(kAddr1, kId0, kUUID0, true);
7180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
7280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char1 = GattIdentifier::CreateCharacteristicId(kId0, kUUID1, *service0);
7380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char2 = GattIdentifier::CreateCharacteristicId(kId1, kUUID0, *service0);
7480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char3 = GattIdentifier::CreateCharacteristicId(kId1, kUUID1, *service1);
7580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
7680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*char1 != *char0);
7780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*char2 != *char0);
7880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*char3 != *char0);
7980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
8080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  GattIdentifier char_copy = *char0;
8180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(char_copy == *char0);
8280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
8380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service0 != *char0);
8480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray}
8580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
8680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman UgurayTEST(GattIdentifierTest, DescriptorId) {
8780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto service0 = GattIdentifier::CreateServiceId(kAddr0, kId0, kUUID0, true);
8880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char0 = GattIdentifier::CreateCharacteristicId(kId1, kUUID1, *service0);
8980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto desc0 = GattIdentifier::CreateDescriptorId(kId0, kUUID0, *char0);
9080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
9180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(desc0->IsService());
9280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_FALSE(desc0->IsCharacteristic());
9380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(desc0->IsDescriptor());
9480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
9580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*desc0->GetOwningCharacteristicId() == *char0);
9680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*desc0->GetOwningServiceId() == *service0);
9780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
9880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto char1 = GattIdentifier::CreateCharacteristicId(kId0, kUUID1, *service0);
9980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
10080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto desc1 = GattIdentifier::CreateDescriptorId(kId1, kUUID0, *char0);
10180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto desc2 = GattIdentifier::CreateDescriptorId(kId0, kUUID1, *char0);
10280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  auto desc3 = GattIdentifier::CreateDescriptorId(kId0, kUUID0, *char1);
10380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
10480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*desc1 != *desc0);
10580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*desc2 != *desc0);
10680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*desc3 != *desc0);
10780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
10880826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  GattIdentifier desc_copy = *desc0;
10980826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(desc_copy == *desc0);
11080826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
11180826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service0 != *char0);
11280826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*service0 != *desc0);
11380826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray  EXPECT_TRUE(*char0 != *desc0);
11480826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray}
11580826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray
11680826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray}  // namespace
11780826c9d492b7d6c5d2a14b6e538510b8ce92dc5Arman Uguray}  // namespace bluetooth
118