Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Side by Side Diff: components/metrics/data_use_tracker_unittest.cc

Issue 1818613002: Implement UMA log throttling for cellular connections (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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
5 #include "components/metrics/data_use_tracker.h"
6
7 #include "base/strings/stringprintf.h"
8 #include "components/metrics/metrics_pref_names.h"
9 #include "components/prefs/pref_registry_simple.h"
10 #include "components/prefs/testing_pref_service.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace metrics {
14
15 namespace {
16
17 const char kTodayStr[] = "2016-03-16";
18 const char kYesterdayStr[] = "2016-03-15";
19 const char kExpiredDateStr1[] = "2016-03-09";
20 const char kExpiredDateStr2[] = "2016-03-01";
21
22 class TestDataUsePrefService : public TestingPrefServiceSimple {
23 public:
24 TestDataUsePrefService() {
25 registry()->RegisterDictionaryPref(metrics::prefs::kUserCellDataUse);
26 registry()->RegisterDictionaryPref(metrics::prefs::kUmaCellDataUse);
27 }
28
29 void ClearDataUsePrefs() {
30 ClearPref(metrics::prefs::kUserCellDataUse);
31 ClearPref(metrics::prefs::kUmaCellDataUse);
32 }
33 };
34
35 // Sets up data usage prefs with mock values so that UMA traffic is above the
36 // allowed ratio.
37 void SetPrefTestValuesOverRatio(PrefService* local_state) {
38 base::DictionaryValue user_pref_dict;
39 user_pref_dict.SetInteger(kTodayStr, 2 * 100);
40 user_pref_dict.SetInteger(kYesterdayStr, 2 * 100);
41 user_pref_dict.SetInteger(kExpiredDateStr1, 2 * 100);
42 user_pref_dict.SetInteger(kExpiredDateStr2, 2 * 100);
43 local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
44
45 base::DictionaryValue uma_pref_dict;
46 uma_pref_dict.SetInteger(kTodayStr, 50);
47 uma_pref_dict.SetInteger(kYesterdayStr, 50);
48 uma_pref_dict.SetInteger(kExpiredDateStr1, 50);
49 uma_pref_dict.SetInteger(kExpiredDateStr2, 50);
50 local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
51 }
52
53 // Sets up data usage prefs with mock values which can be valid.
54 void SetPrefTestValuesValidRatio(PrefService* local_state) {
55 base::DictionaryValue user_pref_dict;
56 user_pref_dict.SetInteger(kTodayStr, 100 * 100);
57 user_pref_dict.SetInteger(kYesterdayStr, 100 * 100);
58 user_pref_dict.SetInteger(kExpiredDateStr1, 100 * 100);
59 user_pref_dict.SetInteger(kExpiredDateStr2, 100 * 100);
60 local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
61
62 // Should be 4% of user traffic
63 base::DictionaryValue uma_pref_dict;
64 uma_pref_dict.SetInteger(kTodayStr, 4 * 100);
65 uma_pref_dict.SetInteger(kYesterdayStr, 4 * 100);
66 uma_pref_dict.SetInteger(kExpiredDateStr1, 4 * 100);
67 uma_pref_dict.SetInteger(kExpiredDateStr2, 4 * 100);
68 local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
69 }
70
71 } // namespace
72
73 class MockDataUseTracker : public DataUseTracker {
Alexei Svitkine (slow) 2016/03/31 22:18:03 This looks like a Fake, not a Mock. http://stacko
gayane -on leave until 09-2017 2016/04/01 19:49:31 Done.
74 public:
75 MockDataUseTracker(PrefService* local_state) : DataUseTracker(local_state) {}
76
77 bool GetUmaQuota(int* quota) override {
78 *quota = 200;
79 return true;
80 }
81
82 bool GetUmaRatio(double* ratio) override {
83 *ratio = 0.05;
84 return true;
85 }
86
87 base::Time GetCurrentMeasurementDate() override {
88 base::Time today_for_test;
89 base::Time::FromUTCString(kTodayStr, &today_for_test);
90 return today_for_test;
91 }
92
93 std::string GetCurrentMeasurementDateAsString() override { return kTodayStr; }
94 };
Alexei Svitkine (slow) 2016/03/31 22:18:03 Move this class to the anon namespace above. Proba
gayane -on leave until 09-2017 2016/04/01 19:49:31 Done.
95
96 TEST(DataUseTrackerTest, CheckUpdateUsagePref) {
97 TestDataUsePrefService local_state;
98 MockDataUseTracker data_use_tracker(&local_state);
99 local_state.ClearDataUsePrefs();
100
101 int user_pref_value = 0;
102 int uma_pref_value = 0;
103
104 data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("", 2 * 100);
105 local_state.GetDictionary(prefs::kUserCellDataUse)
106 ->GetInteger(kTodayStr, &user_pref_value);
107 EXPECT_EQ(2 * 100, user_pref_value);
108 local_state.GetDictionary(prefs::kUmaCellDataUse)
109 ->GetInteger(kTodayStr, &uma_pref_value);
110 EXPECT_EQ(0, uma_pref_value);
111
112 data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("UMA", 100);
113 local_state.GetDictionary(prefs::kUserCellDataUse)
114 ->GetInteger(kTodayStr, &user_pref_value);
115 EXPECT_EQ(3 * 100, user_pref_value);
116 local_state.GetDictionary(prefs::kUmaCellDataUse)
117 ->GetInteger(kTodayStr, &uma_pref_value);
118 EXPECT_EQ(100, uma_pref_value);
119 }
120
121 TEST(DataUseTrackerTest, CheckRemoveExpiredEntries) {
122 TestDataUsePrefService local_state;
123 MockDataUseTracker data_use_tracker(&local_state);
124 local_state.ClearDataUsePrefs();
125 SetPrefTestValuesOverRatio(&local_state);
126 data_use_tracker.RemoveExpiredEntries();
127
128 int user_pref_value = 0;
129 int uma_pref_value = 0;
130
131 local_state.GetDictionary(prefs::kUserCellDataUse)
132 ->GetInteger(kExpiredDateStr1, &user_pref_value);
133 EXPECT_EQ(0, user_pref_value);
134 local_state.GetDictionary(prefs::kUmaCellDataUse)
135 ->GetInteger(kExpiredDateStr1, &uma_pref_value);
136 EXPECT_EQ(0, uma_pref_value);
137
138 local_state.GetDictionary(prefs::kUserCellDataUse)
139 ->GetInteger(kExpiredDateStr2, &user_pref_value);
140 EXPECT_EQ(0, user_pref_value);
141 local_state.GetDictionary(prefs::kUmaCellDataUse)
142 ->GetInteger(kExpiredDateStr2, &uma_pref_value);
143 EXPECT_EQ(0, uma_pref_value);
144
145 local_state.GetDictionary(prefs::kUserCellDataUse)
146 ->GetInteger(kTodayStr, &user_pref_value);
147 EXPECT_EQ(2 * 100, user_pref_value);
148 local_state.GetDictionary(prefs::kUmaCellDataUse)
149 ->GetInteger(kTodayStr, &uma_pref_value);
150 EXPECT_EQ(50, uma_pref_value);
151
152 local_state.GetDictionary(prefs::kUserCellDataUse)
153 ->GetInteger(kYesterdayStr, &user_pref_value);
154 EXPECT_EQ(2 * 100, user_pref_value);
155 local_state.GetDictionary(prefs::kUmaCellDataUse)
156 ->GetInteger(kYesterdayStr, &uma_pref_value);
157 EXPECT_EQ(50, uma_pref_value);
158 }
159
160 TEST(DataUseTrackerTest, CheckComputeTotalDataUse) {
161 TestDataUsePrefService local_state;
162 MockDataUseTracker data_use_tracker(&local_state);
163 local_state.ClearDataUsePrefs();
164 SetPrefTestValuesOverRatio(&local_state);
165
166 int user_data_use =
167 data_use_tracker.ComputeTotalDataUse(prefs::kUserCellDataUse);
168 EXPECT_EQ(8 * 100, user_data_use);
169 int uma_data_use =
170 data_use_tracker.ComputeTotalDataUse(prefs::kUmaCellDataUse);
171 EXPECT_EQ(4 * 50, uma_data_use);
172 }
173
174 TEST(DataUseTrackerTest, CheckCanUploadUMALog) {
175 TestDataUsePrefService local_state;
176 MockDataUseTracker data_use_tracker(&local_state);
177 local_state.ClearDataUsePrefs();
178 SetPrefTestValuesOverRatio(&local_state);
179
180 bool can_upload = data_use_tracker.CanUploadUMALog(50);
181 EXPECT_TRUE(can_upload);
182 can_upload = data_use_tracker.CanUploadUMALog(100);
183 EXPECT_TRUE(can_upload);
184 can_upload = data_use_tracker.CanUploadUMALog(150);
185 EXPECT_FALSE(can_upload);
186
187 local_state.ClearDataUsePrefs();
188 SetPrefTestValuesValidRatio(&local_state);
189 can_upload = data_use_tracker.CanUploadUMALog(100);
190 EXPECT_TRUE(can_upload);
191 can_upload = data_use_tracker.CanUploadUMALog(200); // this is about 0.49%
192 EXPECT_TRUE(can_upload);
193 can_upload = data_use_tracker.CanUploadUMALog(300);
194 EXPECT_FALSE(can_upload);
195 }
196
197 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698