// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/metrics/gms_metrics_provider.h" #include "base/android/build_info.h" #include "base/test/metrics/histogram_tester.h" #include "testing/gtest/include/gtest/gtest.h" namespace metrics { namespace { // Same as GmsMetricsProvider but Gms version is mocked for easy testing. class MockedGmsMetricsProvider : public GmsMetricsProvider { public: void SetGmsVersionForTesting(const std::string& version) { version_ = version; } private: // GmsMetricsProvider. std::string GetGMSVersion() override { return version_; } std::string version_; }; } // namespace class GmsMetricsProviderTest : public testing::Test { protected: GmsMetricsProviderTest() = default; base::HistogramTester& histogram_tester() { return histogram_tester_; } MockedGmsMetricsProvider& gms_metrics_provider() { return gms_metrics_provider_; } private: base::HistogramTester histogram_tester_; MockedGmsMetricsProvider gms_metrics_provider_; }; TEST_F(GmsMetricsProviderTest, TestMetricsReportedCorrectly) { gms_metrics_provider().SetGmsVersionForTesting("234012000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23401, /*expected_bucket_count=*/1); gms_metrics_provider().SetGmsVersionForTesting("234016000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23401, /*expected_bucket_count=*/2); gms_metrics_provider().SetGmsVersionForTesting("234082000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23401, /*expected_bucket_count=*/3); } TEST_F(GmsMetricsProviderTest, TestMetricsReportedCorrectlyForBeta) { gms_metrics_provider().SetGmsVersionForTesting("234002000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23400, /*expected_bucket_count=*/1); gms_metrics_provider().SetGmsVersionForTesting("234008000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23400, /*expected_bucket_count=*/2); gms_metrics_provider().SetGmsVersionForTesting("234010000"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/23400, /*expected_bucket_count=*/3); } TEST_F(GmsMetricsProviderTest, TestGMSNotInstalled) { gms_metrics_provider().SetGmsVersionForTesting("0"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/0, /*expected_bucket_count=*/1); } TEST_F(GmsMetricsProviderTest, TestGMSVersionInvalid) { gms_metrics_provider().SetGmsVersionForTesting("aaaa"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/1, /*expected_bucket_count=*/1); } TEST_F(GmsMetricsProviderTest, TestGMSVersionOutOfRange) { gms_metrics_provider().SetGmsVersionForTesting("11111"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/2, /*expected_bucket_count=*/1); gms_metrics_provider().SetGmsVersionForTesting("999999999"); gms_metrics_provider().ProvideHistograms(); histogram_tester().ExpectUniqueSample("Android.PlayServices.ShortVersion", /*sample=*/2, /*expected_bucket_count=*/2); } } // namespace metrics