companion_app_parser_unittest.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Copyright 2022 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 "ash/quick_pair/companion_app/companion_app_parser.h"
  5. #include "ash/quick_pair/common/device.h"
  6. #include "ash/quick_pair/common/logging.h"
  7. #include "ash/quick_pair/repository/fake_fast_pair_repository.h"
  8. #include "base/memory/scoped_refptr.h"
  9. #include "base/run_loop.h"
  10. #include "base/test/mock_callback.h"
  11. #include "base/test/task_environment.h"
  12. #include "testing/gmock/include/gmock/gmock.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. namespace {
  15. constexpr char kTestDeviceAddress[] = "11:12:13:14:15:16";
  16. constexpr char kHasCompanionAppModelId[] = "718c17";
  17. constexpr char kEmptyMetadataModelId[] = "718c16";
  18. constexpr char kValidMetadataModelId[] = "718c15";
  19. constexpr char kEmptyParameterMetadataModelId[] = "718c14";
  20. constexpr char kNoMetadataModelId[] = "718c12";
  21. constexpr char kValidIntentWithCompanionAppURI[] =
  22. "intent:#Intent;action=com.google.android.gms.nearby."
  23. "discovery%3AACTION_MAGIC_PAIR;package=com.google.android."
  24. "gms;component=com.google.android.gms/.nearby.discovery."
  25. "service.DiscoveryService;S.com.google.android.gms.nearby."
  26. "discovery%3AEXTRA_COMPANION_APP=com.bose.monet;end";
  27. constexpr char kValidIntentURI[] =
  28. "intent:#Intent;action=com.google.android.gms.nearby."
  29. "discovery%3AACTION_MAGIC_PAIR;package=com.google.android."
  30. "gms;component=com.google.android.gms/.nearby.discovery."
  31. "service.DiscoveryService;end";
  32. constexpr char kEmptyParameterIntentURI[] =
  33. "intent:#Intent;action=com.google.android.gms.nearby."
  34. "discovery%3AACTION_MAGIC_PAIR;package=com.google.android."
  35. "gms;component=com.google.android.gms/.nearby.discovery."
  36. "service.DiscoveryService;S.com.google.android.gms.nearby."
  37. "discovery%3AEXTRA_COMPANION_APP=com.bose.monet;;end";
  38. constexpr char kEmptyIntentURI[] = "";
  39. } // namespace
  40. namespace ash {
  41. namespace quick_pair {
  42. class CompanionAppParserUnitTest : public testing::Test {
  43. public:
  44. void SetUp() override {
  45. repository_ = std::make_unique<FakeFastPairRepository>();
  46. parser_ = std::make_unique<CompanionAppParser>();
  47. deviceWithCompanionApp_ = base::MakeRefCounted<Device>(
  48. kHasCompanionAppModelId, kTestDeviceAddress,
  49. Protocol::kFastPairInitial);
  50. deviceWithValidMetadata_ = base::MakeRefCounted<Device>(
  51. kValidMetadataModelId, kTestDeviceAddress, Protocol::kFastPairInitial);
  52. deviceWithEmptyParameterMetadata_ = base::MakeRefCounted<Device>(
  53. kEmptyParameterMetadataModelId, kTestDeviceAddress,
  54. Protocol::kFastPairInitial);
  55. deviceWithEmptyMetadata_ = base::MakeRefCounted<Device>(
  56. kEmptyMetadataModelId, kTestDeviceAddress, Protocol::kFastPairInitial);
  57. deviceWithNoMetadata_ = base::MakeRefCounted<Device>(
  58. kNoMetadataModelId, kTestDeviceAddress, Protocol::kFastPairInitial);
  59. metadataWithCompanionApp_.set_intent_uri(kValidIntentWithCompanionAppURI);
  60. emptyMetadata_.set_intent_uri(kEmptyIntentURI);
  61. validMetadata_.set_intent_uri(kValidIntentURI);
  62. emptyParameterMetadata_.set_intent_uri(kEmptyParameterIntentURI);
  63. repository_->SetFakeMetadata(kHasCompanionAppModelId,
  64. metadataWithCompanionApp_);
  65. repository_->SetFakeMetadata(kEmptyMetadataModelId, emptyMetadata_);
  66. repository_->SetFakeMetadata(kValidMetadataModelId, validMetadata_);
  67. repository_->SetFakeMetadata(kEmptyParameterMetadataModelId,
  68. emptyParameterMetadata_);
  69. }
  70. protected:
  71. base::test::SingleThreadTaskEnvironment task_enviornment_;
  72. std::unique_ptr<FakeFastPairRepository> repository_;
  73. std::unique_ptr<CompanionAppParser> parser_;
  74. nearby::fastpair::Device metadataWithCompanionApp_;
  75. nearby::fastpair::Device validMetadata_;
  76. nearby::fastpair::Device emptyParameterMetadata_;
  77. nearby::fastpair::Device emptyMetadata_;
  78. scoped_refptr<ash::quick_pair::Device> deviceWithCompanionApp_;
  79. scoped_refptr<ash::quick_pair::Device> deviceWithEmptyMetadata_;
  80. scoped_refptr<ash::quick_pair::Device> deviceWithValidMetadata_;
  81. scoped_refptr<ash::quick_pair::Device> deviceWithEmptyParameterMetadata_;
  82. scoped_refptr<ash::quick_pair::Device> deviceWithNoMetadata_;
  83. };
  84. TEST_F(CompanionAppParserUnitTest, MetadataContainsCompanionApp) {
  85. base::MockCallback<base::OnceCallback<void(absl::optional<std::string>)>>
  86. on_companion_app_parsed;
  87. EXPECT_CALL(on_companion_app_parsed, Run(testing::Eq("com.bose.monet")))
  88. .Times(1);
  89. parser_->GetAppPackageName(deviceWithCompanionApp_,
  90. on_companion_app_parsed.Get());
  91. base::RunLoop().RunUntilIdle();
  92. }
  93. TEST_F(CompanionAppParserUnitTest, MetadataIsEmpty) {
  94. base::MockCallback<base::OnceCallback<void(absl::optional<std::string>)>>
  95. on_companion_app_parsed;
  96. EXPECT_CALL(on_companion_app_parsed, Run(testing::Eq(absl::nullopt)))
  97. .Times(1);
  98. parser_->GetAppPackageName(deviceWithEmptyMetadata_,
  99. on_companion_app_parsed.Get());
  100. base::RunLoop().RunUntilIdle();
  101. }
  102. TEST_F(CompanionAppParserUnitTest, MetadataIsValid) {
  103. base::MockCallback<base::OnceCallback<void(absl::optional<std::string>)>>
  104. on_companion_app_parsed;
  105. EXPECT_CALL(on_companion_app_parsed, Run(testing::Eq(absl::nullopt)))
  106. .Times(1);
  107. parser_->GetAppPackageName(deviceWithValidMetadata_,
  108. on_companion_app_parsed.Get());
  109. base::RunLoop().RunUntilIdle();
  110. }
  111. TEST_F(CompanionAppParserUnitTest, MetadataHasEmptyParameter) {
  112. base::MockCallback<base::OnceCallback<void(absl::optional<std::string>)>>
  113. on_companion_app_parsed;
  114. EXPECT_CALL(on_companion_app_parsed, Run(testing::Eq(absl::nullopt)))
  115. .Times(1);
  116. parser_->GetAppPackageName(deviceWithEmptyParameterMetadata_,
  117. on_companion_app_parsed.Get());
  118. base::RunLoop().RunUntilIdle();
  119. }
  120. TEST_F(CompanionAppParserUnitTest, NoMetadata) {
  121. base::MockCallback<base::OnceCallback<void(absl::optional<std::string>)>>
  122. on_companion_app_parsed;
  123. EXPECT_CALL(on_companion_app_parsed, Run(testing::Eq(absl::nullopt)))
  124. .Times(0);
  125. parser_->GetAppPackageName(deviceWithNoMetadata_,
  126. on_companion_app_parsed.Get());
  127. base::RunLoop().RunUntilIdle();
  128. }
  129. } // namespace quick_pair
  130. } // namespace ash