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

Side by Side Diff: chrome/browser/metrics/metrics_log_serializer_unittest.cc

Issue 9474041: Upload UMA data using protocol buffers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix crash in test Created 8 years, 9 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
OLDNEW
1 // Copyright (c) 2011 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 "base/base64.h" 5 #include "base/base64.h"
6 #include "base/md5.h" 6 #include "base/md5.h"
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "chrome/browser/metrics/metrics_log_serializer.h" 8 #include "chrome/browser/metrics/metrics_log_serializer.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 typedef MetricsLogManager::SerializedLog SerializedLog;
12
11 namespace { 13 namespace {
12 class MetricsLogSerializerTest : public ::testing::Test {
13 };
14 }
15 14
16 static const size_t kMaxLocalListSize = 3; 15 const size_t kMaxLocalListSize = 3;
16
17 } // namespace
18
19 class MetricsLogSerializerTest : public ::testing::Test {
20 };
17 21
18 // Store and retrieve empty list. 22 // Store and retrieve empty list.
19 TEST(MetricsLogSerializerTest, EmptyLogList) { 23 TEST(MetricsLogSerializerTest, EmptyLogList) {
20 ListValue list; 24 ListValue list;
21 std::vector<std::string> local_list; 25 std::vector<SerializedLog> local_list;
22 26
23 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 27 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
24 &list); 28 &list);
25 EXPECT_EQ(0U, list.GetSize()); 29 EXPECT_EQ(0U, list.GetSize());
26 30
27 local_list.clear(); // ReadLogsFromPrefList() expects empty |local_list|. 31 local_list.clear(); // ReadLogsFromPrefList() expects empty |local_list|.
28 EXPECT_EQ(MetricsLogSerializer::LIST_EMPTY, 32 EXPECT_EQ(
29 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 33 MetricsLogSerializer::LIST_EMPTY,
34 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
30 EXPECT_EQ(0U, local_list.size()); 35 EXPECT_EQ(0U, local_list.size());
31 } 36 }
32 37
33 // Store and retrieve a single log value. 38 // Store and retrieve a single log value.
34 TEST(MetricsLogSerializerTest, SingleElementLogList) { 39 TEST(MetricsLogSerializerTest, SingleElementLogList) {
35 ListValue list; 40 ListValue list;
36 std::vector<std::string> local_list;
37 41
38 local_list.push_back("Hello world!"); 42 std::vector<SerializedLog> local_list(1);
39 EXPECT_EQ(1U, local_list.size()); 43 local_list[0].xml = "Hello world!";
40 44
41 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 45 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
42 &list); 46 &list);
43 47
44 // |list| will now contain the following: 48 // |list| will now contain the following:
45 // [1, Base64Encode("Hello world!"), MD5("Hello world!")]. 49 // [1, Base64Encode("Hello world!"), MD5("Hello world!")].
46 EXPECT_EQ(3U, list.GetSize()); 50 ASSERT_EQ(3U, list.GetSize());
47 51
48 // Examine each element. 52 // Examine each element.
49 ListValue::const_iterator it = list.begin(); 53 ListValue::const_iterator it = list.begin();
50 int size = 0; 54 int size = 0;
51 (*it)->GetAsInteger(&size); 55 (*it)->GetAsInteger(&size);
52 EXPECT_EQ(1, size); 56 EXPECT_EQ(1, size);
53 57
54 ++it; 58 ++it;
55 std::string str; 59 std::string str;
56 (*it)->GetAsString(&str); // Base64 encoded "Hello world!" string. 60 (*it)->GetAsString(&str); // Base64 encoded "Hello world!" string.
57 std::string encoded; 61 std::string encoded;
58 base::Base64Encode("Hello world!", &encoded); 62 base::Base64Encode("Hello world!", &encoded);
59 EXPECT_TRUE(encoded == str); 63 EXPECT_TRUE(encoded == str);
60 64
61 ++it; 65 ++it;
62 (*it)->GetAsString(&str); // MD5 for encoded "Hello world!" string. 66 (*it)->GetAsString(&str); // MD5 for encoded "Hello world!" string.
63 EXPECT_TRUE(base::MD5String(encoded) == str); 67 EXPECT_TRUE(base::MD5String(encoded) == str);
64 68
65 ++it; 69 ++it;
66 EXPECT_TRUE(it == list.end()); // Reached end of list. 70 EXPECT_TRUE(it == list.end()); // Reached end of list.
67 71
68 local_list.clear(); 72 local_list.clear();
69 EXPECT_EQ(MetricsLogSerializer::RECALL_SUCCESS, 73 EXPECT_EQ(
70 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 74 MetricsLogSerializer::RECALL_SUCCESS,
75 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
71 EXPECT_EQ(1U, local_list.size()); 76 EXPECT_EQ(1U, local_list.size());
72 } 77 }
73 78
74 // Store elements greater than the limit. 79 // Store elements greater than the limit.
75 TEST(MetricsLogSerializerTest, OverLimitLogList) { 80 TEST(MetricsLogSerializerTest, OverLimitLogList) {
76 ListValue list; 81 ListValue list;
77 std::vector<std::string> local_list;
78 82
79 local_list.push_back("one"); 83 std::vector<SerializedLog> local_list(4);
80 local_list.push_back("two"); 84 local_list[0].proto = "one";
81 local_list.push_back("three"); 85 local_list[1].proto = "two";
82 local_list.push_back("four"); 86 local_list[2].proto = "three";
83 EXPECT_EQ(4U, local_list.size()); 87 local_list[3].proto = "four";
84 88
85 std::string expected_first; 89 std::string expected_first;
86 base::Base64Encode(local_list[local_list.size() - kMaxLocalListSize], 90 base::Base64Encode(local_list[local_list.size() - kMaxLocalListSize].proto,
87 &expected_first); 91 &expected_first);
88 std::string expected_last; 92 std::string expected_last;
89 base::Base64Encode(local_list[local_list.size() - 1], 93 base::Base64Encode(local_list[local_list.size() - 1].proto,
90 &expected_last); 94 &expected_last);
91 95
92 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 96 MetricsLogSerializer::WriteLogsToPrefList(local_list, false,
93 &list); 97 kMaxLocalListSize, &list);
94 EXPECT_EQ(kMaxLocalListSize + 2, list.GetSize()); 98 EXPECT_EQ(kMaxLocalListSize + 2, list.GetSize());
95 99
96 std::string actual_first; 100 std::string actual_first;
97 EXPECT_TRUE((*(list.begin() + 1))->GetAsString(&actual_first)); 101 EXPECT_TRUE((*(list.begin() + 1))->GetAsString(&actual_first));
98 EXPECT_TRUE(expected_first == actual_first); 102 EXPECT_EQ(expected_first, actual_first);
99 103
100 std::string actual_last; 104 std::string actual_last;
101 EXPECT_TRUE((*(list.end() - 2))->GetAsString(&actual_last)); 105 EXPECT_TRUE((*(list.end() - 2))->GetAsString(&actual_last));
102 EXPECT_TRUE(expected_last == actual_last); 106 EXPECT_EQ(expected_last, actual_last);
103 107
104 local_list.clear(); 108 local_list.clear();
105 EXPECT_EQ(MetricsLogSerializer::RECALL_SUCCESS, 109 EXPECT_EQ(
106 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 110 MetricsLogSerializer::RECALL_SUCCESS,
111 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
107 EXPECT_EQ(kMaxLocalListSize, local_list.size()); 112 EXPECT_EQ(kMaxLocalListSize, local_list.size());
108 } 113 }
109 114
110 // Induce LIST_SIZE_TOO_SMALL corruption 115 // Induce LIST_SIZE_TOO_SMALL corruption
111 TEST(MetricsLogSerializerTest, SmallRecoveredListSize) { 116 TEST(MetricsLogSerializerTest, SmallRecoveredListSize) {
112 ListValue list; 117 ListValue list;
113 std::vector<std::string> local_list;
114 118
115 local_list.push_back("Hello world!"); 119 std::vector<SerializedLog> local_list(1);
116 EXPECT_EQ(1U, local_list.size()); 120 local_list[0].xml = "Hello world!";
117 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 121
122 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
118 &list); 123 &list);
119 EXPECT_EQ(3U, list.GetSize()); 124 EXPECT_EQ(3U, list.GetSize());
120 125
121 // Remove last element. 126 // Remove last element.
122 list.Remove(list.GetSize() - 1, NULL); 127 list.Remove(list.GetSize() - 1, NULL);
123 EXPECT_EQ(2U, list.GetSize()); 128 EXPECT_EQ(2U, list.GetSize());
124 129
125 local_list.clear(); 130 local_list.clear();
126 EXPECT_EQ(MetricsLogSerializer::LIST_SIZE_TOO_SMALL, 131 EXPECT_EQ(
127 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 132 MetricsLogSerializer::LIST_SIZE_TOO_SMALL,
133 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
128 } 134 }
129 135
130 // Remove size from the stored list. 136 // Remove size from the stored list.
131 TEST(MetricsLogSerializerTest, RemoveSizeFromLogList) { 137 TEST(MetricsLogSerializerTest, RemoveSizeFromLogList) {
132 ListValue list; 138 ListValue list;
133 std::vector<std::string> local_list;
134 139
135 local_list.push_back("one"); 140 std::vector<SerializedLog> local_list(2);
136 local_list.push_back("two"); 141 local_list[0].xml = "one";
142 local_list[1].xml = "two";
137 EXPECT_EQ(2U, local_list.size()); 143 EXPECT_EQ(2U, local_list.size());
138 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 144 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
139 &list); 145 &list);
140 EXPECT_EQ(4U, list.GetSize()); 146 EXPECT_EQ(4U, list.GetSize());
141 147
142 list.Remove(0, NULL); // Delete size (1st element). 148 list.Remove(0, NULL); // Delete size (1st element).
143 EXPECT_EQ(3U, list.GetSize()); 149 EXPECT_EQ(3U, list.GetSize());
144 150
145 local_list.clear(); 151 local_list.clear();
146 EXPECT_EQ(MetricsLogSerializer::LIST_SIZE_MISSING, 152 EXPECT_EQ(
147 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 153 MetricsLogSerializer::LIST_SIZE_MISSING,
154 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
148 } 155 }
149 156
150 // Corrupt size of stored list. 157 // Corrupt size of stored list.
151 TEST(MetricsLogSerializerTest, CorruptSizeOfLogList) { 158 TEST(MetricsLogSerializerTest, CorruptSizeOfLogList) {
152 ListValue list; 159 ListValue list;
153 std::vector<std::string> local_list;
154 160
155 local_list.push_back("Hello world!"); 161 std::vector<SerializedLog> local_list(1);
156 EXPECT_EQ(1U, local_list.size()); 162 local_list[0].xml = "Hello world!";
157 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 163
164 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
158 &list); 165 &list);
159 EXPECT_EQ(3U, list.GetSize()); 166 EXPECT_EQ(3U, list.GetSize());
160 167
161 // Change list size from 1 to 2. 168 // Change list size from 1 to 2.
162 EXPECT_TRUE(list.Set(0, Value::CreateIntegerValue(2))); 169 EXPECT_TRUE(list.Set(0, Value::CreateIntegerValue(2)));
163 EXPECT_EQ(3U, list.GetSize()); 170 EXPECT_EQ(3U, list.GetSize());
164 171
165 local_list.clear(); 172 local_list.clear();
166 EXPECT_EQ(MetricsLogSerializer::LIST_SIZE_CORRUPTION, 173 EXPECT_EQ(
167 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 174 MetricsLogSerializer::LIST_SIZE_CORRUPTION,
175 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
168 } 176 }
169 177
170 // Corrupt checksum of stored list. 178 // Corrupt checksum of stored list.
171 TEST(MetricsLogSerializerTest, CorruptChecksumOfLogList) { 179 TEST(MetricsLogSerializerTest, CorruptChecksumOfLogList) {
172 ListValue list; 180 ListValue list;
173 std::vector<std::string> local_list;
174 181
175 local_list.clear(); 182 std::vector<SerializedLog> local_list(1);
176 local_list.push_back("Hello world!"); 183 local_list[0].xml = "Hello world!";
177 EXPECT_EQ(1U, local_list.size()); 184
178 MetricsLogSerializer::WriteLogsToPrefList(local_list, kMaxLocalListSize, 185 MetricsLogSerializer::WriteLogsToPrefList(local_list, true, kMaxLocalListSize,
179 &list); 186 &list);
180 EXPECT_EQ(3U, list.GetSize()); 187 EXPECT_EQ(3U, list.GetSize());
181 188
182 // Fetch checksum (last element) and change it. 189 // Fetch checksum (last element) and change it.
183 std::string checksum; 190 std::string checksum;
184 EXPECT_TRUE((*(list.end() - 1))->GetAsString(&checksum)); 191 EXPECT_TRUE((*(list.end() - 1))->GetAsString(&checksum));
185 checksum[0] = (checksum[0] == 'a') ? 'b' : 'a'; 192 checksum[0] = (checksum[0] == 'a') ? 'b' : 'a';
186 EXPECT_TRUE(list.Set(2, Value::CreateStringValue(checksum))); 193 EXPECT_TRUE(list.Set(2, Value::CreateStringValue(checksum)));
187 EXPECT_EQ(3U, list.GetSize()); 194 EXPECT_EQ(3U, list.GetSize());
188 195
189 local_list.clear(); 196 local_list.clear();
190 EXPECT_EQ(MetricsLogSerializer::CHECKSUM_CORRUPTION, 197 EXPECT_EQ(
191 MetricsLogSerializer::ReadLogsFromPrefList(list, &local_list)); 198 MetricsLogSerializer::CHECKSUM_CORRUPTION,
199 MetricsLogSerializer::ReadLogsFromPrefList(list, true, &local_list));
192 } 200 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698