xref: /aosp_15_r20/external/cronet/components/metrics/android_metrics_helper_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/metrics/android_metrics_helper.h"
6 
7 #include <memory>
8 
9 #include "base/test/metrics/histogram_tester.h"
10 #include "components/prefs/testing_pref_service.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 namespace metrics {
14 
TEST(AndroidMetricsHelperTest,CpuAbiBitnessSupport)15 TEST(AndroidMetricsHelperTest, CpuAbiBitnessSupport) {
16   std::unique_ptr<AndroidMetricsHelper> helper(
17       AndroidMetricsHelper::CreateInstanceForTest("", false, false));
18   EXPECT_EQ(helper->cpu_abi_bitness_support(), CpuAbiBitnessSupport::kNeither);
19 
20   helper.reset(AndroidMetricsHelper::CreateInstanceForTest("", true, false));
21   EXPECT_EQ(helper->cpu_abi_bitness_support(),
22             CpuAbiBitnessSupport::k32bitOnly);
23 
24   helper.reset(AndroidMetricsHelper::CreateInstanceForTest("", false, true));
25   EXPECT_EQ(helper->cpu_abi_bitness_support(),
26             CpuAbiBitnessSupport::k64bitOnly);
27 
28   helper.reset(AndroidMetricsHelper::CreateInstanceForTest("", true, true));
29   EXPECT_EQ(helper->cpu_abi_bitness_support(),
30             CpuAbiBitnessSupport::k32And64bit);
31 }
32 
TEST(AndroidMetricsHelperTest,VersionCode)33 TEST(AndroidMetricsHelperTest, VersionCode) {
34   std::unique_ptr<AndroidMetricsHelper> helper(
35       AndroidMetricsHelper::CreateInstanceForTest("588700000", true, true));
36   EXPECT_EQ(helper->version_code_int(), 588700000);
37 }
38 
TEST(AndroidMetricsHelperTest,VersionCode_BadData)39 TEST(AndroidMetricsHelperTest, VersionCode_BadData) {
40   std::unique_ptr<AndroidMetricsHelper> helper(
41       AndroidMetricsHelper::CreateInstanceForTest("", true, true));
42   EXPECT_EQ(helper->version_code_int(), 0);
43 
44   helper.reset(
45       AndroidMetricsHelper::CreateInstanceForTest("5887_000_0_9", true, true));
46   EXPECT_EQ(helper->version_code_int(), 0);
47 }
48 
49 class AndroidMetricsHelperHistTest : public testing::Test {
50  public:
AndroidMetricsHelperHistTest()51   AndroidMetricsHelperHistTest() {
52     AndroidMetricsHelper::RegisterPrefs(pref_service.registry());
53   }
~AndroidMetricsHelperHistTest()54   ~AndroidMetricsHelperHistTest() override {
55     AndroidMetricsHelper::ResetGlobalStateForTesting();
56   }
57 
58  protected:
59   TestingPrefServiceSimple pref_service;
60   base::HistogramTester histogram_tester;
61 };
62 
TEST_F(AndroidMetricsHelperHistTest,EmitHistograms_CurrentSession)63 TEST_F(AndroidMetricsHelperHistTest, EmitHistograms_CurrentSession) {
64   std::unique_ptr<AndroidMetricsHelper> helper(
65       AndroidMetricsHelper::CreateInstanceForTest("588700002", true, true));
66   helper->EmitHistograms(&pref_service, /*current_session=*/true);
67   histogram_tester.ExpectTotalCount("Android.VersionCode", 1);
68   histogram_tester.ExpectUniqueSample("Android.VersionCode", 588700002, 1);
69   histogram_tester.ExpectTotalCount("Android.CpuAbiBitnessSupport", 1);
70   histogram_tester.ExpectUniqueSample("Android.CpuAbiBitnessSupport",
71                                       CpuAbiBitnessSupport::k32And64bit, 1);
72 }
73 
TEST_F(AndroidMetricsHelperHistTest,EmitHistograms_LogPreviousSession)74 TEST_F(AndroidMetricsHelperHistTest, EmitHistograms_LogPreviousSession) {
75   std::unique_ptr<AndroidMetricsHelper> helper(
76       AndroidMetricsHelper::CreateInstanceForTest("588700002", true, true));
77   helper->EmitHistograms(&pref_service, /*current_session=*/false);
78 
79   histogram_tester.ExpectTotalCount("Android.VersionCode", 0);
80   histogram_tester.ExpectTotalCount("Android.CpuAbiBitnessSupport", 1);
81   histogram_tester.ExpectUniqueSample("Android.CpuAbiBitnessSupport",
82                                       CpuAbiBitnessSupport::k32And64bit, 1);
83 }
84 
TEST_F(AndroidMetricsHelperHistTest,EmitHistograms_LogPreviousSessionWithSavedLocalState)85 TEST_F(AndroidMetricsHelperHistTest,
86        EmitHistograms_LogPreviousSessionWithSavedLocalState) {
87   AndroidMetricsHelper::SaveLocalState(&pref_service, 588700002);
88   std::unique_ptr<AndroidMetricsHelper> helper(
89       AndroidMetricsHelper::CreateInstanceForTest("588700006", false, false));
90   helper->EmitHistograms(&pref_service, /*current_session=*/false);
91   // The previous value was used.
92   histogram_tester.ExpectTotalCount("Android.VersionCode", 1);
93   histogram_tester.ExpectUniqueSample("Android.VersionCode", 588700002, 1);
94   // We don't bother to save/restore CpuAbiBitnessSupport, as we assume that the
95   // value doesn't change across sessions. The test uses a different value
96   // artificially, solely for the purpose of testing this behavior.
97   histogram_tester.ExpectTotalCount("Android.CpuAbiBitnessSupport", 1);
98   histogram_tester.ExpectUniqueSample("Android.CpuAbiBitnessSupport",
99                                       CpuAbiBitnessSupport::kNeither, 1);
100 }
101 
TEST_F(AndroidMetricsHelperHistTest,EmitHistograms_BadData)102 TEST_F(AndroidMetricsHelperHistTest, EmitHistograms_BadData) {
103   std::unique_ptr<AndroidMetricsHelper> helper(
104       AndroidMetricsHelper::CreateInstanceForTest("5887_000_0_2", true, false));
105   helper->EmitHistograms(&pref_service, /*current_session=*/true);
106 
107   histogram_tester.ExpectTotalCount("Android.VersionCode", 0);
108   histogram_tester.ExpectTotalCount("Android.CpuAbiBitnessSupport", 1);
109   histogram_tester.ExpectUniqueSample("Android.CpuAbiBitnessSupport",
110                                       CpuAbiBitnessSupport::k32bitOnly, 1);
111 }
112 
113 }  // namespace metrics
114