passphrase_type_metrics_provider_unittest.cc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Copyright 2019 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 "components/sync/driver/passphrase_type_metrics_provider.h"
  5. #include <memory>
  6. #include <vector>
  7. #include "base/bind.h"
  8. #include "base/test/metrics/histogram_tester.h"
  9. #include "components/sync/base/passphrase_enums.h"
  10. #include "components/sync/driver/mock_sync_service.h"
  11. #include "components/sync/driver/sync_user_settings_mock.h"
  12. #include "testing/gmock/include/gmock/gmock.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. #include "third_party/abseil-cpp/absl/types/optional.h"
  15. namespace syncer {
  16. namespace {
  17. using testing::Return;
  18. class PassphraseTypeMetricsProviderTest : public testing::Test {
  19. public:
  20. PassphraseTypeMetricsProviderTest() = default;
  21. ~PassphraseTypeMetricsProviderTest() override = default;
  22. void SetUp() override {
  23. // Using base::Unretained() here is safe, because |metrics_provider_| can't
  24. // outlive this and |sync_services_|.
  25. metrics_provider_ = std::make_unique<PassphraseTypeMetricsProvider>(
  26. base::BindRepeating(&PassphraseTypeMetricsProviderTest::GetSyncServices,
  27. base::Unretained(this)));
  28. }
  29. // Adds sync service, which will be provided to |metrics_provider_|.
  30. void AddSyncService(PassphraseType passphrase_type,
  31. bool sync_transport_active = true) {
  32. sync_services_.emplace_back(
  33. std::make_unique<testing::NiceMock<MockSyncService>>());
  34. if (sync_transport_active) {
  35. // Will return DISABLED otherwise.
  36. ON_CALL(*sync_services_.back(), GetTransportState())
  37. .WillByDefault(Return(SyncService::TransportState::ACTIVE));
  38. }
  39. ON_CALL(*sync_services_.back()->GetMockUserSettings(), GetPassphraseType())
  40. .WillByDefault(Return(passphrase_type));
  41. }
  42. void ExpectRecordedPassphraseType(PassphraseTypeForMetrics expected) {
  43. base::HistogramTester histogram_tester;
  44. metrics_provider_->ProvideCurrentSessionData(nullptr);
  45. histogram_tester.ExpectUniqueSample("Sync.PassphraseType2", expected, 1);
  46. }
  47. private:
  48. std::vector<const SyncService*> GetSyncServices() const {
  49. std::vector<const SyncService*> result;
  50. for (const auto& sync_service : sync_services_) {
  51. result.push_back(sync_service.get());
  52. }
  53. return result;
  54. }
  55. std::vector<std::unique_ptr<MockSyncService>> sync_services_;
  56. std::unique_ptr<PassphraseTypeMetricsProvider> metrics_provider_;
  57. };
  58. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordNoSyncingProfiles) {
  59. ExpectRecordedPassphraseType(
  60. PassphraseTypeForMetrics::kNoActiveSyncingProfiles);
  61. }
  62. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordSyncTransportInactive) {
  63. AddSyncService(PassphraseType::kKeystorePassphrase,
  64. /*sync_transport_active=*/false);
  65. ExpectRecordedPassphraseType(
  66. PassphraseTypeForMetrics::kNoActiveSyncingProfiles);
  67. }
  68. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordMultipleSyncingProfiles) {
  69. AddSyncService(PassphraseType::kImplicitPassphrase);
  70. AddSyncService(PassphraseType::kKeystorePassphrase);
  71. ExpectRecordedPassphraseType(
  72. PassphraseTypeForMetrics::kInconsistentStateAcrossProfiles);
  73. }
  74. TEST_F(PassphraseTypeMetricsProviderTest,
  75. ShouldRecordKeystorePassphraseWithMultipleProfiles) {
  76. AddSyncService(PassphraseType::kKeystorePassphrase);
  77. AddSyncService(PassphraseType::kKeystorePassphrase);
  78. ExpectRecordedPassphraseType(PassphraseTypeForMetrics::kKeystorePassphrase);
  79. }
  80. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordImplicitPassphrase) {
  81. AddSyncService(PassphraseType::kImplicitPassphrase);
  82. ExpectRecordedPassphraseType(PassphraseTypeForMetrics::kImplicitPassphrase);
  83. }
  84. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordKeystorePassphrase) {
  85. AddSyncService(PassphraseType::kKeystorePassphrase);
  86. ExpectRecordedPassphraseType(PassphraseTypeForMetrics::kKeystorePassphrase);
  87. }
  88. TEST_F(PassphraseTypeMetricsProviderTest,
  89. ShouldRecordFrozenImplicitPassphrase) {
  90. AddSyncService(PassphraseType::kFrozenImplicitPassphrase);
  91. ExpectRecordedPassphraseType(
  92. PassphraseTypeForMetrics::kFrozenImplicitPassphrase);
  93. }
  94. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordCustomPassphrase) {
  95. AddSyncService(PassphraseType::kCustomPassphrase);
  96. ExpectRecordedPassphraseType(PassphraseTypeForMetrics::kCustomPassphrase);
  97. }
  98. TEST_F(PassphraseTypeMetricsProviderTest, ShouldRecordTrustedVaultPassphrase) {
  99. AddSyncService(PassphraseType::kTrustedVaultPassphrase);
  100. ExpectRecordedPassphraseType(
  101. PassphraseTypeForMetrics::kTrustedVaultPassphrase);
  102. }
  103. } // namespace
  104. } // namespace syncer