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

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
« no previous file with comments | « components/metrics/data_use_tracker.cc ('k') | components/metrics/metrics_pref_names.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 private:
35 DISALLOW_COPY_AND_ASSIGN(TestDataUsePrefService);
36 };
37
38 class FakeDataUseTracker : public DataUseTracker {
39 public:
40 FakeDataUseTracker(PrefService* local_state) : DataUseTracker(local_state) {}
41
42 bool GetUmaWeeklyQuota(int* uma_weekly_quota_bytes) const override {
43 *uma_weekly_quota_bytes = 200;
44 return true;
45 }
46
47 bool GetUmaRatio(double* ratio) const override {
48 *ratio = 0.05;
49 return true;
50 }
51
52 base::Time GetCurrentMeasurementDate() const override {
53 base::Time today_for_test;
54 base::Time::FromUTCString(kTodayStr, &today_for_test);
55 return today_for_test;
56 }
57
58 std::string GetCurrentMeasurementDateAsString() const override {
59 return kTodayStr;
60 }
61
62 private:
63 DISALLOW_COPY_AND_ASSIGN(FakeDataUseTracker);
64 };
65
66 // Sets up data usage prefs with mock values so that UMA traffic is above the
67 // allowed ratio.
68 void SetPrefTestValuesOverRatio(PrefService* local_state) {
69 base::DictionaryValue user_pref_dict;
70 user_pref_dict.SetInteger(kTodayStr, 2 * 100);
71 user_pref_dict.SetInteger(kYesterdayStr, 2 * 100);
72 user_pref_dict.SetInteger(kExpiredDateStr1, 2 * 100);
73 user_pref_dict.SetInteger(kExpiredDateStr2, 2 * 100);
74 local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
75
76 base::DictionaryValue uma_pref_dict;
77 uma_pref_dict.SetInteger(kTodayStr, 50);
78 uma_pref_dict.SetInteger(kYesterdayStr, 50);
79 uma_pref_dict.SetInteger(kExpiredDateStr1, 50);
80 uma_pref_dict.SetInteger(kExpiredDateStr2, 50);
81 local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
82 }
83
84 // Sets up data usage prefs with mock values which can be valid.
85 void SetPrefTestValuesValidRatio(PrefService* local_state) {
86 base::DictionaryValue user_pref_dict;
87 user_pref_dict.SetInteger(kTodayStr, 100 * 100);
88 user_pref_dict.SetInteger(kYesterdayStr, 100 * 100);
89 user_pref_dict.SetInteger(kExpiredDateStr1, 100 * 100);
90 user_pref_dict.SetInteger(kExpiredDateStr2, 100 * 100);
91 local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
92
93 // Should be 4% of user traffic
94 base::DictionaryValue uma_pref_dict;
95 uma_pref_dict.SetInteger(kTodayStr, 4 * 100);
96 uma_pref_dict.SetInteger(kYesterdayStr, 4 * 100);
97 uma_pref_dict.SetInteger(kExpiredDateStr1, 4 * 100);
98 uma_pref_dict.SetInteger(kExpiredDateStr2, 4 * 100);
99 local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
100 }
101
102 } // namespace
103
104 TEST(DataUseTrackerTest, CheckUpdateUsagePref) {
105 TestDataUsePrefService local_state;
106 FakeDataUseTracker data_use_tracker(&local_state);
107 local_state.ClearDataUsePrefs();
108
109 int user_pref_value = 0;
110 int uma_pref_value = 0;
111
112 data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("", 2 * 100, true);
113 local_state.GetDictionary(prefs::kUserCellDataUse)
114 ->GetInteger(kTodayStr, &user_pref_value);
115 EXPECT_EQ(2 * 100, user_pref_value);
116 local_state.GetDictionary(prefs::kUmaCellDataUse)
117 ->GetInteger(kTodayStr, &uma_pref_value);
118 EXPECT_EQ(0, uma_pref_value);
119
120 data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("UMA", 100, true);
121 local_state.GetDictionary(prefs::kUserCellDataUse)
122 ->GetInteger(kTodayStr, &user_pref_value);
123 EXPECT_EQ(3 * 100, user_pref_value);
124 local_state.GetDictionary(prefs::kUmaCellDataUse)
125 ->GetInteger(kTodayStr, &uma_pref_value);
126 EXPECT_EQ(100, uma_pref_value);
127 }
128
129 TEST(DataUseTrackerTest, CheckRemoveExpiredEntries) {
130 TestDataUsePrefService local_state;
131 FakeDataUseTracker data_use_tracker(&local_state);
132 local_state.ClearDataUsePrefs();
133 SetPrefTestValuesOverRatio(&local_state);
134 data_use_tracker.RemoveExpiredEntries();
135
136 int user_pref_value = 0;
137 int uma_pref_value = 0;
138
139 local_state.GetDictionary(prefs::kUserCellDataUse)
140 ->GetInteger(kExpiredDateStr1, &user_pref_value);
141 EXPECT_EQ(0, user_pref_value);
142 local_state.GetDictionary(prefs::kUmaCellDataUse)
143 ->GetInteger(kExpiredDateStr1, &uma_pref_value);
144 EXPECT_EQ(0, uma_pref_value);
145
146 local_state.GetDictionary(prefs::kUserCellDataUse)
147 ->GetInteger(kExpiredDateStr2, &user_pref_value);
148 EXPECT_EQ(0, user_pref_value);
149 local_state.GetDictionary(prefs::kUmaCellDataUse)
150 ->GetInteger(kExpiredDateStr2, &uma_pref_value);
151 EXPECT_EQ(0, uma_pref_value);
152
153 local_state.GetDictionary(prefs::kUserCellDataUse)
154 ->GetInteger(kTodayStr, &user_pref_value);
155 EXPECT_EQ(2 * 100, user_pref_value);
156 local_state.GetDictionary(prefs::kUmaCellDataUse)
157 ->GetInteger(kTodayStr, &uma_pref_value);
158 EXPECT_EQ(50, uma_pref_value);
159
160 local_state.GetDictionary(prefs::kUserCellDataUse)
161 ->GetInteger(kYesterdayStr, &user_pref_value);
162 EXPECT_EQ(2 * 100, user_pref_value);
163 local_state.GetDictionary(prefs::kUmaCellDataUse)
164 ->GetInteger(kYesterdayStr, &uma_pref_value);
165 EXPECT_EQ(50, uma_pref_value);
166 }
167
168 TEST(DataUseTrackerTest, CheckComputeTotalDataUse) {
169 TestDataUsePrefService local_state;
170 FakeDataUseTracker data_use_tracker(&local_state);
171 local_state.ClearDataUsePrefs();
172 SetPrefTestValuesOverRatio(&local_state);
173
174 int user_data_use =
175 data_use_tracker.ComputeTotalDataUse(prefs::kUserCellDataUse);
176 EXPECT_EQ(8 * 100, user_data_use);
177 int uma_data_use =
178 data_use_tracker.ComputeTotalDataUse(prefs::kUmaCellDataUse);
179 EXPECT_EQ(4 * 50, uma_data_use);
180 }
181
182 TEST(DataUseTrackerTest, CheckShouldUploadLogOnCellular) {
183 TestDataUsePrefService local_state;
184 FakeDataUseTracker data_use_tracker(&local_state);
185 local_state.ClearDataUsePrefs();
186 SetPrefTestValuesOverRatio(&local_state);
187
188 bool can_upload = data_use_tracker.ShouldUploadLogOnCellular(50);
189 EXPECT_TRUE(can_upload);
190 can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
191 EXPECT_TRUE(can_upload);
192 can_upload = data_use_tracker.ShouldUploadLogOnCellular(150);
193 EXPECT_FALSE(can_upload);
194
195 local_state.ClearDataUsePrefs();
196 SetPrefTestValuesValidRatio(&local_state);
197 can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
198 EXPECT_TRUE(can_upload);
199 // this is about 0.49%
200 can_upload = data_use_tracker.ShouldUploadLogOnCellular(200);
201 EXPECT_TRUE(can_upload);
202 can_upload = data_use_tracker.ShouldUploadLogOnCellular(300);
203 EXPECT_FALSE(can_upload);
204 }
205
206 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/data_use_tracker.cc ('k') | components/metrics/metrics_pref_names.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698