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

Unified Diff: chrome/common/metrics/metrics_log_manager_unittest.cc

Issue 239093004: Move part of metrics from chrome/common to components (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding TBR section for owners of minor changes. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/metrics/metrics_log_manager_unittest.cc
diff --git a/chrome/common/metrics/metrics_log_manager_unittest.cc b/chrome/common/metrics/metrics_log_manager_unittest.cc
deleted file mode 100644
index 899cc0b4ecaeaea8304e515c7f87a4b66ef047bc..0000000000000000000000000000000000000000
--- a/chrome/common/metrics/metrics_log_manager_unittest.cc
+++ /dev/null
@@ -1,423 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/common/metrics/metrics_log_manager.h"
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/sha1.h"
-#include "chrome/common/metrics/metrics_log_base.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-// Dummy serializer that just stores logs in memory.
-class DummyLogSerializer : public MetricsLogManager::LogSerializer {
- public:
- virtual void SerializeLogs(
- const std::vector<MetricsLogManager::SerializedLog>& logs,
- MetricsLogManager::LogType log_type) OVERRIDE {
- persisted_logs_[log_type] = logs;
- }
-
- virtual void DeserializeLogs(
- MetricsLogManager::LogType log_type,
- std::vector<MetricsLogManager::SerializedLog>* logs) OVERRIDE {
- ASSERT_NE(static_cast<void*>(NULL), logs);
- *logs = persisted_logs_[log_type];
- }
-
- // Returns the number of logs of the given type.
- size_t TypeCount(MetricsLogManager::LogType log_type) {
- return persisted_logs_[log_type].size();
- }
-
- // In-memory "persitent storage".
- std::vector<MetricsLogManager::SerializedLog> persisted_logs_[2];
-};
-
-} // namespace
-
-TEST(MetricsLogManagerTest, StandardFlow) {
- MetricsLogManager log_manager;
-
- // Make sure a new manager has a clean slate.
- EXPECT_EQ(NULL, log_manager.current_log());
- EXPECT_FALSE(log_manager.has_staged_log());
- EXPECT_FALSE(log_manager.has_unsent_logs());
-
- // Check that the normal flow works.
- MetricsLogBase* initial_log =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- log_manager.BeginLoggingWithLog(initial_log);
- EXPECT_EQ(initial_log, log_manager.current_log());
- EXPECT_FALSE(log_manager.has_staged_log());
-
- log_manager.FinishCurrentLog();
- EXPECT_EQ(NULL, log_manager.current_log());
- EXPECT_TRUE(log_manager.has_unsent_logs());
- EXPECT_FALSE(log_manager.has_staged_log());
-
- MetricsLogBase* second_log =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- log_manager.BeginLoggingWithLog(second_log);
- EXPECT_EQ(second_log, log_manager.current_log());
-
- log_manager.StageNextLogForUpload();
- EXPECT_TRUE(log_manager.has_staged_log());
- EXPECT_FALSE(log_manager.staged_log_text().empty());
-
- log_manager.DiscardStagedLog();
- EXPECT_EQ(second_log, log_manager.current_log());
- EXPECT_FALSE(log_manager.has_staged_log());
- EXPECT_FALSE(log_manager.has_unsent_logs());
- EXPECT_TRUE(log_manager.staged_log_text().empty());
-
- EXPECT_FALSE(log_manager.has_unsent_logs());
-}
-
-TEST(MetricsLogManagerTest, AbandonedLog) {
- MetricsLogManager log_manager;
-
- MetricsLogBase* dummy_log =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- log_manager.BeginLoggingWithLog(dummy_log);
- EXPECT_EQ(dummy_log, log_manager.current_log());
-
- log_manager.DiscardCurrentLog();
- EXPECT_EQ(NULL, log_manager.current_log());
- EXPECT_FALSE(log_manager.has_staged_log());
-}
-
-TEST(MetricsLogManagerTest, InterjectedLog) {
- MetricsLogManager log_manager;
-
- MetricsLogBase* ongoing_log =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v");
- MetricsLogBase* temp_log =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
-
- log_manager.BeginLoggingWithLog(ongoing_log);
- EXPECT_EQ(ongoing_log, log_manager.current_log());
-
- log_manager.PauseCurrentLog();
- EXPECT_EQ(NULL, log_manager.current_log());
-
- log_manager.BeginLoggingWithLog(temp_log);
- EXPECT_EQ(temp_log, log_manager.current_log());
- log_manager.FinishCurrentLog();
- EXPECT_EQ(NULL, log_manager.current_log());
-
- log_manager.ResumePausedLog();
- EXPECT_EQ(ongoing_log, log_manager.current_log());
-
- EXPECT_FALSE(log_manager.has_staged_log());
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
- EXPECT_FALSE(log_manager.has_unsent_logs());
-}
-
-TEST(MetricsLogManagerTest, InterjectedLogPreservesType) {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* ongoing_log =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v");
- MetricsLogBase* temp_log =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
-
- log_manager.BeginLoggingWithLog(ongoing_log);
- log_manager.PauseCurrentLog();
- log_manager.BeginLoggingWithLog(temp_log);
- log_manager.FinishCurrentLog();
- log_manager.ResumePausedLog();
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
-
- // Verify that the remaining log (which is the original ongoing log) still
- // has the right type.
- log_manager.FinishCurrentLog();
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
-}
-
-TEST(MetricsLogManagerTest, StoreAndLoad) {
- std::vector<MetricsLogManager::SerializedLog> initial_logs;
- std::vector<MetricsLogManager::SerializedLog> ongoing_logs;
-
- // Set up some in-progress logging in a scoped log manager simulating the
- // leadup to quitting, then persist as would be done on quit.
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- // Simulate a log having already been unsent from a previous session.
- MetricsLogManager::SerializedLog log;
- std::string text = "proto";
- log.SwapLogText(&text);
- serializer->persisted_logs_[MetricsLogBase::ONGOING_LOG].push_back(log);
- EXPECT_FALSE(log_manager.has_unsent_logs());
- log_manager.LoadPersistedUnsentLogs();
- EXPECT_TRUE(log_manager.has_unsent_logs());
-
- MetricsLogBase* log1 =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- MetricsLogBase* log2 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v");
- log_manager.BeginLoggingWithLog(log1);
- log_manager.FinishCurrentLog();
- log_manager.BeginLoggingWithLog(log2);
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE);
- log_manager.FinishCurrentLog();
-
- // Nothing should be written out until PersistUnsentLogs is called.
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(2U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
-
- // Save the logs to transfer over to a new serializer (since log_manager
- // owns |serializer|, so it's about to go away.
- initial_logs =
- serializer->persisted_logs_[MetricsLogBase::INITIAL_STABILITY_LOG];
- ongoing_logs = serializer->persisted_logs_[MetricsLogBase::ONGOING_LOG];
- }
-
- // Now simulate the relaunch, ensure that the log manager restores
- // everything correctly, and verify that once the are handled they are not
- // re-persisted.
- {
- MetricsLogManager log_manager;
-
- DummyLogSerializer* serializer = new DummyLogSerializer;
- serializer->persisted_logs_[MetricsLogBase::INITIAL_STABILITY_LOG] =
- initial_logs;
- serializer->persisted_logs_[MetricsLogBase::ONGOING_LOG] = ongoing_logs;
-
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
- EXPECT_TRUE(log_manager.has_unsent_logs());
-
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
- // The initial log should be sent first; update the persisted storage to
- // verify.
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(2U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
-
- // Handle the first ongoing log.
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
- EXPECT_TRUE(log_manager.has_unsent_logs());
-
- // Handle the last log.
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
- EXPECT_FALSE(log_manager.has_unsent_logs());
-
- // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been
- // called again.
- EXPECT_EQ(2U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- // Persist, and make sure nothing is left.
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-}
-
-TEST(MetricsLogManagerTest, StoreStagedLogTypes) {
- // Ensure that types are preserved when storing staged logs.
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* log =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- log_manager.BeginLoggingWithLog(log);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE);
- log_manager.PersistUnsentLogs();
-
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* log =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- log_manager.BeginLoggingWithLog(log);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE);
- log_manager.PersistUnsentLogs();
-
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-}
-
-TEST(MetricsLogManagerTest, LargeLogDiscarding) {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- // Set the size threshold very low, to verify that it's honored.
- log_manager.set_max_ongoing_log_store_size(1);
-
- MetricsLogBase* log1 =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- MetricsLogBase* log2 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v");
- log_manager.BeginLoggingWithLog(log1);
- log_manager.FinishCurrentLog();
- log_manager.BeginLoggingWithLog(log2);
- log_manager.FinishCurrentLog();
-
- // Only the ongoing log should be written out, due to the threshold.
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
-}
-
-TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) {
- // Ensure that provisional store works, and discards the correct log.
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* log1 =
- new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v");
- MetricsLogBase* log2 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v");
- log_manager.BeginLoggingWithLog(log1);
- log_manager.FinishCurrentLog();
- log_manager.BeginLoggingWithLog(log2);
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE);
- log_manager.FinishCurrentLog();
- log_manager.DiscardLastProvisionalStore();
-
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(0U, serializer->TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG));
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-}
-
-TEST(MetricsLogManagerTest, ProvisionalStoreNoop) {
- // Ensure that trying to drop a sent log is a no-op, even if another log has
- // since been staged.
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* log1 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- MetricsLogBase* log2 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- log_manager.BeginLoggingWithLog(log1);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE);
- log_manager.StageNextLogForUpload();
- log_manager.DiscardStagedLog();
- log_manager.BeginLoggingWithLog(log2);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE);
- log_manager.DiscardLastProvisionalStore();
-
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-
- // Ensure that trying to drop more than once is a no-op
- {
- MetricsLogManager log_manager;
- DummyLogSerializer* serializer = new DummyLogSerializer;
- log_manager.set_log_serializer(serializer);
- log_manager.LoadPersistedUnsentLogs();
-
- MetricsLogBase* log1 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- MetricsLogBase* log2 =
- new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version");
- log_manager.BeginLoggingWithLog(log1);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE);
- log_manager.BeginLoggingWithLog(log2);
- log_manager.FinishCurrentLog();
- log_manager.StageNextLogForUpload();
- log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE);
- log_manager.DiscardLastProvisionalStore();
- log_manager.DiscardLastProvisionalStore();
-
- log_manager.PersistUnsentLogs();
- EXPECT_EQ(1U, serializer->TypeCount(MetricsLogBase::ONGOING_LOG));
- }
-}
-
-TEST(MetricsLogManagerTest, SerializedLog) {
- const char kFooText[] = "foo";
- const std::string foo_hash = base::SHA1HashString(kFooText);
- const char kBarText[] = "bar";
- const std::string bar_hash = base::SHA1HashString(kBarText);
-
- MetricsLogManager::SerializedLog log;
- EXPECT_TRUE(log.log_text().empty());
- EXPECT_TRUE(log.log_hash().empty());
-
- std::string foo = kFooText;
- log.SwapLogText(&foo);
- EXPECT_TRUE(foo.empty());
- EXPECT_FALSE(log.IsEmpty());
- EXPECT_EQ(kFooText, log.log_text());
- EXPECT_EQ(foo_hash, log.log_hash());
-
- std::string bar = kBarText;
- log.SwapLogText(&bar);
- EXPECT_EQ(kFooText, bar);
- EXPECT_FALSE(log.IsEmpty());
- EXPECT_EQ(kBarText, log.log_text());
- EXPECT_EQ(bar_hash, log.log_hash());
-
- log.Clear();
- EXPECT_TRUE(log.IsEmpty());
- EXPECT_TRUE(log.log_text().empty());
- EXPECT_TRUE(log.log_hash().empty());
-
- MetricsLogManager::SerializedLog log2;
- foo = kFooText;
- log2.SwapLogText(&foo);
- log.Swap(&log2);
- EXPECT_FALSE(log.IsEmpty());
- EXPECT_EQ(kFooText, log.log_text());
- EXPECT_EQ(foo_hash, log.log_hash());
- EXPECT_TRUE(log2.IsEmpty());
- EXPECT_TRUE(log2.log_text().empty());
- EXPECT_TRUE(log2.log_hash().empty());
-}

Powered by Google App Engine
This is Rietveld 408576698