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

Side by Side Diff: chrome/common/metrics/metrics_log_manager_unittest.cc

Issue 26646003: MetricsService: Send a hash of the UMA log in a header. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 2 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 | « chrome/common/metrics/metrics_log_manager.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/common/metrics/metrics_log_manager.h"
6
5 #include <string> 7 #include <string>
6 #include <utility> 8 #include <utility>
7 #include <vector> 9 #include <vector>
8 10
11 #include "base/sha1.h"
9 #include "chrome/common/metrics/metrics_log_base.h" 12 #include "chrome/common/metrics/metrics_log_base.h"
10 #include "chrome/common/metrics/metrics_log_manager.h"
11 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
12 14
13 namespace { 15 namespace {
14 16
15 class MetricsLogManagerTest : public testing::Test {
16 };
17
18 // Dummy serializer that just stores logs in memory. 17 // Dummy serializer that just stores logs in memory.
19 class DummyLogSerializer : public MetricsLogManager::LogSerializer { 18 class DummyLogSerializer : public MetricsLogManager::LogSerializer {
20 public: 19 public:
21 virtual void SerializeLogs(const std::vector<std::string>& logs, 20 virtual void SerializeLogs(
22 MetricsLogManager::LogType log_type) OVERRIDE { 21 const std::vector<MetricsLogManager::SerializedLog>& logs,
22 MetricsLogManager::LogType log_type) OVERRIDE {
23 persisted_logs_[log_type] = logs; 23 persisted_logs_[log_type] = logs;
24 } 24 }
25 25
26 virtual void DeserializeLogs(MetricsLogManager::LogType log_type, 26 virtual void DeserializeLogs(
27 std::vector<std::string>* logs) OVERRIDE { 27 MetricsLogManager::LogType log_type,
28 std::vector<MetricsLogManager::SerializedLog>* logs) OVERRIDE {
28 ASSERT_NE(static_cast<void*>(NULL), logs); 29 ASSERT_NE(static_cast<void*>(NULL), logs);
29 *logs = persisted_logs_[log_type]; 30 *logs = persisted_logs_[log_type];
30 } 31 }
31 32
32 // Returns the number of logs of the given type. 33 // Returns the number of logs of the given type.
33 size_t TypeCount(MetricsLogManager::LogType log_type) { 34 size_t TypeCount(MetricsLogManager::LogType log_type) {
34 return persisted_logs_[log_type].size(); 35 return persisted_logs_[log_type].size();
35 } 36 }
36 37
37 // In-memory "persitent storage". 38 // In-memory "persitent storage".
38 std::vector<std::string> persisted_logs_[2]; 39 std::vector<MetricsLogManager::SerializedLog> persisted_logs_[2];
39 }; 40 };
40 41
41 } // namespace 42 } // namespace
42 43
43 TEST(MetricsLogManagerTest, StandardFlow) { 44 TEST(MetricsLogManagerTest, StandardFlow) {
44 MetricsLogManager log_manager; 45 MetricsLogManager log_manager;
45 46
46 // Make sure a new manager has a clean slate. 47 // Make sure a new manager has a clean slate.
47 EXPECT_EQ(NULL, log_manager.current_log()); 48 EXPECT_EQ(NULL, log_manager.current_log());
48 EXPECT_FALSE(log_manager.has_staged_log()); 49 EXPECT_FALSE(log_manager.has_staged_log());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // has the right type. 133 // has the right type.
133 DummyLogSerializer* serializer = new DummyLogSerializer; 134 DummyLogSerializer* serializer = new DummyLogSerializer;
134 log_manager.set_log_serializer(serializer); 135 log_manager.set_log_serializer(serializer);
135 log_manager.FinishCurrentLog(); 136 log_manager.FinishCurrentLog();
136 log_manager.PersistUnsentLogs(); 137 log_manager.PersistUnsentLogs();
137 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 138 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
138 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 139 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
139 } 140 }
140 141
141 TEST(MetricsLogManagerTest, StoreAndLoad) { 142 TEST(MetricsLogManagerTest, StoreAndLoad) {
142 std::vector<std::string> initial_logs; 143 std::vector<MetricsLogManager::SerializedLog> initial_logs;
143 std::vector<std::string> ongoing_logs; 144 std::vector<MetricsLogManager::SerializedLog> ongoing_logs;
144 145
145 // Set up some in-progress logging in a scoped log manager simulating the 146 // Set up some in-progress logging in a scoped log manager simulating the
146 // leadup to quitting, then persist as would be done on quit. 147 // leadup to quitting, then persist as would be done on quit.
147 { 148 {
148 MetricsLogManager log_manager; 149 MetricsLogManager log_manager;
149 DummyLogSerializer* serializer = new DummyLogSerializer; 150 DummyLogSerializer* serializer = new DummyLogSerializer;
150 log_manager.set_log_serializer(serializer); 151 log_manager.set_log_serializer(serializer);
151 // Simulate a log having already been unsent from a previous session. 152 // Simulate a log having already been unsent from a previous session.
152 std::string log = "proto"; 153 MetricsLogManager::SerializedLog log;
154 std::string text = "proto";
155 log.SwapLogText(&text);
153 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back(log); 156 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back(log);
154 EXPECT_FALSE(log_manager.has_unsent_logs()); 157 EXPECT_FALSE(log_manager.has_unsent_logs());
155 log_manager.LoadPersistedUnsentLogs(); 158 log_manager.LoadPersistedUnsentLogs();
156 EXPECT_TRUE(log_manager.has_unsent_logs()); 159 EXPECT_TRUE(log_manager.has_unsent_logs());
157 160
158 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); 161 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version");
159 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); 162 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version");
160 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::INITIAL_LOG); 163 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::INITIAL_LOG);
161 log_manager.FinishCurrentLog(); 164 log_manager.FinishCurrentLog();
162 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG); 165 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE); 339 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE);
337 log_manager.DiscardLastProvisionalStore(); 340 log_manager.DiscardLastProvisionalStore();
338 log_manager.DiscardLastProvisionalStore(); 341 log_manager.DiscardLastProvisionalStore();
339 342
340 DummyLogSerializer* serializer = new DummyLogSerializer; 343 DummyLogSerializer* serializer = new DummyLogSerializer;
341 log_manager.set_log_serializer(serializer); 344 log_manager.set_log_serializer(serializer);
342 log_manager.PersistUnsentLogs(); 345 log_manager.PersistUnsentLogs();
343 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 346 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
344 } 347 }
345 } 348 }
349
350 TEST(MetricsLogManagerTest, SerializedLog) {
351 const char kFooText[] = "foo";
352 const std::string foo_hash = base::SHA1HashString(kFooText);
353 const char kBarText[] = "bar";
354 const std::string bar_hash = base::SHA1HashString(kBarText);
355
356 MetricsLogManager::SerializedLog log;
357 EXPECT_TRUE(log.log_text().empty());
358 EXPECT_TRUE(log.log_hash().empty());
359
360 std::string foo = kFooText;
361 log.SwapLogText(&foo);
362 EXPECT_TRUE(foo.empty());
363 EXPECT_FALSE(log.IsEmpty());
364 EXPECT_EQ(kFooText, log.log_text());
365 EXPECT_EQ(foo_hash, log.log_hash());
366
367 std::string bar = kBarText;
368 log.SwapLogText(&bar);
369 EXPECT_EQ(kFooText, bar);
370 EXPECT_FALSE(log.IsEmpty());
371 EXPECT_EQ(kBarText, log.log_text());
372 EXPECT_EQ(bar_hash, log.log_hash());
373
374 log.Clear();
375 EXPECT_TRUE(log.IsEmpty());
376 EXPECT_TRUE(log.log_text().empty());
377 EXPECT_TRUE(log.log_hash().empty());
378
379 MetricsLogManager::SerializedLog log2;
380 foo = kFooText;
381 log2.SwapLogText(&foo);
382 log.Swap(&log2);
383 EXPECT_FALSE(log.IsEmpty());
384 EXPECT_EQ(kFooText, log.log_text());
385 EXPECT_EQ(foo_hash, log.log_hash());
386 EXPECT_TRUE(log2.IsEmpty());
387 EXPECT_TRUE(log2.log_text().empty());
388 EXPECT_TRUE(log2.log_hash().empty());
389 }
OLDNEW
« no previous file with comments | « chrome/common/metrics/metrics_log_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698