bluetooth_low_energy_scan_filter_unittest.cc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 <stdint.h>
  5. #include <vector>
  6. #include "device/bluetooth/bluetooth_low_energy_scan_filter.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. #include "third_party/abseil-cpp/absl/types/optional.h"
  9. namespace {
  10. // Values for a valid filter configuration.
  11. constexpr int16_t kDeviceFoundRSSIThreshold = -80;
  12. constexpr int16_t kDeviceLostRSSIThreshold = -100;
  13. constexpr base::TimeDelta kDeviceFoundTimeout = base::Seconds(1);
  14. constexpr base::TimeDelta kDeviceLostTimeout = base::Seconds(5);
  15. const std::vector<uint8_t> kPatternValue = {0xff};
  16. device::BluetoothLowEnergyScanFilter::Pattern GetPattern() {
  17. return device::BluetoothLowEnergyScanFilter::Pattern(
  18. /*start_position=*/0,
  19. device::BluetoothLowEnergyScanFilter::AdvertisementDataType::kServiceData,
  20. kPatternValue);
  21. }
  22. } // namespace
  23. namespace device {
  24. TEST(BluetoothLowEnergyScanFilterTest, Valid) {
  25. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  26. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  27. kDeviceLostTimeout, {GetPattern()},
  28. /*rssi_sampling_period=*/absl::nullopt);
  29. EXPECT_TRUE(filter);
  30. }
  31. TEST(BluetoothLowEnergyScanFilterTest, InvalidNoPattern) {
  32. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  33. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  34. kDeviceLostTimeout, {}, /*rssi_sampling_period=*/absl::nullopt);
  35. EXPECT_FALSE(filter);
  36. }
  37. TEST(BluetoothLowEnergyScanFilterTest, InvalidPatternTooLong) {
  38. device::BluetoothLowEnergyScanFilter::Pattern pattern(
  39. /*start_position=*/64,
  40. device::BluetoothLowEnergyScanFilter::AdvertisementDataType::kServiceData,
  41. kPatternValue);
  42. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  43. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  44. kDeviceLostTimeout, {pattern}, /*rssi_sampling_period=*/absl::nullopt);
  45. EXPECT_FALSE(filter);
  46. }
  47. TEST(BluetoothLowEnergyScanFilterTest, InvalidBadTimeout) {
  48. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  49. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  50. base::Seconds(0), {GetPattern()}, /*rssi_sampling_period=*/absl::nullopt);
  51. EXPECT_FALSE(filter);
  52. filter = device::BluetoothLowEnergyScanFilter::Create(
  53. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  54. base::Seconds(301), {GetPattern()},
  55. /*rssi_sampling_period=*/absl::nullopt);
  56. EXPECT_FALSE(filter);
  57. }
  58. TEST(BluetoothLowEnergyScanFilterTest, InvalidBadRssiSamplingPeriod) {
  59. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  60. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  61. base::Seconds(0), {GetPattern()},
  62. /*rssi_sampling_period=*/base::Milliseconds(-1));
  63. EXPECT_FALSE(filter);
  64. filter = device::BluetoothLowEnergyScanFilter::Create(
  65. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  66. base::Seconds(301), {GetPattern()},
  67. /*rssi_sampling_period=*/base::Milliseconds(254001));
  68. EXPECT_FALSE(filter);
  69. }
  70. TEST(BluetoothLowEnergyScanFilterTest, ValidRssiSamplingPeriod) {
  71. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  72. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  73. kDeviceLostTimeout, {GetPattern()},
  74. /*rssi_sampling_period=*/base::Milliseconds(0));
  75. EXPECT_TRUE(filter);
  76. EXPECT_EQ(filter->rssi_sampling_period().value().InMilliseconds(), 0);
  77. filter = device::BluetoothLowEnergyScanFilter::Create(
  78. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  79. kDeviceLostTimeout, {GetPattern()},
  80. /*rssi_sampling_period=*/base::Milliseconds(254000));
  81. EXPECT_TRUE(filter);
  82. EXPECT_EQ(filter->rssi_sampling_period().value().InMilliseconds(), 254000);
  83. filter = device::BluetoothLowEnergyScanFilter::Create(
  84. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  85. kDeviceLostTimeout, {GetPattern()},
  86. /*rssi_sampling_period=*/base::Milliseconds(23));
  87. EXPECT_TRUE(filter);
  88. EXPECT_EQ(filter->rssi_sampling_period().value().InMilliseconds(), 100);
  89. filter = device::BluetoothLowEnergyScanFilter::Create(
  90. kDeviceFoundRSSIThreshold, kDeviceLostRSSIThreshold, kDeviceFoundTimeout,
  91. kDeviceLostTimeout, {GetPattern()},
  92. /*rssi_sampling_period=*/absl::nullopt);
  93. EXPECT_TRUE(filter);
  94. EXPECT_FALSE(filter->rssi_sampling_period().has_value());
  95. }
  96. TEST(BluetoothLowEnergyScanFilterTest, InvalidBadThresholds) {
  97. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  98. /*device_found_rssi_threshold=*/-128, kDeviceLostRSSIThreshold,
  99. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  100. /*rssi_sampling_period=*/absl::nullopt);
  101. EXPECT_FALSE(filter);
  102. filter = device::BluetoothLowEnergyScanFilter::Create(
  103. /*device_found_rssi_threshold=*/21, kDeviceLostRSSIThreshold,
  104. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  105. /*rssi_sampling_period=*/absl::nullopt);
  106. EXPECT_FALSE(filter);
  107. filter = device::BluetoothLowEnergyScanFilter::Create(
  108. kDeviceFoundRSSIThreshold, /*device_lost_rssi_threshold=*/-128,
  109. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  110. /*rssi_sampling_period=*/absl::nullopt);
  111. EXPECT_FALSE(filter);
  112. filter = device::BluetoothLowEnergyScanFilter::Create(
  113. kDeviceFoundRSSIThreshold, /*device_lost_rssi_threshold=*/21,
  114. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  115. /*rssi_sampling_period=*/absl::nullopt);
  116. EXPECT_FALSE(filter);
  117. // Expect a failure if the "device lost" threshold is greater than the "device
  118. // found" threshold.
  119. filter = device::BluetoothLowEnergyScanFilter::Create(
  120. /*device_found_rssi_threshold=*/-80, /*device_lost_rssi_threshold=*/-60,
  121. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  122. /*rssi_sampling_period=*/absl::nullopt);
  123. EXPECT_FALSE(filter);
  124. }
  125. TEST(BluetoothLowEnergyScanFilterTest, ValidUsingRange) {
  126. auto filter = device::BluetoothLowEnergyScanFilter::Create(
  127. device::BluetoothLowEnergyScanFilter::Range::kImmediate,
  128. kDeviceFoundTimeout, kDeviceLostTimeout, {GetPattern()},
  129. /*rssi_sampling_period=*/absl::nullopt);
  130. EXPECT_TRUE(filter);
  131. filter = device::BluetoothLowEnergyScanFilter::Create(
  132. device::BluetoothLowEnergyScanFilter::Range::kNear, kDeviceFoundTimeout,
  133. kDeviceLostTimeout, {GetPattern()},
  134. /*rssi_sampling_period=*/absl::nullopt);
  135. EXPECT_TRUE(filter);
  136. filter = device::BluetoothLowEnergyScanFilter::Create(
  137. device::BluetoothLowEnergyScanFilter::Range::kFar, kDeviceFoundTimeout,
  138. kDeviceLostTimeout, {GetPattern()},
  139. /*rssi_sampling_period=*/absl::nullopt);
  140. EXPECT_TRUE(filter);
  141. }
  142. } // namespace device