// 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