xref: /aosp_15_r20/external/cronet/components/metrics/data_use_tracker_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2016 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/data_use_tracker.h"
6 
7 #include "base/time/time.h"
8 #include "base/values.h"
9 #include "components/metrics/metrics_pref_names.h"
10 #include "components/prefs/pref_registry_simple.h"
11 #include "components/prefs/testing_pref_service.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace metrics {
15 
16 namespace {
17 
18 const char kTodayStr[] = "2016-03-16";
19 const char kYesterdayStr[] = "2016-03-15";
20 const char kExpiredDateStr1[] = "2016-03-09";
21 const char kExpiredDateStr2[] = "2016-03-01";
22 
23 class TestDataUsePrefService : public TestingPrefServiceSimple {
24  public:
TestDataUsePrefService()25   TestDataUsePrefService() { DataUseTracker::RegisterPrefs(registry()); }
26 
27   TestDataUsePrefService(const TestDataUsePrefService&) = delete;
28   TestDataUsePrefService& operator=(const TestDataUsePrefService&) = delete;
29 
ClearDataUsePrefs()30   void ClearDataUsePrefs() {
31     ClearPref(metrics::prefs::kUserCellDataUse);
32     ClearPref(metrics::prefs::kUmaCellDataUse);
33   }
34 };
35 
36 class FakeDataUseTracker : public DataUseTracker {
37  public:
FakeDataUseTracker(PrefService * local_state)38   FakeDataUseTracker(PrefService* local_state) : DataUseTracker(local_state) {}
39 
40   FakeDataUseTracker(const FakeDataUseTracker&) = delete;
41   FakeDataUseTracker& operator=(const FakeDataUseTracker&) = delete;
42 
GetCurrentMeasurementDate() const43   base::Time GetCurrentMeasurementDate() const override {
44     base::Time today_for_test;
45     EXPECT_TRUE(base::Time::FromUTCString(kTodayStr, &today_for_test));
46     return today_for_test;
47   }
48 
GetCurrentMeasurementDateAsString() const49   std::string GetCurrentMeasurementDateAsString() const override {
50     return kTodayStr;
51   }
52 };
53 
54 // Sets up data usage prefs with mock values so that UMA traffic is above the
55 // allowed ratio.
SetPrefTestValuesOverRatio(PrefService * local_state)56 void SetPrefTestValuesOverRatio(PrefService* local_state) {
57   base::Value::Dict user_pref_dict;
58   user_pref_dict.Set(kTodayStr, 2 * 100 * 1024);
59   user_pref_dict.Set(kYesterdayStr, 2 * 100 * 1024);
60   user_pref_dict.Set(kExpiredDateStr1, 2 * 100 * 1024);
61   user_pref_dict.Set(kExpiredDateStr2, 2 * 100 * 1024);
62   local_state->SetDict(prefs::kUserCellDataUse, std::move(user_pref_dict));
63 
64   base::Value::Dict uma_pref_dict;
65   uma_pref_dict.Set(kTodayStr, 50 * 1024);
66   uma_pref_dict.Set(kYesterdayStr, 50 * 1024);
67   uma_pref_dict.Set(kExpiredDateStr1, 50 * 1024);
68   uma_pref_dict.Set(kExpiredDateStr2, 50 * 1024);
69   local_state->SetDict(prefs::kUmaCellDataUse, std::move(uma_pref_dict));
70 }
71 
72 // Sets up data usage prefs with mock values which can be valid.
SetPrefTestValuesValidRatio(PrefService * local_state)73 void SetPrefTestValuesValidRatio(PrefService* local_state) {
74   base::Value::Dict user_pref_dict;
75   user_pref_dict.Set(kTodayStr, 100 * 100 * 1024);
76   user_pref_dict.Set(kYesterdayStr, 100 * 100 * 1024);
77   user_pref_dict.Set(kExpiredDateStr1, 100 * 100 * 1024);
78   user_pref_dict.Set(kExpiredDateStr2, 100 * 100 * 1024);
79   local_state->SetDict(prefs::kUserCellDataUse, std::move(user_pref_dict));
80 
81   // Should be 4% of user traffic
82   base::Value::Dict uma_pref_dict;
83   uma_pref_dict.Set(kTodayStr, 4 * 100 * 1024);
84   uma_pref_dict.Set(kYesterdayStr, 4 * 100 * 1024);
85   uma_pref_dict.Set(kExpiredDateStr1, 4 * 100 * 1024);
86   uma_pref_dict.Set(kExpiredDateStr2, 4 * 100 * 1024);
87   local_state->SetDict(prefs::kUmaCellDataUse, std::move(uma_pref_dict));
88 }
89 
90 }  // namespace
91 
TEST(DataUseTrackerTest,CheckUpdateUsagePref)92 TEST(DataUseTrackerTest, CheckUpdateUsagePref) {
93   TestDataUsePrefService local_state;
94   FakeDataUseTracker data_use_tracker(&local_state);
95   local_state.ClearDataUsePrefs();
96 
97   data_use_tracker.UpdateMetricsUsagePrefsInternal(2 * 100 * 1024, true, false);
98   EXPECT_EQ(2 * 100 * 1024,
99             local_state.GetDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
100   EXPECT_FALSE(local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
101 
102   data_use_tracker.UpdateMetricsUsagePrefsInternal(100 * 1024, true, true);
103   EXPECT_EQ(3 * 100 * 1024,
104             local_state.GetDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
105   EXPECT_EQ(100 * 1024,
106             local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
107 }
108 
TEST(DataUseTrackerTest,CheckRemoveExpiredEntries)109 TEST(DataUseTrackerTest, CheckRemoveExpiredEntries) {
110   TestDataUsePrefService local_state;
111   FakeDataUseTracker data_use_tracker(&local_state);
112   local_state.ClearDataUsePrefs();
113   SetPrefTestValuesOverRatio(&local_state);
114   data_use_tracker.RemoveExpiredEntries();
115 
116   EXPECT_FALSE(
117       local_state.GetDict(prefs::kUserCellDataUse).FindInt(kExpiredDateStr1));
118   EXPECT_FALSE(
119       local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kExpiredDateStr1));
120 
121   EXPECT_FALSE(
122       local_state.GetDict(prefs::kUserCellDataUse).FindInt(kExpiredDateStr2));
123   EXPECT_FALSE(
124       local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kExpiredDateStr2));
125 
126   EXPECT_EQ(2 * 100 * 1024,
127             local_state.GetDict(prefs::kUserCellDataUse).FindInt(kTodayStr));
128   EXPECT_EQ(50 * 1024,
129             local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kTodayStr));
130 
131   EXPECT_EQ(
132       2 * 100 * 1024,
133       local_state.GetDict(prefs::kUserCellDataUse).FindInt(kYesterdayStr));
134   EXPECT_EQ(50 * 1024,
135             local_state.GetDict(prefs::kUmaCellDataUse).FindInt(kYesterdayStr));
136 }
137 
TEST(DataUseTrackerTest,CheckComputeTotalDataUse)138 TEST(DataUseTrackerTest, CheckComputeTotalDataUse) {
139   TestDataUsePrefService local_state;
140   FakeDataUseTracker data_use_tracker(&local_state);
141   local_state.ClearDataUsePrefs();
142   SetPrefTestValuesOverRatio(&local_state);
143 
144   int user_data_use =
145       data_use_tracker.ComputeTotalDataUse(prefs::kUserCellDataUse);
146   EXPECT_EQ(8 * 100 * 1024, user_data_use);
147   int uma_data_use =
148       data_use_tracker.ComputeTotalDataUse(prefs::kUmaCellDataUse);
149   EXPECT_EQ(4 * 50 * 1024, uma_data_use);
150 }
151 
TEST(DataUseTrackerTest,CheckShouldUploadLogOnCellular)152 TEST(DataUseTrackerTest, CheckShouldUploadLogOnCellular) {
153   TestDataUsePrefService local_state;
154   FakeDataUseTracker data_use_tracker(&local_state);
155   local_state.ClearDataUsePrefs();
156   SetPrefTestValuesOverRatio(&local_state);
157 
158   bool can_upload = data_use_tracker.ShouldUploadLogOnCellular(50 * 1024);
159   EXPECT_TRUE(can_upload);
160   can_upload = data_use_tracker.ShouldUploadLogOnCellular(100 * 1024);
161   EXPECT_TRUE(can_upload);
162   can_upload = data_use_tracker.ShouldUploadLogOnCellular(150 * 1024);
163   EXPECT_FALSE(can_upload);
164 
165   local_state.ClearDataUsePrefs();
166   SetPrefTestValuesValidRatio(&local_state);
167   can_upload = data_use_tracker.ShouldUploadLogOnCellular(100 * 1024);
168   EXPECT_TRUE(can_upload);
169   // this is about 0.49%
170   can_upload = data_use_tracker.ShouldUploadLogOnCellular(200 * 1024);
171   EXPECT_TRUE(can_upload);
172   can_upload = data_use_tracker.ShouldUploadLogOnCellular(300 * 1024);
173   EXPECT_FALSE(can_upload);
174 }
175 
176 }  // namespace metrics
177