mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-16 15:36:12 -04:00
Pure Refactor: move filtering logic into AdvertisementFilter class
- this decouples filtering logic from advertisement decoding logic in preparation for introducing a Rust backed impl of AdvertisementDecoder - this change is only a refactor and does not change functionality in any way PiperOrigin-RevId: 618978564
This commit is contained in:
@@ -329,101 +329,6 @@ TEST(AdvertisementDecoder, UnsupportedAdvertisementVersion) {
|
||||
StatusIs(absl::StatusCode::kUnimplemented));
|
||||
}
|
||||
|
||||
TEST(AdvertisementDecoder, MatchesScanFilterNoFilterPasses) {
|
||||
std::vector<DataElement> adv = {
|
||||
DataElement(DataElement::kPrivateIdentityFieldType, "payload")};
|
||||
ScanRequest empty_scan_request = {};
|
||||
AdvertisementDecoder decoder(empty_scan_request);
|
||||
|
||||
// A scan request without scan filters matches any advertisement
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter(
|
||||
{DataElement(DataElement::kPrivateIdentityFieldType, "payload")}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({}));
|
||||
}
|
||||
|
||||
TEST(AdvertisementDecoder, MatchesPresenceScanFilter) {
|
||||
std::vector<DataElement> adv = {
|
||||
DataElement(DataElement::kPrivateIdentityFieldType, "payload")};
|
||||
DataElement model_id =
|
||||
DataElement(DataElement::kModelIdFieldType, "model id");
|
||||
DataElement salt = DataElement(DataElement::kSaltFieldType, "salt");
|
||||
DataElement salt2 = DataElement(DataElement::kSaltFieldType, "salt 2");
|
||||
PresenceScanFilter filter = {.extended_properties = {model_id, salt}};
|
||||
|
||||
AdvertisementDecoder decoder(
|
||||
|
||||
ScanRequestBuilder().AddScanFilter(filter).Build());
|
||||
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({}));
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({salt}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, model_id}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, salt2, model_id}));
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({salt2, model_id}));
|
||||
}
|
||||
|
||||
TEST(AdvertisementDecoder, MatchesLegacyPresenceScanFilter) {
|
||||
std::vector<DataElement> adv = {
|
||||
DataElement(DataElement::kPrivateIdentityFieldType, "payload")};
|
||||
DataElement model_id =
|
||||
DataElement(DataElement::kModelIdFieldType, "model id");
|
||||
DataElement salt = DataElement(DataElement::kSaltFieldType, "salt");
|
||||
DataElement salt2 = DataElement(DataElement::kSaltFieldType, "salt 2");
|
||||
LegacyPresenceScanFilter filter = {.extended_properties = {model_id, salt}};
|
||||
|
||||
AdvertisementDecoder decoder(
|
||||
|
||||
ScanRequestBuilder().AddScanFilter(filter).Build());
|
||||
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({}));
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({salt}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, model_id}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, salt2, model_id}));
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({salt2, model_id}));
|
||||
}
|
||||
|
||||
TEST(AdvertisementDecoder, MatchesLegacyPresenceScanFilterWithActions) {
|
||||
std::vector<DataElement> adv = {
|
||||
DataElement(DataElement::kPrivateIdentityFieldType, "payload")};
|
||||
DataElement model_id =
|
||||
DataElement(DataElement::kModelIdFieldType, "model id");
|
||||
DataElement salt = DataElement(DataElement::kSaltFieldType, "salt");
|
||||
DataElement ttt_action = DataElement(ActionBit::kTapToTransferAction);
|
||||
LegacyPresenceScanFilter filter = {
|
||||
.actions = {static_cast<int>(ActionBit::kActiveUnlockAction),
|
||||
static_cast<int>(ActionBit::kTapToTransferAction)},
|
||||
.extended_properties = {model_id, salt}};
|
||||
|
||||
AdvertisementDecoder decoder(
|
||||
|
||||
ScanRequestBuilder().AddScanFilter(filter).Build());
|
||||
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({salt, model_id}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, ttt_action, model_id}));
|
||||
}
|
||||
|
||||
TEST(AdvertisementDecoder, MatchesMultipleFilters) {
|
||||
std::vector<DataElement> adv = {
|
||||
DataElement(DataElement::kPrivateIdentityFieldType, "payload")};
|
||||
DataElement model_id =
|
||||
DataElement(DataElement::kModelIdFieldType, "model id");
|
||||
DataElement salt = DataElement(DataElement::kSaltFieldType, "salt");
|
||||
DataElement ttt_action = DataElement(ActionBit::kTapToTransferAction);
|
||||
PresenceScanFilter presence_filter = {.extended_properties = {model_id}};
|
||||
LegacyPresenceScanFilter legacy_filter = {
|
||||
.actions = {static_cast<int>(ActionBit::kActiveUnlockAction),
|
||||
static_cast<int>(ActionBit::kTapToTransferAction)},
|
||||
.extended_properties = {salt}};
|
||||
|
||||
AdvertisementDecoder decoder(ScanRequestBuilder()
|
||||
.AddScanFilter(presence_filter)
|
||||
.AddScanFilter(legacy_filter)
|
||||
.Build());
|
||||
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({model_id}));
|
||||
EXPECT_TRUE(decoder.MatchesScanFilter({salt, ttt_action}));
|
||||
EXPECT_FALSE(decoder.MatchesScanFilter({ttt_action}));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace presence
|
||||
} // namespace nearby
|
||||
|
||||
Reference in New Issue
Block a user