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

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

Powered by Google App Engine
This is Rietveld 408576698