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

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

Powered by Google App Engine
This is Rietveld 408576698