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

Unified Diff: chrome/browser/metrics/metrics_log_serializer_unittest.cc

Issue 9562007: Add a minimum byte count to metrics log serialization (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use the byte count as a minimum Created 8 years, 7 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/browser/metrics/metrics_log_serializer_unittest.cc
diff --git a/chrome/browser/metrics/metrics_log_serializer_unittest.cc b/chrome/browser/metrics/metrics_log_serializer_unittest.cc
index f023a7cb2ef0b119f2f49a6dbbe8197d75a6bc44..41efdcdfb6b0eb9c635cc06dd9ee65a94b9c4f9b 100644
--- a/chrome/browser/metrics/metrics_log_serializer_unittest.cc
+++ b/chrome/browser/metrics/metrics_log_serializer_unittest.cc
@@ -13,6 +13,7 @@ typedef MetricsLogManager::SerializedLog SerializedLog;
namespace {
const size_t kMaxLocalListSize = 3;
+const size_t kMinLogByteTotal = 1000;
} // namespace
@@ -25,7 +26,7 @@ TEST(MetricsLogSerializerTest, EmptyLogList) {
std::vector<SerializedLog> local_list;
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
EXPECT_EQ(0U, list.GetSize());
local_list.clear(); // ReadLogsFromPrefList() expects empty |local_list|.
@@ -43,7 +44,7 @@ TEST(MetricsLogSerializerTest, SingleElementLogList) {
local_list[0].xml = "Hello world!";
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
// |list| will now contain the following:
// [1, Base64Encode("Hello world!"), MD5("Hello world!")].
@@ -76,40 +77,103 @@ TEST(MetricsLogSerializerTest, SingleElementLogList) {
EXPECT_EQ(1U, local_list.size());
}
-// Store elements greater than the limit.
-TEST(MetricsLogSerializerTest, OverLimitLogList) {
+// Store a set of logs over the length limit, but smaller than the min number of
+// bytes.
+TEST(MetricsLogSerializerTest, LongButTinyLogList) {
ListValue list;
- std::vector<SerializedLog> local_list(4);
- local_list[0].proto = "one";
- local_list[1].proto = "two";
- local_list[2].proto = "three";
- local_list[3].proto = "four";
+ size_t log_count = kMaxLocalListSize * 5;
+ std::vector<SerializedLog> local_list(log_count);
+ for (size_t i = 0; i < local_list.size(); ++i) {
+ local_list[0].xml = "x";
+ }
- std::string expected_first;
- base::Base64Encode(local_list[local_list.size() - kMaxLocalListSize].proto,
- &expected_first);
- std::string expected_last;
- base::Base64Encode(local_list[local_list.size() - 1].proto,
- &expected_last);
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
+ kMinLogByteTotal, &list);
+ std::vector<SerializedLog> result_list;
+ EXPECT_EQ(
+ MetricsLogSerializer::RECALL_SUCCESS,
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list));
+ EXPECT_EQ(local_list.size(), result_list.size());
- MetricsLogSerializer::WriteLogsToPrefList(local_list, false,
- kMaxLocalListSize, &list);
- EXPECT_EQ(kMaxLocalListSize + 2, list.GetSize());
+ EXPECT_TRUE(result_list.front().xml.find("x") == 0);
+}
- std::string actual_first;
- EXPECT_TRUE((*(list.begin() + 1))->GetAsString(&actual_first));
- EXPECT_EQ(expected_first, actual_first);
+// Store a set of logs over the length limit, but that doesn't reach the minimum
+// number of bytes until after passing the length limit.
+TEST(MetricsLogSerializerTest, LongButSmallLogList) {
+ ListValue list;
- std::string actual_last;
- EXPECT_TRUE((*(list.end() - 2))->GetAsString(&actual_last));
- EXPECT_EQ(expected_last, actual_last);
+ size_t log_count = kMaxLocalListSize * 5;
+ // Make log_count logs each slightly larger than
+ // kMinLogByteTotal / (log_count - 2)
+ // so that the minimum is reached before the oldest (first) two logs.
+ std::vector<SerializedLog> local_list(log_count);
+ size_t log_size = (kMinLogByteTotal / (log_count - 2)) + 2;
+ local_list[0].xml = "one";
+ local_list[1].xml = "two";
+ local_list[2].xml = "three";
+ local_list[log_count - 1].xml = "last";
+ for (size_t i = 0; i < local_list.size(); ++i) {
+ local_list[i].xml.resize(log_size, ' ');
+ }
- local_list.clear();
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
+ kMinLogByteTotal, &list);
+ std::vector<SerializedLog> result_list;
EXPECT_EQ(
MetricsLogSerializer::RECALL_SUCCESS,
- MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
- EXPECT_EQ(kMaxLocalListSize, local_list.size());
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list));
+ EXPECT_EQ(local_list.size() - 2, result_list.size());
+
+ EXPECT_TRUE(result_list.front().xml.find("three") == 0);
+ EXPECT_TRUE(result_list.back().xml.find("last") == 0);
+}
+
+// Store a set of logs within the length limit, but well over the minimum
+// number of bytes.
+TEST(MetricsLogSerializerTest, ShortButLargeLogList) {
+ ListValue list;
+
+ std::vector<SerializedLog> local_list(kMaxLocalListSize);
+ // Make the total byte count about twice the minimum.
+ size_t log_size = (kMinLogByteTotal / local_list.size()) * 2;
+ for (size_t i = 0; i < local_list.size(); ++i) {
+ local_list[i].xml.resize(log_size, ' ');
+ }
+
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
+ kMinLogByteTotal, &list);
+ std::vector<SerializedLog> result_list;
+ EXPECT_EQ(
+ MetricsLogSerializer::RECALL_SUCCESS,
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list));
+ EXPECT_EQ(local_list.size(), result_list.size());
+}
+
+// Store a set of logs over the length limit, and over the minimum number of
+// bytes.
+TEST(MetricsLogSerializerTest, LongAndLargeLogList) {
+ ListValue list;
+
+ // Include twice the max number of logs.
+ std::vector<SerializedLog> local_list(kMaxLocalListSize * 2);
+ // Make the total byte count about four times the minimum.
+ size_t log_size = (kMinLogByteTotal / local_list.size()) * 4;
+ local_list[local_list.size() - kMaxLocalListSize].xml = "First to keep";
+ for (size_t i = 0; i < local_list.size(); ++i) {
+ local_list[i].xml.resize(log_size, ' ');
+ }
+
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
+ kMinLogByteTotal, &list);
+ std::vector<SerializedLog> result_list;
+ EXPECT_EQ(
+ MetricsLogSerializer::RECALL_SUCCESS,
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list));
+ // The max length should control the resulting size.
+ EXPECT_EQ(kMaxLocalListSize, result_list.size());
+ EXPECT_TRUE(result_list.front().xml.find("First to keep") == 0);
}
// Induce LIST_SIZE_TOO_SMALL corruption
@@ -120,7 +184,7 @@ TEST(MetricsLogSerializerTest, SmallRecoveredListSize) {
local_list[0].xml = "Hello world!";
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
EXPECT_EQ(3U, list.GetSize());
// Remove last element.
@@ -142,7 +206,7 @@ TEST(MetricsLogSerializerTest, RemoveSizeFromLogList) {
local_list[1].xml = "two";
EXPECT_EQ(2U, local_list.size());
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
EXPECT_EQ(4U, list.GetSize());
list.Remove(0, NULL); // Delete size (1st element).
@@ -162,7 +226,7 @@ TEST(MetricsLogSerializerTest, CorruptSizeOfLogList) {
local_list[0].xml = "Hello world!";
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
EXPECT_EQ(3U, list.GetSize());
// Change list size from 1 to 2.
@@ -183,7 +247,7 @@ TEST(MetricsLogSerializerTest, CorruptChecksumOfLogList) {
local_list[0].xml = "Hello world!";
MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
- &list);
+ kMinLogByteTotal, &list);
EXPECT_EQ(3U, list.GetSize());
// Fetch checksum (last element) and change it.

Powered by Google App Engine
This is Rietveld 408576698