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

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

Issue 290103005: Remove the provisional store and just store the staged log when writing to (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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/persisted_logs.cc ('k') | no next file » | 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/persisted_logs.h" 5 #include "components/metrics/persisted_logs.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/prefs/pref_registry_simple.h" 8 #include "base/prefs/pref_registry_simple.h"
9 #include "base/prefs/scoped_user_pref_update.h" 9 #include "base/prefs/scoped_user_pref_update.h"
10 #include "base/prefs/testing_pref_service.h" 10 #include "base/prefs/testing_pref_service.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 233
234 EXPECT_FALSE(persisted_logs.has_staged_log()); 234 EXPECT_FALSE(persisted_logs.has_staged_log());
235 persisted_logs.StoreLog("one"); 235 persisted_logs.StoreLog("one");
236 EXPECT_FALSE(persisted_logs.has_staged_log()); 236 EXPECT_FALSE(persisted_logs.has_staged_log());
237 persisted_logs.StoreLog("two"); 237 persisted_logs.StoreLog("two");
238 persisted_logs.StageLog(); 238 persisted_logs.StageLog();
239 EXPECT_TRUE(persisted_logs.has_staged_log()); 239 EXPECT_TRUE(persisted_logs.has_staged_log());
240 EXPECT_EQ(persisted_logs.staged_log(), Compress("two")); 240 EXPECT_EQ(persisted_logs.staged_log(), Compress("two"));
241 persisted_logs.StoreLog("three"); 241 persisted_logs.StoreLog("three");
242 EXPECT_EQ(persisted_logs.staged_log(), Compress("two")); 242 EXPECT_EQ(persisted_logs.staged_log(), Compress("two"));
243 EXPECT_EQ(persisted_logs.size(), 2U); 243 EXPECT_EQ(persisted_logs.size(), 3U);
244 persisted_logs.DiscardStagedLog(); 244 persisted_logs.DiscardStagedLog();
245 EXPECT_FALSE(persisted_logs.has_staged_log()); 245 EXPECT_FALSE(persisted_logs.has_staged_log());
246 EXPECT_EQ(persisted_logs.size(), 2U); 246 EXPECT_EQ(persisted_logs.size(), 2U);
247 persisted_logs.StageLog(); 247 persisted_logs.StageLog();
248 EXPECT_EQ(persisted_logs.staged_log(), Compress("three")); 248 EXPECT_EQ(persisted_logs.staged_log(), Compress("three"));
249 persisted_logs.DiscardStagedLog(); 249 persisted_logs.DiscardStagedLog();
250 persisted_logs.StageLog(); 250 persisted_logs.StageLog();
251 EXPECT_EQ(persisted_logs.staged_log(), Compress("one")); 251 EXPECT_EQ(persisted_logs.staged_log(), Compress("one"));
252 persisted_logs.DiscardStagedLog(); 252 persisted_logs.DiscardStagedLog();
253 EXPECT_FALSE(persisted_logs.has_staged_log()); 253 EXPECT_FALSE(persisted_logs.has_staged_log());
254 EXPECT_EQ(persisted_logs.size(), 0U); 254 EXPECT_EQ(persisted_logs.size(), 0U);
255 } 255 }
256 256
257 TEST_F(PersistedLogsTest, ProvisionalStoreStandardFlow) { 257 TEST_F(PersistedLogsTest, DiscardOrder) {
258 // Ensure that provisional store works, and discards the correct log. 258 // Ensure that the correct log is discarded if new logs are pushed while
259 // a log is staged.
259 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit); 260 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit);
260 261
261 persisted_logs.StoreLog("one"); 262 persisted_logs.StoreLog("one");
262 persisted_logs.StageLog(); 263 persisted_logs.StageLog();
263 persisted_logs.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
264 persisted_logs.StoreLog("two"); 264 persisted_logs.StoreLog("two");
265 persisted_logs.DiscardLastProvisionalStore(); 265 persisted_logs.DiscardStagedLog();
266 persisted_logs.SerializeLogs(); 266 persisted_logs.SerializeLogs();
267 267
268 TestPersistedLogs result_persisted_logs(&prefs_, kLogByteLimit); 268 TestPersistedLogs result_persisted_logs(&prefs_, kLogByteLimit);
269 EXPECT_EQ(PersistedLogs::RECALL_SUCCESS,
270 result_persisted_logs.DeserializeLogs());
271 EXPECT_EQ(1U, result_persisted_logs.size());
272 result_persisted_logs.ExpectNextLog("two");
273 }
274
275 TEST_F(PersistedLogsTest, ProvisionalStoreNoop1) {
276 // Ensure that trying to drop a sent log is a no-op, even if another log has
277 // since been staged.
278 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit);
279 persisted_logs.DeserializeLogs();
280 persisted_logs.StoreLog("one");
281 persisted_logs.StageLog();
282 persisted_logs.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
283 persisted_logs.StageLog();
284 persisted_logs.DiscardStagedLog();
285 persisted_logs.StoreLog("two");
286 persisted_logs.StageLog();
287 persisted_logs.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
288 persisted_logs.DiscardLastProvisionalStore();
289 persisted_logs.SerializeLogs();
290
291 TestPersistedLogs result_persisted_logs(&prefs_, kLogByteLimit);
292 EXPECT_EQ(PersistedLogs::RECALL_SUCCESS, 269 EXPECT_EQ(PersistedLogs::RECALL_SUCCESS,
293 result_persisted_logs.DeserializeLogs()); 270 result_persisted_logs.DeserializeLogs());
294 EXPECT_EQ(1U, result_persisted_logs.size()); 271 EXPECT_EQ(1U, result_persisted_logs.size());
295 result_persisted_logs.ExpectNextLog("two"); 272 result_persisted_logs.ExpectNextLog("two");
296 } 273 }
297 274
298 TEST_F(PersistedLogsTest, ProvisionalStoreNoop2) {
299 // Ensure that trying to drop more than once is a no-op
300 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit);
301 persisted_logs.DeserializeLogs();
302 persisted_logs.StoreLog("one");
303 persisted_logs.StageLog();
304 persisted_logs.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
305 persisted_logs.StoreLog("two");
306 persisted_logs.StageLog();
307 persisted_logs.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
308 persisted_logs.DiscardLastProvisionalStore();
309 persisted_logs.DiscardLastProvisionalStore();
310 persisted_logs.SerializeLogs();
311 275
312 TestPersistedLogs result_persisted_logs(&prefs_, kLogByteLimit); 276 TEST_F(PersistedLogsTest, Hashes) {
313 EXPECT_EQ(PersistedLogs::RECALL_SUCCESS,
314 result_persisted_logs.DeserializeLogs());
315 EXPECT_EQ(1U, result_persisted_logs.size());
316 result_persisted_logs.ExpectNextLog("one");
317 }
318
319 TEST_F(PersistedLogsTest, Encoding) {
320 const char kFooText[] = "foo"; 277 const char kFooText[] = "foo";
321 const std::string foo_hash = base::SHA1HashString(kFooText); 278 const std::string foo_hash = base::SHA1HashString(kFooText);
322 279
323 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit); 280 TestPersistedLogs persisted_logs(&prefs_, kLogByteLimit);
324 persisted_logs.StoreLog(kFooText); 281 persisted_logs.StoreLog(kFooText);
325 persisted_logs.StageLog(); 282 persisted_logs.StageLog();
326 283
327 EXPECT_EQ(Compress(kFooText), persisted_logs.staged_log()); 284 EXPECT_EQ(Compress(kFooText), persisted_logs.staged_log());
328 EXPECT_EQ(foo_hash, persisted_logs.staged_log_hash()); 285 EXPECT_EQ(foo_hash, persisted_logs.staged_log_hash());
329 } 286 }
330 287
331 } // namespace metrics 288 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/persisted_logs.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698