bluetooth_advertisement_monitor_service_provider_unittest.cc 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. // Copyright 2021 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 <cstdint>
  5. #include <memory>
  6. #include <vector>
  7. #include "base/callback_helpers.h"
  8. #include "dbus/bus.h"
  9. #include "dbus/message.h"
  10. #include "dbus/mock_bus.h"
  11. #include "dbus/mock_exported_object.h"
  12. #include "device/bluetooth/dbus/bluetooth_advertisement_monitor_service_provider_impl.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. #include "third_party/cros_system_api/dbus/service_constants.h"
  15. namespace bluez {
  16. namespace {
  17. class FakeBluetoothAdvertisementMonitorServiceProviderDelegate
  18. : public BluetoothAdvertisementMonitorServiceProvider::Delegate {
  19. public:
  20. FakeBluetoothAdvertisementMonitorServiceProviderDelegate() = default;
  21. // BluetoothAdvertisementMonitorServiceProvider::Delegate
  22. void OnActivate() override { activate_count_++; }
  23. void OnRelease() override { release_count_++; }
  24. void OnDeviceFound(const dbus::ObjectPath& device_path) override {
  25. devices_found_.push_back(device_path);
  26. }
  27. void OnDeviceLost(const dbus::ObjectPath& device_path) override {
  28. devices_lost_.push_back(device_path);
  29. }
  30. size_t activate_count() const { return activate_count_; }
  31. size_t release_count() const { return release_count_; }
  32. std::vector<dbus::ObjectPath> devices_found() const { return devices_found_; }
  33. std::vector<dbus::ObjectPath> devices_lost() const { return devices_lost_; }
  34. base::WeakPtr<FakeBluetoothAdvertisementMonitorServiceProviderDelegate>
  35. GetWeakPtr() {
  36. return weak_ptr_factory_.GetWeakPtr();
  37. }
  38. private:
  39. size_t activate_count_ = 0;
  40. size_t release_count_ = 0;
  41. std::vector<dbus::ObjectPath> devices_found_;
  42. std::vector<dbus::ObjectPath> devices_lost_;
  43. base::WeakPtrFactory<FakeBluetoothAdvertisementMonitorServiceProviderDelegate>
  44. weak_ptr_factory_{this};
  45. };
  46. void SetUpMocksDbus(dbus::MockBus* mock_bus,
  47. dbus::MockExportedObject* mock_exported_object) {
  48. EXPECT_CALL(*mock_bus, GetExportedObject(dbus::ObjectPath("/path")))
  49. .WillOnce(testing::Return(mock_exported_object));
  50. EXPECT_CALL(*mock_exported_object,
  51. ExportMethod(bluetooth_advertisement_monitor::
  52. kBluetoothAdvertisementMonitorInterface,
  53. bluetooth_advertisement_monitor::kDeviceLost,
  54. testing::_, testing::_));
  55. EXPECT_CALL(*mock_exported_object,
  56. ExportMethod(bluetooth_advertisement_monitor::
  57. kBluetoothAdvertisementMonitorInterface,
  58. bluetooth_advertisement_monitor::kDeviceFound,
  59. testing::_, testing::_));
  60. EXPECT_CALL(*mock_exported_object,
  61. ExportMethod(bluetooth_advertisement_monitor::
  62. kBluetoothAdvertisementMonitorInterface,
  63. bluetooth_advertisement_monitor::kActivate,
  64. testing::_, testing::_));
  65. EXPECT_CALL(*mock_exported_object,
  66. ExportMethod(bluetooth_advertisement_monitor::
  67. kBluetoothAdvertisementMonitorInterface,
  68. bluetooth_advertisement_monitor::kRelease,
  69. testing::_, testing::_));
  70. }
  71. } // namespace
  72. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, Activate) {
  73. auto method_call =
  74. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  75. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  76. dbus::Bus::Options options;
  77. options.bus_type = dbus::Bus::SYSTEM;
  78. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  79. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  80. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  81. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  82. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  83. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  84. /*bus=*/mock_bus.get(),
  85. /*object_path=*/object_path,
  86. /*filter=*/nullptr,
  87. /*delegate=*/delegate.GetWeakPtr());
  88. provider_impl.Activate(method_call.get(), base::DoNothing());
  89. EXPECT_EQ(1u, delegate.activate_count());
  90. }
  91. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, Release) {
  92. auto method_call =
  93. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  94. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  95. dbus::Bus::Options options;
  96. options.bus_type = dbus::Bus::SYSTEM;
  97. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  98. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  99. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  100. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  101. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  102. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  103. /*bus=*/mock_bus.get(),
  104. /*object_path=*/object_path,
  105. /*filter=*/nullptr,
  106. /*delegate=*/delegate.GetWeakPtr());
  107. provider_impl.Release(method_call.get(), base::DoNothing());
  108. EXPECT_EQ(1u, delegate.release_count());
  109. }
  110. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, DeviceFound) {
  111. auto method_call =
  112. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  113. dbus::MessageWriter writer(method_call.get());
  114. auto device_path = dbus::ObjectPath("/device/path");
  115. writer.AppendObjectPath(device_path);
  116. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  117. dbus::Bus::Options options;
  118. options.bus_type = dbus::Bus::SYSTEM;
  119. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  120. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  121. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  122. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  123. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  124. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  125. /*bus=*/mock_bus.get(),
  126. /*object_path=*/object_path,
  127. /*filter=*/nullptr,
  128. /*delegate=*/delegate.GetWeakPtr());
  129. provider_impl.DeviceFound(method_call.get(), base::DoNothing());
  130. EXPECT_EQ(1u, delegate.devices_found().size());
  131. EXPECT_EQ(device_path.value(), delegate.devices_found()[0].value());
  132. }
  133. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, DeviceFoundFailure) {
  134. auto method_call =
  135. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  136. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  137. dbus::Bus::Options options;
  138. options.bus_type = dbus::Bus::SYSTEM;
  139. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  140. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  141. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  142. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  143. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  144. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  145. /*bus=*/mock_bus.get(),
  146. /*object_path=*/object_path,
  147. /*filter=*/nullptr,
  148. /*delegate=*/delegate.GetWeakPtr());
  149. provider_impl.DeviceFound(method_call.get(), base::DoNothing());
  150. EXPECT_EQ(0u, delegate.devices_found().size());
  151. }
  152. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, DeviceLost) {
  153. auto method_call =
  154. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  155. dbus::MessageWriter writer(method_call.get());
  156. auto device_path = dbus::ObjectPath("/device/path");
  157. writer.AppendObjectPath(device_path);
  158. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  159. dbus::Bus::Options options;
  160. options.bus_type = dbus::Bus::SYSTEM;
  161. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  162. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  163. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  164. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  165. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  166. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  167. /*bus=*/mock_bus.get(),
  168. /*object_path=*/object_path,
  169. /*filter=*/nullptr,
  170. /*delegate=*/delegate.GetWeakPtr());
  171. provider_impl.DeviceLost(method_call.get(), base::DoNothing());
  172. EXPECT_EQ(1u, delegate.devices_lost().size());
  173. EXPECT_EQ(device_path.value(), delegate.devices_lost()[0].value());
  174. }
  175. TEST(BluetoothAdvertisementMonitorServiceProviderImplTest, DeviceLostFailure) {
  176. auto method_call =
  177. std::make_unique<dbus::MethodCall>("com.example.Interface", "SomeMethod");
  178. FakeBluetoothAdvertisementMonitorServiceProviderDelegate delegate;
  179. dbus::Bus::Options options;
  180. options.bus_type = dbus::Bus::SYSTEM;
  181. scoped_refptr<dbus::MockBus> mock_bus = new dbus::MockBus(options);
  182. dbus::ObjectPath object_path = dbus::ObjectPath("/path");
  183. scoped_refptr<dbus::MockExportedObject> mock_exported_object =
  184. new dbus::MockExportedObject(/*bus=*/mock_bus.get(), object_path);
  185. SetUpMocksDbus(mock_bus.get(), mock_exported_object.get());
  186. BluetoothAdvertisementMonitorServiceProviderImpl provider_impl(
  187. /*bus=*/mock_bus.get(),
  188. /*object_path=*/object_path,
  189. /*filter=*/nullptr,
  190. /*delegate=*/delegate.GetWeakPtr());
  191. provider_impl.DeviceLost(method_call.get(), base::DoNothing());
  192. EXPECT_EQ(0u, delegate.devices_lost().size());
  193. }
  194. } // namespace bluez