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..bb2a952123fab8445dd7e8f12a1d0a623b8fbb40 100644 |
--- a/chrome/browser/metrics/metrics_log_serializer_unittest.cc |
+++ b/chrome/browser/metrics/metrics_log_serializer_unittest.cc |
@@ -12,7 +12,7 @@ typedef MetricsLogManager::SerializedLog SerializedLog; |
namespace { |
-const size_t kMaxLocalListSize = 3; |
+const size_t kMaxLogByteTotal = 1000; |
} // namespace |
@@ -24,7 +24,7 @@ TEST(MetricsLogSerializerTest, EmptyLogList) { |
ListValue list; |
std::vector<SerializedLog> local_list; |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
EXPECT_EQ(0U, list.GetSize()); |
@@ -42,7 +42,7 @@ TEST(MetricsLogSerializerTest, SingleElementLogList) { |
std::vector<SerializedLog> local_list(1); |
local_list[0].xml = "Hello world!"; |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
// |list| will now contain the following: |
@@ -76,40 +76,75 @@ TEST(MetricsLogSerializerTest, SingleElementLogList) { |
EXPECT_EQ(1U, local_list.size()); |
} |
-// Store elements greater than the limit. |
+// Store a set of logs larger than the limit. |
TEST(MetricsLogSerializerTest, OverLimitLogList) { |
ListValue list; |
+ // Make log_count logs each slightly larger that TotalByteLimit / log_count |
+ // so that the oldest (first) log won't fit. |
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"; |
- |
- 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, false, |
- kMaxLocalListSize, &list); |
- EXPECT_EQ(kMaxLocalListSize + 2, list.GetSize()); |
- |
- std::string actual_first; |
- EXPECT_TRUE((*(list.begin() + 1))->GetAsString(&actual_first)); |
- EXPECT_EQ(expected_first, actual_first); |
- |
- std::string actual_last; |
- EXPECT_TRUE((*(list.end() - 2))->GetAsString(&actual_last)); |
- EXPECT_EQ(expected_last, actual_last); |
+ size_t log_size = (kMaxLogByteTotal / local_list.size()) + 2; |
+ local_list[0].xml = "one"; |
+ local_list[1].xml = "two"; |
+ local_list[2].xml = "three"; |
+ local_list[3].xml = "four"; |
+ 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, kMaxLogByteTotal, |
+ &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() - 1, result_list.size()); |
+ |
+ EXPECT_TRUE(result_list.front().xml.find("two") == 0); |
+ EXPECT_TRUE(result_list.back().xml.find("four") == 0); |
+} |
+ |
+// Store a log larger than the limit. |
+TEST(MetricsLogSerializerTest, OverLimitIndividualLog) { |
+ ListValue list; |
+ |
+ std::vector<SerializedLog> local_list(4); |
+ local_list[0].xml = "one"; |
+ local_list[1].xml = "two"; |
+ local_list[2].xml = "three"; |
+ local_list[2].xml.resize(kMaxLogByteTotal + 1, ' '); |
+ local_list[3].xml = "four"; |
+ |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
+ &list); |
+ std::vector<SerializedLog> result_list; |
+ EXPECT_EQ( |
+ MetricsLogSerializer::RECALL_SUCCESS, |
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list)); |
+ EXPECT_EQ(local_list.size() - 1, result_list.size()); |
+ |
+ for (size_t i = 0; i < result_list.size(); ++i) { |
+ EXPECT_LT(result_list[i].xml.size(), kMaxLogByteTotal); |
+ } |
+} |
+ |
+// Store a set of logs each of which is larger than the limit. |
+TEST(MetricsLogSerializerTest, OverLimitAllLogs) { |
+ ListValue list; |
+ |
+ std::vector<SerializedLog> local_list(2); |
+ size_t log_size = kMaxLogByteTotal + 1; |
+ for (size_t i = 0; i < local_list.size(); ++i) { |
+ local_list[i].xml.resize(log_size, ' '); |
+ } |
+ |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
+ &list); |
+ std::vector<SerializedLog> result_list; |
+ EXPECT_EQ( |
+ MetricsLogSerializer::LIST_EMPTY, |
+ MetricsLogSerializer::ReadLogsFromPrefList(list, true, &result_list)); |
+ EXPECT_EQ(0U, result_list.size()); |
} |
// Induce LIST_SIZE_TOO_SMALL corruption |
@@ -119,7 +154,7 @@ TEST(MetricsLogSerializerTest, SmallRecoveredListSize) { |
std::vector<SerializedLog> local_list(1); |
local_list[0].xml = "Hello world!"; |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
EXPECT_EQ(3U, list.GetSize()); |
@@ -141,7 +176,7 @@ TEST(MetricsLogSerializerTest, RemoveSizeFromLogList) { |
local_list[0].xml = "one"; |
local_list[1].xml = "two"; |
EXPECT_EQ(2U, local_list.size()); |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
EXPECT_EQ(4U, list.GetSize()); |
@@ -161,7 +196,7 @@ TEST(MetricsLogSerializerTest, CorruptSizeOfLogList) { |
std::vector<SerializedLog> local_list(1); |
local_list[0].xml = "Hello world!"; |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
EXPECT_EQ(3U, list.GetSize()); |
@@ -182,7 +217,7 @@ TEST(MetricsLogSerializerTest, CorruptChecksumOfLogList) { |
std::vector<SerializedLog> local_list(1); |
local_list[0].xml = "Hello world!"; |
- MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize, |
+ MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLogByteTotal, |
&list); |
EXPECT_EQ(3U, list.GetSize()); |