bluetooth_local_gatt_service_unittest.cc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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
  3. // found in the LICENSE file.
  4. #include "device/bluetooth/bluetooth_local_gatt_service.h"
  5. #include <algorithm>
  6. #include <iterator>
  7. #include "base/memory/ref_counted.h"
  8. #include "build/build_config.h"
  9. #include "device/bluetooth/bluetooth_local_gatt_characteristic.h"
  10. #include "device/bluetooth/test/bluetooth_gatt_server_test.h"
  11. #include "device/bluetooth/test/bluetooth_test.h"
  12. #include "testing/gtest/include/gtest/gtest.h"
  13. namespace device {
  14. class BluetoothLocalGattServiceTest : public BluetoothGattServerTest {
  15. public:
  16. void SetUp() override {
  17. BluetoothGattServerTest::SetUp();
  18. }
  19. bool ServiceSetsEqual(
  20. std::vector<BluetoothLocalGattService*> services,
  21. std::initializer_list<BluetoothLocalGattService*> services_to_check) {
  22. using ServiceSet = std::set<BluetoothLocalGattService*,
  23. bool (*)(BluetoothLocalGattService*,
  24. BluetoothLocalGattService*)>;
  25. auto comparator = [](BluetoothLocalGattService* a,
  26. BluetoothLocalGattService* b) -> bool {
  27. return a->GetIdentifier() < b->GetIdentifier();
  28. };
  29. return ServiceSet(services.begin(), services.end(), comparator) ==
  30. ServiceSet(services_to_check, comparator);
  31. }
  32. protected:
  33. base::WeakPtr<BluetoothLocalGattCharacteristic> read_characteristic_;
  34. base::WeakPtr<BluetoothLocalGattCharacteristic> write_characteristic_;
  35. };
  36. #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
  37. #define MAYBE_RegisterMultipleServices RegisterMultipleServices
  38. #else
  39. #define MAYBE_RegisterMultipleServices DISABLED_RegisterMultipleServices
  40. #endif
  41. TEST_F(BluetoothLocalGattServiceTest, MAYBE_RegisterMultipleServices) {
  42. base::WeakPtr<BluetoothLocalGattService> service2 =
  43. BluetoothLocalGattService::Create(
  44. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  45. nullptr, delegate_.get());
  46. base::WeakPtr<BluetoothLocalGattService> service3 =
  47. BluetoothLocalGattService::Create(
  48. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  49. nullptr, delegate_.get());
  50. base::WeakPtr<BluetoothLocalGattService> service4 =
  51. BluetoothLocalGattService::Create(
  52. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  53. nullptr, delegate_.get());
  54. service2->Register(GetCallback(Call::EXPECTED),
  55. GetGattErrorCallback(Call::NOT_EXPECTED));
  56. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service2.get()}));
  57. service3->Register(GetCallback(Call::EXPECTED),
  58. GetGattErrorCallback(Call::NOT_EXPECTED));
  59. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(),
  60. {service2.get(), service3.get()}));
  61. service2->Unregister(GetCallback(Call::EXPECTED),
  62. GetGattErrorCallback(Call::NOT_EXPECTED));
  63. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service3.get()}));
  64. service4->Register(GetCallback(Call::EXPECTED),
  65. GetGattErrorCallback(Call::NOT_EXPECTED));
  66. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(),
  67. {service3.get(), service4.get()}));
  68. service3->Register(GetCallback(Call::NOT_EXPECTED),
  69. GetGattErrorCallback(Call::EXPECTED));
  70. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(),
  71. {service3.get(), service4.get()}));
  72. service3->Unregister(GetCallback(Call::EXPECTED),
  73. GetGattErrorCallback(Call::NOT_EXPECTED));
  74. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service4.get()}));
  75. service4->Unregister(GetCallback(Call::EXPECTED),
  76. GetGattErrorCallback(Call::NOT_EXPECTED));
  77. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {}));
  78. }
  79. #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
  80. #define MAYBE_DeleteServices DeleteServices
  81. #else
  82. #define MAYBE_DeleteServices DISABLED_DeleteServices
  83. #endif
  84. TEST_F(BluetoothLocalGattServiceTest, MAYBE_DeleteServices) {
  85. base::WeakPtr<BluetoothLocalGattService> service2 =
  86. BluetoothLocalGattService::Create(
  87. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  88. nullptr, delegate_.get());
  89. base::WeakPtr<BluetoothLocalGattService> service3 =
  90. BluetoothLocalGattService::Create(
  91. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  92. nullptr, delegate_.get());
  93. service2->Register(GetCallback(Call::EXPECTED),
  94. GetGattErrorCallback(Call::NOT_EXPECTED));
  95. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service2.get()}));
  96. service3->Register(GetCallback(Call::EXPECTED),
  97. GetGattErrorCallback(Call::NOT_EXPECTED));
  98. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(),
  99. {service2.get(), service3.get()}));
  100. service2->Unregister(GetCallback(Call::EXPECTED),
  101. GetGattErrorCallback(Call::NOT_EXPECTED));
  102. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service3.get()}));
  103. service2->Delete();
  104. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service3.get()}));
  105. service3->Delete();
  106. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {}));
  107. // Create a service, register and then delete it, just to check everything
  108. // still works.
  109. base::WeakPtr<BluetoothLocalGattService> service4 =
  110. BluetoothLocalGattService::Create(
  111. adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true,
  112. nullptr, delegate_.get());
  113. service4->Register(GetCallback(Call::EXPECTED),
  114. GetGattErrorCallback(Call::NOT_EXPECTED));
  115. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {service4.get()}));
  116. service4->Delete();
  117. EXPECT_TRUE(ServiceSetsEqual(RegisteredGattServices(), {}));
  118. }
  119. } // namespace device