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

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

Issue 318993002: Merge MetricsLog and MetricsLogBase. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: address nits Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « components/metrics/metrics_log_manager.cc ('k') | components/metrics/metrics_log_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/metrics/metrics_log_manager.h" 5 #include "components/metrics/metrics_log_manager.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/prefs/pref_registry_simple.h" 11 #include "base/prefs/pref_registry_simple.h"
12 #include "base/prefs/testing_pref_service.h" 12 #include "base/prefs/testing_pref_service.h"
13 #include "components/metrics/metrics_log_base.h" 13 #include "components/metrics/metrics_log.h"
14 #include "components/metrics/metrics_pref_names.h" 14 #include "components/metrics/metrics_pref_names.h"
15 #include "components/metrics/test_metrics_service_client.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 namespace metrics { 18 namespace metrics {
18 19
19 namespace { 20 namespace {
20 21
21 // Dummy serializer that just stores logs in memory. 22 // Dummy serializer that just stores logs in memory.
22 class TestLogPrefService : public TestingPrefServiceSimple { 23 class TestLogPrefService : public TestingPrefServiceSimple {
23 public: 24 public:
24 TestLogPrefService() { 25 TestLogPrefService() {
25 registry()->RegisterListPref(prefs::kMetricsInitialLogs); 26 registry()->RegisterListPref(prefs::kMetricsInitialLogs);
26 registry()->RegisterListPref(prefs::kMetricsOngoingLogs); 27 registry()->RegisterListPref(prefs::kMetricsOngoingLogs);
27 } 28 }
29
28 // Returns the number of logs of the given type. 30 // Returns the number of logs of the given type.
29 size_t TypeCount(MetricsLogManager::LogType log_type) { 31 size_t TypeCount(MetricsLog::LogType log_type) {
30 int list_length = 0; 32 int list_length = 0;
31 if (log_type == MetricsLogBase::INITIAL_STABILITY_LOG) 33 if (log_type == MetricsLog::INITIAL_STABILITY_LOG)
32 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize(); 34 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize();
33 else 35 else
34 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize(); 36 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize();
35 return list_length ? list_length - 2 : 0; 37 return list_length ? list_length - 2 : 0;
36 } 38 }
37 }; 39 };
38 40
39 } // namespace 41 } // namespace
40 42
41 TEST(MetricsLogManagerTest, StandardFlow) { 43 TEST(MetricsLogManagerTest, StandardFlow) {
44 TestMetricsServiceClient client;
42 TestLogPrefService pref_service; 45 TestLogPrefService pref_service;
43 MetricsLogManager log_manager(&pref_service, 0); 46 MetricsLogManager log_manager(&pref_service, 0);
44 47
45 // Make sure a new manager has a clean slate. 48 // Make sure a new manager has a clean slate.
46 EXPECT_EQ(NULL, log_manager.current_log()); 49 EXPECT_EQ(NULL, log_manager.current_log());
47 EXPECT_FALSE(log_manager.has_staged_log()); 50 EXPECT_FALSE(log_manager.has_staged_log());
48 EXPECT_FALSE(log_manager.has_unsent_logs()); 51 EXPECT_FALSE(log_manager.has_unsent_logs());
49 52
50 // Check that the normal flow works. 53 // Check that the normal flow works.
51 MetricsLogBase* initial_log = 54 MetricsLog* initial_log = new MetricsLog(
52 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); 55 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service);
53 log_manager.BeginLoggingWithLog(make_scoped_ptr(initial_log)); 56 log_manager.BeginLoggingWithLog(make_scoped_ptr(initial_log));
54 EXPECT_EQ(initial_log, log_manager.current_log()); 57 EXPECT_EQ(initial_log, log_manager.current_log());
55 EXPECT_FALSE(log_manager.has_staged_log()); 58 EXPECT_FALSE(log_manager.has_staged_log());
56 59
57 log_manager.FinishCurrentLog(); 60 log_manager.FinishCurrentLog();
58 EXPECT_EQ(NULL, log_manager.current_log()); 61 EXPECT_EQ(NULL, log_manager.current_log());
59 EXPECT_TRUE(log_manager.has_unsent_logs()); 62 EXPECT_TRUE(log_manager.has_unsent_logs());
60 EXPECT_FALSE(log_manager.has_staged_log()); 63 EXPECT_FALSE(log_manager.has_staged_log());
61 64
62 MetricsLogBase* second_log = 65 MetricsLog* second_log =
63 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"); 66 new MetricsLog("id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service);
64 log_manager.BeginLoggingWithLog(make_scoped_ptr(second_log)); 67 log_manager.BeginLoggingWithLog(make_scoped_ptr(second_log));
65 EXPECT_EQ(second_log, log_manager.current_log()); 68 EXPECT_EQ(second_log, log_manager.current_log());
66 69
67 log_manager.StageNextLogForUpload(); 70 log_manager.StageNextLogForUpload();
68 EXPECT_TRUE(log_manager.has_staged_log()); 71 EXPECT_TRUE(log_manager.has_staged_log());
69 EXPECT_FALSE(log_manager.staged_log().empty()); 72 EXPECT_FALSE(log_manager.staged_log().empty());
70 73
71 log_manager.DiscardStagedLog(); 74 log_manager.DiscardStagedLog();
72 EXPECT_EQ(second_log, log_manager.current_log()); 75 EXPECT_EQ(second_log, log_manager.current_log());
73 EXPECT_FALSE(log_manager.has_staged_log()); 76 EXPECT_FALSE(log_manager.has_staged_log());
74 EXPECT_FALSE(log_manager.has_unsent_logs()); 77 EXPECT_FALSE(log_manager.has_unsent_logs());
75 78
76 EXPECT_FALSE(log_manager.has_unsent_logs()); 79 EXPECT_FALSE(log_manager.has_unsent_logs());
77 } 80 }
78 81
79 TEST(MetricsLogManagerTest, AbandonedLog) { 82 TEST(MetricsLogManagerTest, AbandonedLog) {
83 TestMetricsServiceClient client;
80 TestLogPrefService pref_service; 84 TestLogPrefService pref_service;
81 MetricsLogManager log_manager(&pref_service, 0); 85 MetricsLogManager log_manager(&pref_service, 0);
82 86
83 MetricsLogBase* dummy_log = 87 MetricsLog* dummy_log = new MetricsLog(
84 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); 88 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service);
85 log_manager.BeginLoggingWithLog(make_scoped_ptr(dummy_log)); 89 log_manager.BeginLoggingWithLog(make_scoped_ptr(dummy_log));
86 EXPECT_EQ(dummy_log, log_manager.current_log()); 90 EXPECT_EQ(dummy_log, log_manager.current_log());
87 91
88 log_manager.DiscardCurrentLog(); 92 log_manager.DiscardCurrentLog();
89 EXPECT_EQ(NULL, log_manager.current_log()); 93 EXPECT_EQ(NULL, log_manager.current_log());
90 EXPECT_FALSE(log_manager.has_staged_log()); 94 EXPECT_FALSE(log_manager.has_staged_log());
91 } 95 }
92 96
93 TEST(MetricsLogManagerTest, InterjectedLog) { 97 TEST(MetricsLogManagerTest, InterjectedLog) {
98 TestMetricsServiceClient client;
94 TestLogPrefService pref_service; 99 TestLogPrefService pref_service;
95 MetricsLogManager log_manager(&pref_service, 0); 100 MetricsLogManager log_manager(&pref_service, 0);
96 101
97 MetricsLogBase* ongoing_log = 102 MetricsLog* ongoing_log =
98 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"); 103 new MetricsLog("id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service);
99 MetricsLogBase* temp_log = 104 MetricsLog* temp_log = new MetricsLog(
100 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); 105 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service);
101 106
102 log_manager.BeginLoggingWithLog(make_scoped_ptr(ongoing_log)); 107 log_manager.BeginLoggingWithLog(make_scoped_ptr(ongoing_log));
103 EXPECT_EQ(ongoing_log, log_manager.current_log()); 108 EXPECT_EQ(ongoing_log, log_manager.current_log());
104 109
105 log_manager.PauseCurrentLog(); 110 log_manager.PauseCurrentLog();
106 EXPECT_EQ(NULL, log_manager.current_log()); 111 EXPECT_EQ(NULL, log_manager.current_log());
107 112
108 log_manager.BeginLoggingWithLog(make_scoped_ptr(temp_log)); 113 log_manager.BeginLoggingWithLog(make_scoped_ptr(temp_log));
109 EXPECT_EQ(temp_log, log_manager.current_log()); 114 EXPECT_EQ(temp_log, log_manager.current_log());
110 log_manager.FinishCurrentLog(); 115 log_manager.FinishCurrentLog();
111 EXPECT_EQ(NULL, log_manager.current_log()); 116 EXPECT_EQ(NULL, log_manager.current_log());
112 117
113 log_manager.ResumePausedLog(); 118 log_manager.ResumePausedLog();
114 EXPECT_EQ(ongoing_log, log_manager.current_log()); 119 EXPECT_EQ(ongoing_log, log_manager.current_log());
115 120
116 EXPECT_FALSE(log_manager.has_staged_log()); 121 EXPECT_FALSE(log_manager.has_staged_log());
117 log_manager.StageNextLogForUpload(); 122 log_manager.StageNextLogForUpload();
118 log_manager.DiscardStagedLog(); 123 log_manager.DiscardStagedLog();
119 EXPECT_FALSE(log_manager.has_unsent_logs()); 124 EXPECT_FALSE(log_manager.has_unsent_logs());
120 } 125 }
121 126
122 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) { 127 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) {
128 TestMetricsServiceClient client;
123 TestLogPrefService pref_service; 129 TestLogPrefService pref_service;
124 MetricsLogManager log_manager(&pref_service, 0); 130 MetricsLogManager log_manager(&pref_service, 0);
125 log_manager.LoadPersistedUnsentLogs(); 131 log_manager.LoadPersistedUnsentLogs();
126 132
127 log_manager.BeginLoggingWithLog(make_scoped_ptr( 133 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
128 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); 134 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
129 log_manager.PauseCurrentLog(); 135 log_manager.PauseCurrentLog();
130 log_manager.BeginLoggingWithLog(make_scoped_ptr( 136 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
131 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); 137 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
132 log_manager.FinishCurrentLog(); 138 log_manager.FinishCurrentLog();
133 log_manager.ResumePausedLog(); 139 log_manager.ResumePausedLog();
134 log_manager.StageNextLogForUpload(); 140 log_manager.StageNextLogForUpload();
135 log_manager.DiscardStagedLog(); 141 log_manager.DiscardStagedLog();
136 142
137 // Verify that the remaining log (which is the original ongoing log) still 143 // Verify that the remaining log (which is the original ongoing log) still
138 // has the right type. 144 // has the right type.
139 log_manager.FinishCurrentLog(); 145 log_manager.FinishCurrentLog();
140 log_manager.PersistUnsentLogs(); 146 log_manager.PersistUnsentLogs();
141 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG)); 147 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
142 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 148 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
143 } 149 }
144 150
145 TEST(MetricsLogManagerTest, StoreAndLoad) { 151 TEST(MetricsLogManagerTest, StoreAndLoad) {
152 TestMetricsServiceClient client;
146 TestLogPrefService pref_service; 153 TestLogPrefService pref_service;
147 // Set up some in-progress logging in a scoped log manager simulating the 154 // Set up some in-progress logging in a scoped log manager simulating the
148 // leadup to quitting, then persist as would be done on quit. 155 // leadup to quitting, then persist as would be done on quit.
149 { 156 {
150 MetricsLogManager log_manager(&pref_service, 0); 157 MetricsLogManager log_manager(&pref_service, 0);
151 log_manager.LoadPersistedUnsentLogs(); 158 log_manager.LoadPersistedUnsentLogs();
152 159
153 // Simulate a log having already been unsent from a previous session. 160 // Simulate a log having already been unsent from a previous session.
154 { 161 {
155 std::string log("proto"); 162 std::string log("proto");
156 metrics::PersistedLogs ongoing_logs( 163 metrics::PersistedLogs ongoing_logs(
157 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0); 164 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0);
158 ongoing_logs.StoreLog(&log); 165 ongoing_logs.StoreLog(&log);
159 ongoing_logs.SerializeLogs(); 166 ongoing_logs.SerializeLogs();
160 } 167 }
161 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 168 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
162 EXPECT_FALSE(log_manager.has_unsent_logs()); 169 EXPECT_FALSE(log_manager.has_unsent_logs());
163 log_manager.LoadPersistedUnsentLogs(); 170 log_manager.LoadPersistedUnsentLogs();
164 EXPECT_TRUE(log_manager.has_unsent_logs()); 171 EXPECT_TRUE(log_manager.has_unsent_logs());
165 172
166 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( 173 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
167 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); 174 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
168 log_manager.FinishCurrentLog(); 175 log_manager.FinishCurrentLog();
169 log_manager.BeginLoggingWithLog(make_scoped_ptr( 176 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
170 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); 177 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
171 log_manager.StageNextLogForUpload(); 178 log_manager.StageNextLogForUpload();
172 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 179 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE);
173 log_manager.FinishCurrentLog(); 180 log_manager.FinishCurrentLog();
174 181
175 // Nothing should be written out until PersistUnsentLogs is called. 182 // Nothing should be written out until PersistUnsentLogs is called.
176 EXPECT_EQ(0U, pref_service.TypeCount( 183 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
177 MetricsLogBase::INITIAL_STABILITY_LOG)); 184 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
178 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
179 log_manager.PersistUnsentLogs(); 185 log_manager.PersistUnsentLogs();
180 EXPECT_EQ(1U, pref_service.TypeCount( 186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
181 MetricsLogBase::INITIAL_STABILITY_LOG)); 187 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
182 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
183 } 188 }
184 189
185 // Now simulate the relaunch, ensure that the log manager restores 190 // Now simulate the relaunch, ensure that the log manager restores
186 // everything correctly, and verify that once the are handled they are not 191 // everything correctly, and verify that once the are handled they are not
187 // re-persisted. 192 // re-persisted.
188 { 193 {
189 MetricsLogManager log_manager(&pref_service, 0); 194 MetricsLogManager log_manager(&pref_service, 0);
190 log_manager.LoadPersistedUnsentLogs(); 195 log_manager.LoadPersistedUnsentLogs();
191 EXPECT_TRUE(log_manager.has_unsent_logs()); 196 EXPECT_TRUE(log_manager.has_unsent_logs());
192 197
193 log_manager.StageNextLogForUpload(); 198 log_manager.StageNextLogForUpload();
194 log_manager.DiscardStagedLog(); 199 log_manager.DiscardStagedLog();
195 // The initial log should be sent first; update the persisted storage to 200 // The initial log should be sent first; update the persisted storage to
196 // verify. 201 // verify.
197 log_manager.PersistUnsentLogs(); 202 log_manager.PersistUnsentLogs();
198 EXPECT_EQ(0U, pref_service.TypeCount( 203 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
199 MetricsLogBase::INITIAL_STABILITY_LOG)); 204 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
200 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
201 205
202 // Handle the first ongoing log. 206 // Handle the first ongoing log.
203 log_manager.StageNextLogForUpload(); 207 log_manager.StageNextLogForUpload();
204 log_manager.DiscardStagedLog(); 208 log_manager.DiscardStagedLog();
205 EXPECT_TRUE(log_manager.has_unsent_logs()); 209 EXPECT_TRUE(log_manager.has_unsent_logs());
206 210
207 // Handle the last log. 211 // Handle the last log.
208 log_manager.StageNextLogForUpload(); 212 log_manager.StageNextLogForUpload();
209 log_manager.DiscardStagedLog(); 213 log_manager.DiscardStagedLog();
210 EXPECT_FALSE(log_manager.has_unsent_logs()); 214 EXPECT_FALSE(log_manager.has_unsent_logs());
211 215
212 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been 216 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been
213 // called again. 217 // called again.
214 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 218 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
215 // Persist, and make sure nothing is left. 219 // Persist, and make sure nothing is left.
216 log_manager.PersistUnsentLogs(); 220 log_manager.PersistUnsentLogs();
217 EXPECT_EQ(0U, pref_service.TypeCount( 221 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
218 MetricsLogBase::INITIAL_STABILITY_LOG)); 222 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
219 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
220 } 223 }
221 } 224 }
222 225
223 TEST(MetricsLogManagerTest, StoreStagedLogTypes) { 226 TEST(MetricsLogManagerTest, StoreStagedLogTypes) {
227 TestMetricsServiceClient client;
228
224 // Ensure that types are preserved when storing staged logs. 229 // Ensure that types are preserved when storing staged logs.
225 { 230 {
226 TestLogPrefService pref_service; 231 TestLogPrefService pref_service;
227 MetricsLogManager log_manager(&pref_service, 0); 232 MetricsLogManager log_manager(&pref_service, 0);
228 log_manager.LoadPersistedUnsentLogs(); 233 log_manager.LoadPersistedUnsentLogs();
229 234
230 log_manager.BeginLoggingWithLog(make_scoped_ptr( 235 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
231 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); 236 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
232 log_manager.FinishCurrentLog(); 237 log_manager.FinishCurrentLog();
233 log_manager.StageNextLogForUpload(); 238 log_manager.StageNextLogForUpload();
234 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 239 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE);
235 log_manager.PersistUnsentLogs(); 240 log_manager.PersistUnsentLogs();
236 241
237 EXPECT_EQ(0U, pref_service.TypeCount( 242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
238 MetricsLogBase::INITIAL_STABILITY_LOG)); 243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
239 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
240 } 244 }
241 245
242 { 246 {
243 TestLogPrefService pref_service; 247 TestLogPrefService pref_service;
244 MetricsLogManager log_manager(&pref_service, 0); 248 MetricsLogManager log_manager(&pref_service, 0);
245 log_manager.LoadPersistedUnsentLogs(); 249 log_manager.LoadPersistedUnsentLogs();
246 250
247 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( 251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
248 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); 252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
249 log_manager.FinishCurrentLog(); 253 log_manager.FinishCurrentLog();
250 log_manager.StageNextLogForUpload(); 254 log_manager.StageNextLogForUpload();
251 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 255 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE);
252 log_manager.PersistUnsentLogs(); 256 log_manager.PersistUnsentLogs();
253 257
254 EXPECT_EQ(1U, pref_service.TypeCount( 258 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
255 MetricsLogBase::INITIAL_STABILITY_LOG)); 259 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
256 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
257 } 260 }
258 } 261 }
259 262
260 TEST(MetricsLogManagerTest, LargeLogDiscarding) { 263 TEST(MetricsLogManagerTest, LargeLogDiscarding) {
264 TestMetricsServiceClient client;
261 TestLogPrefService pref_service; 265 TestLogPrefService pref_service;
262 // Set the size threshold very low, to verify that it's honored. 266 // Set the size threshold very low, to verify that it's honored.
263 MetricsLogManager log_manager(&pref_service, 1); 267 MetricsLogManager log_manager(&pref_service, 1);
264 log_manager.LoadPersistedUnsentLogs(); 268 log_manager.LoadPersistedUnsentLogs();
265 269
266 log_manager.BeginLoggingWithLog(make_scoped_ptr( 270 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
267 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); 271 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
268 log_manager.FinishCurrentLog(); 272 log_manager.FinishCurrentLog();
269 log_manager.BeginLoggingWithLog(make_scoped_ptr( 273 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
270 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); 274 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
271 log_manager.FinishCurrentLog(); 275 log_manager.FinishCurrentLog();
272 276
273 // Only the ongoing log should be written out, due to the threshold. 277 // Only the ongoing log should be written out, due to the threshold.
274 log_manager.PersistUnsentLogs(); 278 log_manager.PersistUnsentLogs();
275 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG)); 279 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
276 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 280 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
277 } 281 }
278 282
279 TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) { 283 TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) {
284 TestMetricsServiceClient client;
285
280 // Ensure that provisional store works, and discards the correct log. 286 // Ensure that provisional store works, and discards the correct log.
281 { 287 {
282 TestLogPrefService pref_service; 288 TestLogPrefService pref_service;
283 MetricsLogManager log_manager(&pref_service, 0); 289 MetricsLogManager log_manager(&pref_service, 0);
284 log_manager.LoadPersistedUnsentLogs(); 290 log_manager.LoadPersistedUnsentLogs();
285 291
286 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( 292 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
287 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); 293 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
288 log_manager.FinishCurrentLog(); 294 log_manager.FinishCurrentLog();
289 log_manager.BeginLoggingWithLog(make_scoped_ptr( 295 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
290 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); 296 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
291 log_manager.StageNextLogForUpload(); 297 log_manager.StageNextLogForUpload();
292 log_manager.StoreStagedLogAsUnsent( 298 log_manager.StoreStagedLogAsUnsent(
293 metrics::PersistedLogs::PROVISIONAL_STORE); 299 metrics::PersistedLogs::PROVISIONAL_STORE);
294 log_manager.FinishCurrentLog(); 300 log_manager.FinishCurrentLog();
295 log_manager.DiscardLastProvisionalStore(); 301 log_manager.DiscardLastProvisionalStore();
296 302
297 log_manager.PersistUnsentLogs(); 303 log_manager.PersistUnsentLogs();
298 EXPECT_EQ(0U, pref_service.TypeCount( 304 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
299 MetricsLogBase::INITIAL_STABILITY_LOG)); 305 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
300 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG));
301 } 306 }
302 } 307 }
303 308
304 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { 309 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) {
310 TestMetricsServiceClient client;
311
305 // Ensure that trying to drop a sent log is a no-op, even if another log has 312 // Ensure that trying to drop a sent log is a no-op, even if another log has
306 // since been staged. 313 // since been staged.
307 { 314 {
308 TestLogPrefService pref_service; 315 TestLogPrefService pref_service;
309 MetricsLogManager log_manager(&pref_service, 0); 316 MetricsLogManager log_manager(&pref_service, 0);
310 log_manager.LoadPersistedUnsentLogs(); 317 log_manager.LoadPersistedUnsentLogs();
311 318
312 log_manager.BeginLoggingWithLog(make_scoped_ptr( 319 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
313 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); 320 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
314 log_manager.FinishCurrentLog(); 321 log_manager.FinishCurrentLog();
315 log_manager.StageNextLogForUpload(); 322 log_manager.StageNextLogForUpload();
316 log_manager.StoreStagedLogAsUnsent( 323 log_manager.StoreStagedLogAsUnsent(
317 metrics::PersistedLogs::PROVISIONAL_STORE); 324 metrics::PersistedLogs::PROVISIONAL_STORE);
318 log_manager.StageNextLogForUpload(); 325 log_manager.StageNextLogForUpload();
319 log_manager.DiscardStagedLog(); 326 log_manager.DiscardStagedLog();
320 log_manager.BeginLoggingWithLog(make_scoped_ptr( 327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
321 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); 328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
322 log_manager.FinishCurrentLog(); 329 log_manager.FinishCurrentLog();
323 log_manager.StageNextLogForUpload(); 330 log_manager.StageNextLogForUpload();
324 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 331 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE);
325 log_manager.DiscardLastProvisionalStore(); 332 log_manager.DiscardLastProvisionalStore();
326 333
327 log_manager.PersistUnsentLogs(); 334 log_manager.PersistUnsentLogs();
328 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
329 } 336 }
330 337
331 // Ensure that trying to drop more than once is a no-op 338 // Ensure that trying to drop more than once is a no-op
332 { 339 {
333 TestLogPrefService pref_service; 340 TestLogPrefService pref_service;
334 MetricsLogManager log_manager(&pref_service, 0); 341 MetricsLogManager log_manager(&pref_service, 0);
335 log_manager.LoadPersistedUnsentLogs(); 342 log_manager.LoadPersistedUnsentLogs();
336 343
337 log_manager.BeginLoggingWithLog(make_scoped_ptr( 344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
338 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); 345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
339 log_manager.FinishCurrentLog(); 346 log_manager.FinishCurrentLog();
340 log_manager.StageNextLogForUpload(); 347 log_manager.StageNextLogForUpload();
341 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 348 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE);
342 log_manager.BeginLoggingWithLog(make_scoped_ptr( 349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
343 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); 350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
344 log_manager.FinishCurrentLog(); 351 log_manager.FinishCurrentLog();
345 log_manager.StageNextLogForUpload(); 352 log_manager.StageNextLogForUpload();
346 log_manager.StoreStagedLogAsUnsent( 353 log_manager.StoreStagedLogAsUnsent(
347 metrics::PersistedLogs::PROVISIONAL_STORE); 354 metrics::PersistedLogs::PROVISIONAL_STORE);
348 log_manager.DiscardLastProvisionalStore(); 355 log_manager.DiscardLastProvisionalStore();
349 log_manager.DiscardLastProvisionalStore(); 356 log_manager.DiscardLastProvisionalStore();
350 357
351 log_manager.PersistUnsentLogs(); 358 log_manager.PersistUnsentLogs();
352 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); 359 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
353 } 360 }
354 } 361 }
355 362
356 } // namespace metrics 363 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/metrics_log_manager.cc ('k') | components/metrics/metrics_log_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698