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

Side by Side Diff: chrome/browser/safe_browsing/protocol_parser_unittest.cc

Issue 1420053005: Move code in components/safe_browsing_db and chrome/browser/s_b/ under the safe_browsing namespace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@02_components_move
Patch Set: Remove '// namespace safe_browsing' for a small fwd decl block. Created 5 years, 1 month 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
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 <string> 5 #include <string>
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "chrome/browser/safe_browsing/protocol_parser.h" 9 #include "chrome/browser/safe_browsing/protocol_parser.h"
10 #include "chrome/browser/safe_browsing/safe_browsing_util.h" 10 #include "chrome/browser/safe_browsing/safe_browsing_util.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace safe_browsing {
14
13 namespace { 15 namespace {
14 16
15 const char kDefaultPhishList[] = "goog-phish-shavar"; 17 const char kDefaultPhishList[] = "goog-phish-shavar";
16 const char kDefaultMalwareList[] = "goog-malware-shavar"; 18 const char kDefaultMalwareList[] = "goog-malware-shavar";
17 19
20 } // namespace
21
18 // Test parsing one add chunk. 22 // Test parsing one add chunk.
19 TEST(SafeBrowsingProtocolParsingTest, TestAddChunk) { 23 TEST(SafeBrowsingProtocolParsingTest, TestAddChunk) {
20 const char kRawAddChunk[] = { 24 const char kRawAddChunk[] = {
21 '\0', '\0', '\0', '\x1C', // 32-bit payload length in network byte order. 25 '\0', '\0', '\0', '\x1C', // 32-bit payload length in network byte order.
22 '\x08', // field 1, wire format varint 26 '\x08', // field 1, wire format varint
23 '\x01', // chunk_number varint 1 27 '\x01', // chunk_number varint 1
24 '\x22', // field 4, wire format length-delimited 28 '\x22', // field 4, wire format length-delimited
25 '\x18', // varint length 24 29 '\x18', // varint length 24
26 '1', '1', '1', '1', // 4-byte prefixes 30 '1', '1', '1', '1', // 4-byte prefixes
27 '2', '2', '2', '2', 31 '2', '2', '2', '2',
28 '3', '3', '3', '3', 32 '3', '3', '3', '3',
29 '4', '4', '4', '4', 33 '4', '4', '4', '4',
30 '8', '8', '8', '8', 34 '8', '8', '8', '8',
31 '9', '9', '9', '9', 35 '9', '9', '9', '9',
32 }; 36 };
33 37
34 ScopedVector<SBChunkData> chunks; 38 ScopedVector<SBChunkData> chunks;
35 EXPECT_TRUE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 39 EXPECT_TRUE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
36 &chunks));
37 ASSERT_EQ(1U, chunks.size()); 40 ASSERT_EQ(1U, chunks.size());
38 EXPECT_EQ(1, chunks[0]->ChunkNumber()); 41 EXPECT_EQ(1, chunks[0]->ChunkNumber());
39 EXPECT_TRUE(chunks[0]->IsAdd()); 42 EXPECT_TRUE(chunks[0]->IsAdd());
40 EXPECT_FALSE(chunks[0]->IsSub()); 43 EXPECT_FALSE(chunks[0]->IsSub());
41 EXPECT_TRUE(chunks[0]->IsPrefix()); 44 EXPECT_TRUE(chunks[0]->IsPrefix());
42 EXPECT_FALSE(chunks[0]->IsFullHash()); 45 EXPECT_FALSE(chunks[0]->IsFullHash());
43 ASSERT_EQ(6U, chunks[0]->PrefixCount()); 46 ASSERT_EQ(6U, chunks[0]->PrefixCount());
44 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111 47 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111
45 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222 48 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222
46 EXPECT_EQ(0x33333333U, chunks[0]->PrefixAt(2)); // 3333 49 EXPECT_EQ(0x33333333U, chunks[0]->PrefixAt(2)); // 3333
(...skipping 24 matching lines...) Expand all
71 '2', '3', '2', '3', '2', '3', '2', '3', 74 '2', '3', '2', '3', '2', '3', '2', '3',
72 }; 75 };
73 76
74 SBFullHash full_hash1, full_hash2; 77 SBFullHash full_hash1, full_hash2;
75 for (int i = 0; i < 32; ++i) { 78 for (int i = 0; i < 32; ++i) {
76 full_hash1.full_hash[i] = (i % 2) ? '1' : '0'; 79 full_hash1.full_hash[i] = (i % 2) ? '1' : '0';
77 full_hash2.full_hash[i] = (i % 2) ? '3' : '2'; 80 full_hash2.full_hash[i] = (i % 2) ? '3' : '2';
78 } 81 }
79 82
80 ScopedVector<SBChunkData> chunks; 83 ScopedVector<SBChunkData> chunks;
81 EXPECT_TRUE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 84 EXPECT_TRUE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
82 &chunks));
83 ASSERT_EQ(1U, chunks.size()); 85 ASSERT_EQ(1U, chunks.size());
84 EXPECT_EQ(1, chunks[0]->ChunkNumber()); 86 EXPECT_EQ(1, chunks[0]->ChunkNumber());
85 EXPECT_TRUE(chunks[0]->IsAdd()); 87 EXPECT_TRUE(chunks[0]->IsAdd());
86 EXPECT_FALSE(chunks[0]->IsSub()); 88 EXPECT_FALSE(chunks[0]->IsSub());
87 EXPECT_FALSE(chunks[0]->IsPrefix()); 89 EXPECT_FALSE(chunks[0]->IsPrefix());
88 EXPECT_TRUE(chunks[0]->IsFullHash()); 90 EXPECT_TRUE(chunks[0]->IsFullHash());
89 91
90 ASSERT_EQ(2U, chunks[0]->FullHashCount()); 92 ASSERT_EQ(2U, chunks[0]->FullHashCount());
91 EXPECT_TRUE( 93 EXPECT_TRUE(SBFullHashEqual(chunks[0]->FullHashAt(0), full_hash1));
92 safe_browsing::SBFullHashEqual(chunks[0]->FullHashAt(0), full_hash1)); 94 EXPECT_TRUE(SBFullHashEqual(chunks[0]->FullHashAt(1), full_hash2));
93 EXPECT_TRUE(
94 safe_browsing::SBFullHashEqual(chunks[0]->FullHashAt(1), full_hash2));
95 } 95 }
96 96
97 // Test parsing multiple add chunks. We'll use the same chunk as above, and add 97 // Test parsing multiple add chunks. We'll use the same chunk as above, and add
98 // one more after it. 98 // one more after it.
99 TEST(SafeBrowsingProtocolParsingTest, TestAddChunks) { 99 TEST(SafeBrowsingProtocolParsingTest, TestAddChunks) {
100 const char kRawAddChunk[] = { 100 const char kRawAddChunk[] = {
101 '\0', '\0', '\0', '\x1C', // 32-bit payload length in network byte order. 101 '\0', '\0', '\0', '\x1C', // 32-bit payload length in network byte order.
102 '\x08', // field 1, wire format varint 102 '\x08', // field 1, wire format varint
103 '\x01', // chunk_number varint 1 103 '\x01', // chunk_number varint 1
104 '\x22', // field 4, wire format length-delimited 104 '\x22', // field 4, wire format length-delimited
105 '\x18', // varint length 24 105 '\x18', // varint length 24
106 106
107 '1', '1', '1', '1', // 4-byte prefixes 107 '1', '1', '1', '1', // 4-byte prefixes
108 '2', '2', '2', '2', 108 '2', '2', '2', '2',
109 '3', '3', '3', '3', 109 '3', '3', '3', '3',
110 '4', '4', '4', '4', 110 '4', '4', '4', '4',
111 '8', '8', '8', '8', 111 '8', '8', '8', '8',
112 '9', '9', '9', '9', 112 '9', '9', '9', '9',
113 113
114 '\0', '\0', '\0', '\x0C', // 32-bit payload length in network byte order. 114 '\0', '\0', '\0', '\x0C', // 32-bit payload length in network byte order.
115 '\x08', // field 1, wire format varint 115 '\x08', // field 1, wire format varint
116 '\x02', // chunk_number varint 1 116 '\x02', // chunk_number varint 1
117 '\x22', // field 4, wire format length-delimited 117 '\x22', // field 4, wire format length-delimited
118 '\x08', // varint length 8 118 '\x08', // varint length 8
119 'p', 'p', 'p', 'p', // 4-byte prefixes 119 'p', 'p', 'p', 'p', // 4-byte prefixes
120 'g', 'g', 'g', 'g', 120 'g', 'g', 'g', 'g',
121 }; 121 };
122 122
123 ScopedVector<SBChunkData> chunks; 123 ScopedVector<SBChunkData> chunks;
124 EXPECT_TRUE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 124 EXPECT_TRUE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
125 &chunks));
126 ASSERT_EQ(2U, chunks.size()); 125 ASSERT_EQ(2U, chunks.size());
127 126
128 EXPECT_EQ(1, chunks[0]->ChunkNumber()); 127 EXPECT_EQ(1, chunks[0]->ChunkNumber());
129 EXPECT_TRUE(chunks[0]->IsAdd()); 128 EXPECT_TRUE(chunks[0]->IsAdd());
130 EXPECT_FALSE(chunks[0]->IsSub()); 129 EXPECT_FALSE(chunks[0]->IsSub());
131 EXPECT_TRUE(chunks[0]->IsPrefix()); 130 EXPECT_TRUE(chunks[0]->IsPrefix());
132 EXPECT_FALSE(chunks[0]->IsFullHash()); 131 EXPECT_FALSE(chunks[0]->IsFullHash());
133 ASSERT_EQ(6U, chunks[0]->PrefixCount()); 132 ASSERT_EQ(6U, chunks[0]->PrefixCount());
134 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111 133 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111
135 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222 134 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222
(...skipping 19 matching lines...) Expand all
155 '\x08', // field 1, wire format varint 154 '\x08', // field 1, wire format varint
156 '\x01', // chunk_number varint 1 155 '\x01', // chunk_number varint 1
157 '\x22', // field 4, wire format length-delimited 156 '\x22', // field 4, wire format length-delimited
158 '\x18', // varint length 24 157 '\x18', // varint length 24
159 '1', '1', '1', '1', // 4-byte prefixes 158 '1', '1', '1', '1', // 4-byte prefixes
160 '2', '2', '2', '2', 159 '2', '2', '2', '2',
161 '3', '3', '3', '3', 160 '3', '3', '3', '3',
162 }; 161 };
163 162
164 ScopedVector<SBChunkData> chunks; 163 ScopedVector<SBChunkData> chunks;
165 EXPECT_FALSE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 164 EXPECT_FALSE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
166 &chunks));
167 } 165 }
168 166
169 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedFullHashChunk) { 167 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedFullHashChunk) {
170 // This chunk delares there are two full hashes but there is only one. 168 // This chunk delares there are two full hashes but there is only one.
171 const char kRawAddChunk[] = { 169 const char kRawAddChunk[] = {
172 '\0', '\0', '\0', '\x46', // 32-bit payload length in network byte order. 170 '\0', '\0', '\0', '\x46', // 32-bit payload length in network byte order.
173 '\x08', // field 1, wire format varint 171 '\x08', // field 1, wire format varint
174 '\x01', // chunk_number varint 1 172 '\x01', // chunk_number varint 1
175 '\x18', // field 3, wire format varint 173 '\x18', // field 3, wire format varint
176 '\x01', // enum PrefixType == FULL_32B 174 '\x01', // enum PrefixType == FULL_32B
177 '\x22', // field 4, wire format length-delimited 175 '\x22', // field 4, wire format length-delimited
178 '\x40', // varint length 64 (2 full hashes) 176 '\x40', // varint length 64 (2 full hashes)
179 177
180 '0', '1', '0', '1', '0', '1', '0', '1', 178 '0', '1', '0', '1', '0', '1', '0', '1',
181 '0', '1', '0', '1', '0', '1', '0', '1', 179 '0', '1', '0', '1', '0', '1', '0', '1',
182 '0', '1', '0', '1', '0', '1', '0', '1', 180 '0', '1', '0', '1', '0', '1', '0', '1',
183 '0', '1', '0', '1', '0', '1', '0', '1', 181 '0', '1', '0', '1', '0', '1', '0', '1',
184 }; 182 };
185 183
186 ScopedVector<SBChunkData> chunks; 184 ScopedVector<SBChunkData> chunks;
187 EXPECT_FALSE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 185 EXPECT_FALSE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
188 &chunks));
189 } 186 }
190 187
191 TEST(SafeBrowsingProtocolParsingTest, TestHugeChunk) { 188 TEST(SafeBrowsingProtocolParsingTest, TestHugeChunk) {
192 // This chunk delares there are 6 prefixes but actually only contains 3. 189 // This chunk delares there are 6 prefixes but actually only contains 3.
193 const char kRawAddChunk[] = { 190 const char kRawAddChunk[] = {
194 '\x1', '\0', '\0', '\0', // 32-bit payload length in network byte order. 191 '\x1', '\0', '\0', '\0', // 32-bit payload length in network byte order.
195 '\x08', // field 1, wire format varint 192 '\x08', // field 1, wire format varint
196 '\x01', // chunk_number varint 1 193 '\x01', // chunk_number varint 1
197 '\x22', // field 4, wire format length-delimited 194 '\x22', // field 4, wire format length-delimited
198 '\x18', // varint length 24 195 '\x18', // varint length 24
199 '1', '1', '1', '1', // 4-byte prefixes 196 '1', '1', '1', '1', // 4-byte prefixes
200 '2', '2', '2', '2', 197 '2', '2', '2', '2',
201 '3', '3', '3', '3', 198 '3', '3', '3', '3',
202 }; 199 };
203 200
204 ScopedVector<SBChunkData> chunks; 201 ScopedVector<SBChunkData> chunks;
205 EXPECT_FALSE(safe_browsing::ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), 202 EXPECT_FALSE(ParseChunk(kRawAddChunk, sizeof(kRawAddChunk), &chunks));
206 &chunks));
207 } 203 }
208 204
209 // Test parsing one sub chunk. 205 // Test parsing one sub chunk.
210 TEST(SafeBrowsingProtocolParsingTest, TestSubChunk) { 206 TEST(SafeBrowsingProtocolParsingTest, TestSubChunk) {
211 const char kRawSubChunk[] = { 207 const char kRawSubChunk[] = {
212 '\0', '\0', '\0', '\x12', // 32-bit payload length in network byte order 208 '\0', '\0', '\0', '\x12', // 32-bit payload length in network byte order
213 '\x08', // field 1, wire format varint 209 '\x08', // field 1, wire format varint
214 '\x03', // chunk_number varint 3 210 '\x03', // chunk_number varint 3
215 '\x10', // field 2, wire format varint 211 '\x10', // field 2, wire format varint
216 '\x01', // enum ChunkType == SUB 212 '\x01', // enum ChunkType == SUB
217 '\x22', // field 4, wire format length-delimited 213 '\x22', // field 4, wire format length-delimited
218 '\x08', // varint length 8 (2 prefixes) 214 '\x08', // varint length 8 (2 prefixes)
219 '1', '1', '1', '1', // 4-byte prefixes 215 '1', '1', '1', '1', // 4-byte prefixes
220 '2', '2', '2', '2', 216 '2', '2', '2', '2',
221 '\x2a', // field 5, wire format length-delimited 217 '\x2a', // field 5, wire format length-delimited
222 '\x02', // varint length 2 (2 add-chunk numbers) 218 '\x02', // varint length 2 (2 add-chunk numbers)
223 '\x07', '\x09', // varint 7, varint 9 219 '\x07', '\x09', // varint 7, varint 9
224 }; 220 };
225 221
226 ScopedVector<SBChunkData> chunks; 222 ScopedVector<SBChunkData> chunks;
227 EXPECT_TRUE(safe_browsing::ParseChunk(kRawSubChunk, sizeof(kRawSubChunk), 223 EXPECT_TRUE(ParseChunk(kRawSubChunk, sizeof(kRawSubChunk), &chunks));
228 &chunks));
229 ASSERT_EQ(1U, chunks.size()); 224 ASSERT_EQ(1U, chunks.size());
230 EXPECT_EQ(3, chunks[0]->ChunkNumber()); 225 EXPECT_EQ(3, chunks[0]->ChunkNumber());
231 EXPECT_FALSE(chunks[0]->IsAdd()); 226 EXPECT_FALSE(chunks[0]->IsAdd());
232 EXPECT_TRUE(chunks[0]->IsSub()); 227 EXPECT_TRUE(chunks[0]->IsSub());
233 EXPECT_TRUE(chunks[0]->IsPrefix()); 228 EXPECT_TRUE(chunks[0]->IsPrefix());
234 EXPECT_FALSE(chunks[0]->IsFullHash()); 229 EXPECT_FALSE(chunks[0]->IsFullHash());
235 ASSERT_EQ(2U, chunks[0]->PrefixCount()); 230 ASSERT_EQ(2U, chunks[0]->PrefixCount());
236 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111 231 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111
237 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0)); 232 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0));
238 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222 233 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222
(...skipping 28 matching lines...) Expand all
267 '\x07', '\x09', // varint 7, varint 9 262 '\x07', '\x09', // varint 7, varint 9
268 }; 263 };
269 264
270 SBFullHash full_hash1, full_hash2; 265 SBFullHash full_hash1, full_hash2;
271 for (int i = 0; i < 32; ++i) { 266 for (int i = 0; i < 32; ++i) {
272 full_hash1.full_hash[i] = i % 2 ? '1' : '0'; 267 full_hash1.full_hash[i] = i % 2 ? '1' : '0';
273 full_hash2.full_hash[i] = i % 2 ? '3' : '2'; 268 full_hash2.full_hash[i] = i % 2 ? '3' : '2';
274 } 269 }
275 270
276 ScopedVector<SBChunkData> chunks; 271 ScopedVector<SBChunkData> chunks;
277 EXPECT_TRUE(safe_browsing::ParseChunk(kRawSubChunk, sizeof(kRawSubChunk), 272 EXPECT_TRUE(ParseChunk(kRawSubChunk, sizeof(kRawSubChunk), &chunks));
278 &chunks));
279 ASSERT_EQ(1U, chunks.size()); 273 ASSERT_EQ(1U, chunks.size());
280 EXPECT_EQ(2, chunks[0]->ChunkNumber()); 274 EXPECT_EQ(2, chunks[0]->ChunkNumber());
281 EXPECT_FALSE(chunks[0]->IsAdd()); 275 EXPECT_FALSE(chunks[0]->IsAdd());
282 EXPECT_TRUE(chunks[0]->IsSub()); 276 EXPECT_TRUE(chunks[0]->IsSub());
283 EXPECT_FALSE(chunks[0]->IsPrefix()); 277 EXPECT_FALSE(chunks[0]->IsPrefix());
284 EXPECT_TRUE(chunks[0]->IsFullHash()); 278 EXPECT_TRUE(chunks[0]->IsFullHash());
285 279
286 ASSERT_EQ(2U, chunks[0]->FullHashCount()); 280 ASSERT_EQ(2U, chunks[0]->FullHashCount());
287 EXPECT_TRUE( 281 EXPECT_TRUE(SBFullHashEqual(chunks[0]->FullHashAt(0), full_hash1));
288 safe_browsing::SBFullHashEqual(chunks[0]->FullHashAt(0), full_hash1));
289 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0)); 282 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0));
290 EXPECT_TRUE( 283 EXPECT_TRUE(SBFullHashEqual(chunks[0]->FullHashAt(1), full_hash2));
291 safe_browsing::SBFullHashEqual(chunks[0]->FullHashAt(1), full_hash2));
292 EXPECT_EQ(9, chunks[0]->AddChunkNumberAt(1)); 284 EXPECT_EQ(9, chunks[0]->AddChunkNumberAt(1));
293 } 285 }
294 286
295 // Test parsing the SafeBrowsing update response. 287 // Test parsing the SafeBrowsing update response.
296 TEST(SafeBrowsingProtocolParsingTest, TestChunkDelete) { 288 TEST(SafeBrowsingProtocolParsingTest, TestChunkDelete) {
297 std::string add_del("n:1700\ni:phishy\nad:1-7,43-597,44444,99999\n" 289 std::string add_del("n:1700\ni:phishy\nad:1-7,43-597,44444,99999\n"
298 "i:malware\nsd:21-27,42,171717\n"); 290 "i:malware\nsd:21-27,42,171717\n");
299 291
300 size_t next_query_sec = 0; 292 size_t next_query_sec = 0;
301 bool reset = false; 293 bool reset = false;
302 std::vector<SBChunkDelete> deletes; 294 std::vector<SBChunkDelete> deletes;
303 std::vector<ChunkUrl> urls; 295 std::vector<ChunkUrl> urls;
304 EXPECT_TRUE(safe_browsing::ParseUpdate(add_del.data(), add_del.length(), 296 EXPECT_TRUE(ParseUpdate(add_del.data(), add_del.length(),
305 &next_query_sec, &reset, 297 &next_query_sec, &reset,
306 &deletes, &urls)); 298 &deletes, &urls));
307 299
308 EXPECT_TRUE(urls.empty()); 300 EXPECT_TRUE(urls.empty());
309 EXPECT_FALSE(reset); 301 EXPECT_FALSE(reset);
310 EXPECT_EQ(1700U, next_query_sec); 302 EXPECT_EQ(1700U, next_query_sec);
311 ASSERT_EQ(2U, deletes.size()); 303 ASSERT_EQ(2U, deletes.size());
312 304
313 ASSERT_EQ(4U, deletes[0].chunk_del.size()); 305 ASSERT_EQ(4U, deletes[0].chunk_del.size());
314 EXPECT_TRUE(deletes[0].chunk_del[0] == ChunkRange(1, 7)); 306 EXPECT_TRUE(deletes[0].chunk_del[0] == ChunkRange(1, 7));
315 EXPECT_TRUE(deletes[0].chunk_del[1] == ChunkRange(43, 597)); 307 EXPECT_TRUE(deletes[0].chunk_del[1] == ChunkRange(43, 597));
316 EXPECT_TRUE(deletes[0].chunk_del[2] == ChunkRange(44444)); 308 EXPECT_TRUE(deletes[0].chunk_del[2] == ChunkRange(44444));
317 EXPECT_TRUE(deletes[0].chunk_del[3] == ChunkRange(99999)); 309 EXPECT_TRUE(deletes[0].chunk_del[3] == ChunkRange(99999));
318 310
319 ASSERT_EQ(3U, deletes[1].chunk_del.size()); 311 ASSERT_EQ(3U, deletes[1].chunk_del.size());
320 EXPECT_TRUE(deletes[1].chunk_del[0] == ChunkRange(21, 27)); 312 EXPECT_TRUE(deletes[1].chunk_del[0] == ChunkRange(21, 27));
321 EXPECT_TRUE(deletes[1].chunk_del[1] == ChunkRange(42)); 313 EXPECT_TRUE(deletes[1].chunk_del[1] == ChunkRange(42));
322 EXPECT_TRUE(deletes[1].chunk_del[2] == ChunkRange(171717)); 314 EXPECT_TRUE(deletes[1].chunk_del[2] == ChunkRange(171717));
323 315
324 // An update response with missing list name. 316 // An update response with missing list name.
325 next_query_sec = 0; 317 next_query_sec = 0;
326 deletes.clear(); 318 deletes.clear();
327 urls.clear(); 319 urls.clear();
328 add_del = "n:1700\nad:1-7,43-597,44444,99999\ni:malware\nsd:4,21-27171717\n"; 320 add_del = "n:1700\nad:1-7,43-597,44444,99999\ni:malware\nsd:4,21-27171717\n";
329 EXPECT_FALSE(safe_browsing::ParseUpdate(add_del.data(), add_del.length(), 321 EXPECT_FALSE(ParseUpdate(add_del.data(), add_del.length(),
330 &next_query_sec, &reset, 322 &next_query_sec, &reset,
331 &deletes, &urls)); 323 &deletes, &urls));
332 } 324 }
333 325
334 // Test parsing the SafeBrowsing update response. 326 // Test parsing the SafeBrowsing update response.
335 TEST(SafeBrowsingProtocolParsingTest, TestRedirects) { 327 TEST(SafeBrowsingProtocolParsingTest, TestRedirects) {
336 const std::string redirects(base::StringPrintf( 328 const std::string redirects(base::StringPrintf(
337 "i:%s\n" 329 "i:%s\n"
338 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_1\n" 330 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_1\n"
339 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_2\n" 331 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_2\n"
340 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_3\n" 332 "u:cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_3\n"
341 "u:s.ytimg.com/safebrowsing/rd/goog-phish-shavar_a_8641-8800:8641-8689," 333 "u:s.ytimg.com/safebrowsing/rd/goog-phish-shavar_a_8641-8800:8641-8689,"
342 "8691-8731,8733-8786\n", 334 "8691-8731,8733-8786\n",
343 kDefaultMalwareList)); 335 kDefaultMalwareList));
344 336
345 size_t next_query_sec = 0; 337 size_t next_query_sec = 0;
346 bool reset = false; 338 bool reset = false;
347 std::vector<SBChunkDelete> deletes; 339 std::vector<SBChunkDelete> deletes;
348 std::vector<ChunkUrl> urls; 340 std::vector<ChunkUrl> urls;
349 EXPECT_TRUE(safe_browsing::ParseUpdate(redirects.data(), redirects.length(), 341 EXPECT_TRUE(ParseUpdate(redirects.data(), redirects.length(),
350 &next_query_sec, &reset, 342 &next_query_sec, &reset,
351 &deletes, &urls)); 343 &deletes, &urls));
352 EXPECT_FALSE(reset); 344 EXPECT_FALSE(reset);
353 EXPECT_EQ(0U, next_query_sec); 345 EXPECT_EQ(0U, next_query_sec);
354 EXPECT_TRUE(deletes.empty()); 346 EXPECT_TRUE(deletes.empty());
355 347
356 ASSERT_EQ(4U, urls.size()); 348 ASSERT_EQ(4U, urls.size());
357 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_1", 349 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_1",
358 urls[0].url); 350 urls[0].url);
359 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_2", 351 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_2",
360 urls[1].url); 352 urls[1].url);
361 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_3", 353 EXPECT_EQ("cache.googlevideo.com/safebrowsing/rd/goog-malware-shavar_s_3",
362 urls[2].url); 354 urls[2].url);
363 EXPECT_EQ("s.ytimg.com/safebrowsing/rd/goog-phish-shavar_a_8641-8800:" 355 EXPECT_EQ("s.ytimg.com/safebrowsing/rd/goog-phish-shavar_a_8641-8800:"
364 "8641-8689,8691-8731,8733-8786", 356 "8641-8689,8691-8731,8733-8786",
365 urls[3].url); 357 urls[3].url);
366 } 358 }
367 359
368 // Test parsing various SafeBrowsing protocol headers. 360 // Test parsing various SafeBrowsing protocol headers.
369 TEST(SafeBrowsingProtocolParsingTest, TestNextQueryTime) { 361 TEST(SafeBrowsingProtocolParsingTest, TestNextQueryTime) {
370 std::string headers("n:1800\ni:goog-white-shavar\n"); 362 std::string headers("n:1800\ni:goog-white-shavar\n");
371 size_t next_query_sec = 0; 363 size_t next_query_sec = 0;
372 bool reset = false; 364 bool reset = false;
373 std::vector<SBChunkDelete> deletes; 365 std::vector<SBChunkDelete> deletes;
374 std::vector<ChunkUrl> urls; 366 std::vector<ChunkUrl> urls;
375 EXPECT_TRUE(safe_browsing::ParseUpdate(headers.data(), headers.length(), 367 EXPECT_TRUE(ParseUpdate(headers.data(), headers.length(),
376 &next_query_sec, &reset, 368 &next_query_sec, &reset,
377 &deletes, &urls)); 369 &deletes, &urls));
378 370
379 EXPECT_EQ(1800U, next_query_sec); 371 EXPECT_EQ(1800U, next_query_sec);
380 EXPECT_FALSE(reset); 372 EXPECT_FALSE(reset);
381 EXPECT_TRUE(deletes.empty()); 373 EXPECT_TRUE(deletes.empty());
382 EXPECT_TRUE(urls.empty()); 374 EXPECT_TRUE(urls.empty());
383 } 375 }
384 376
385 // Test parsing data from a GetHashRequest 377 // Test parsing data from a GetHashRequest
386 TEST(SafeBrowsingProtocolParsingTest, TestGetHash) { 378 TEST(SafeBrowsingProtocolParsingTest, TestGetHash) {
387 const std::string get_hash(base::StringPrintf( 379 const std::string get_hash(base::StringPrintf(
388 "45\n" 380 "45\n"
389 "%s:32:3\n" 381 "%s:32:3\n"
390 "00112233445566778899aabbccddeeff" 382 "00112233445566778899aabbccddeeff"
391 "00001111222233334444555566667777" 383 "00001111222233334444555566667777"
392 "ffffeeeeddddccccbbbbaaaa99998888", 384 "ffffeeeeddddccccbbbbaaaa99998888",
393 kDefaultPhishList)); 385 kDefaultPhishList));
394 std::vector<SBFullHashResult> full_hashes; 386 std::vector<SBFullHashResult> full_hashes;
395 base::TimeDelta cache_lifetime; 387 base::TimeDelta cache_lifetime;
396 EXPECT_TRUE(safe_browsing::ParseGetHash(get_hash.data(), get_hash.length(), 388 EXPECT_TRUE(ParseGetHash(get_hash.data(), get_hash.length(), &cache_lifetime,
397 &cache_lifetime, &full_hashes)); 389 &full_hashes));
398 390
399 ASSERT_EQ(3U, full_hashes.size()); 391 ASSERT_EQ(3U, full_hashes.size());
400 EXPECT_EQ(memcmp(&full_hashes[0].hash, 392 EXPECT_EQ(memcmp(&full_hashes[0].hash,
401 "00112233445566778899aabbccddeeff", 393 "00112233445566778899aabbccddeeff",
402 sizeof(SBFullHash)), 0); 394 sizeof(SBFullHash)), 0);
403 EXPECT_EQ(safe_browsing::PHISH, full_hashes[0].list_id); 395 EXPECT_EQ(PHISH, full_hashes[0].list_id);
404 EXPECT_EQ(memcmp(&full_hashes[1].hash, 396 EXPECT_EQ(memcmp(&full_hashes[1].hash,
405 "00001111222233334444555566667777", 397 "00001111222233334444555566667777",
406 sizeof(SBFullHash)), 0); 398 sizeof(SBFullHash)), 0);
407 EXPECT_EQ(safe_browsing::PHISH, full_hashes[1].list_id); 399 EXPECT_EQ(PHISH, full_hashes[1].list_id);
408 EXPECT_EQ(memcmp(&full_hashes[2].hash, 400 EXPECT_EQ(memcmp(&full_hashes[2].hash,
409 "ffffeeeeddddccccbbbbaaaa99998888", 401 "ffffeeeeddddccccbbbbaaaa99998888",
410 sizeof(SBFullHash)), 0); 402 sizeof(SBFullHash)), 0);
411 EXPECT_EQ(safe_browsing::PHISH, full_hashes[2].list_id); 403 EXPECT_EQ(PHISH, full_hashes[2].list_id);
412 404
413 // Test multiple lists in the GetHash results. 405 // Test multiple lists in the GetHash results.
414 const std::string get_hash2(base::StringPrintf( 406 const std::string get_hash2(base::StringPrintf(
415 "45\n" 407 "45\n"
416 "%s:32:1\n" 408 "%s:32:1\n"
417 "00112233445566778899aabbccddeeff" 409 "00112233445566778899aabbccddeeff"
418 "%s:32:2\n" 410 "%s:32:2\n"
419 "cafebeefcafebeefdeaddeaddeaddead" 411 "cafebeefcafebeefdeaddeaddeaddead"
420 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss", 412 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss",
421 kDefaultPhishList, 413 kDefaultPhishList,
422 kDefaultMalwareList)); 414 kDefaultMalwareList));
423 EXPECT_TRUE(safe_browsing::ParseGetHash(get_hash2.data(), get_hash2.length(), 415 EXPECT_TRUE(ParseGetHash(get_hash2.data(), get_hash2.length(),
424 &cache_lifetime, &full_hashes)); 416 &cache_lifetime, &full_hashes));
425 417
426 ASSERT_EQ(3U, full_hashes.size()); 418 ASSERT_EQ(3U, full_hashes.size());
427 EXPECT_EQ(memcmp(&full_hashes[0].hash, 419 EXPECT_EQ(memcmp(&full_hashes[0].hash,
428 "00112233445566778899aabbccddeeff", 420 "00112233445566778899aabbccddeeff",
429 sizeof(SBFullHash)), 0); 421 sizeof(SBFullHash)), 0);
430 EXPECT_EQ(safe_browsing::PHISH, full_hashes[0].list_id); 422 EXPECT_EQ(PHISH, full_hashes[0].list_id);
431 EXPECT_EQ(memcmp(&full_hashes[1].hash, 423 EXPECT_EQ(memcmp(&full_hashes[1].hash,
432 "cafebeefcafebeefdeaddeaddeaddead", 424 "cafebeefcafebeefdeaddeaddeaddead",
433 sizeof(SBFullHash)), 0); 425 sizeof(SBFullHash)), 0);
434 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[1].list_id); 426 EXPECT_EQ(MALWARE, full_hashes[1].list_id);
435 EXPECT_EQ(memcmp(&full_hashes[2].hash, 427 EXPECT_EQ(memcmp(&full_hashes[2].hash,
436 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss", 428 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss",
437 sizeof(SBFullHash)), 0); 429 sizeof(SBFullHash)), 0);
438 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[2].list_id); 430 EXPECT_EQ(MALWARE, full_hashes[2].list_id);
439 431
440 // Test metadata parsing. 432 // Test metadata parsing.
441 const std::string get_hash3(base::StringPrintf( 433 const std::string get_hash3(base::StringPrintf(
442 "45\n" 434 "45\n"
443 "%s:32:2:m\n" 435 "%s:32:2:m\n"
444 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss" 436 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss"
445 "00112233445566778899aabbccddeeff" 437 "00112233445566778899aabbccddeeff"
446 "2\nab2\nxy" 438 "2\nab2\nxy"
447 "%s:32:1\n" 439 "%s:32:1\n"
448 "cafebeefcafebeefdeaddeaddeaddead", 440 "cafebeefcafebeefdeaddeaddeaddead",
449 kDefaultMalwareList, 441 kDefaultMalwareList,
450 kDefaultPhishList)); 442 kDefaultPhishList));
451 EXPECT_TRUE(safe_browsing::ParseGetHash(get_hash3.data(), get_hash3.length(), 443 EXPECT_TRUE(ParseGetHash(get_hash3.data(), get_hash3.length(),
452 &cache_lifetime, &full_hashes)); 444 &cache_lifetime, &full_hashes));
453 445
454 ASSERT_EQ(3U, full_hashes.size()); 446 ASSERT_EQ(3U, full_hashes.size());
455 EXPECT_EQ(memcmp(&full_hashes[0].hash, 447 EXPECT_EQ(memcmp(&full_hashes[0].hash,
456 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss", 448 "zzzzyyyyxxxxwwwwvvvvuuuuttttssss",
457 sizeof(SBFullHash)), 0); 449 sizeof(SBFullHash)), 0);
458 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[0].list_id); 450 EXPECT_EQ(MALWARE, full_hashes[0].list_id);
459 EXPECT_EQ(std::string("ab"), full_hashes[0].metadata); 451 EXPECT_EQ(std::string("ab"), full_hashes[0].metadata);
460 EXPECT_EQ(memcmp(&full_hashes[1].hash, 452 EXPECT_EQ(memcmp(&full_hashes[1].hash,
461 "00112233445566778899aabbccddeeff", 453 "00112233445566778899aabbccddeeff",
462 sizeof(SBFullHash)), 0); 454 sizeof(SBFullHash)), 0);
463 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[1].list_id); 455 EXPECT_EQ(MALWARE, full_hashes[1].list_id);
464 EXPECT_EQ(std::string("xy"), full_hashes[1].metadata); 456 EXPECT_EQ(std::string("xy"), full_hashes[1].metadata);
465 EXPECT_EQ(memcmp(&full_hashes[2].hash, 457 EXPECT_EQ(memcmp(&full_hashes[2].hash,
466 "cafebeefcafebeefdeaddeaddeaddead", 458 "cafebeefcafebeefdeaddeaddeaddead",
467 sizeof(SBFullHash)), 0); 459 sizeof(SBFullHash)), 0);
468 EXPECT_EQ(safe_browsing::PHISH, full_hashes[2].list_id); 460 EXPECT_EQ(PHISH, full_hashes[2].list_id);
469 EXPECT_EQ(std::string(), full_hashes[2].metadata); 461 EXPECT_EQ(std::string(), full_hashes[2].metadata);
470 } 462 }
471 463
472 TEST(SafeBrowsingProtocolParsingTest, TestGetHashWithUnknownList) { 464 TEST(SafeBrowsingProtocolParsingTest, TestGetHashWithUnknownList) {
473 std::string hash_response(base::StringPrintf( 465 std::string hash_response(base::StringPrintf(
474 "45\n" 466 "45\n"
475 "%s:32:1\n" 467 "%s:32:1\n"
476 "12345678901234567890123456789012" 468 "12345678901234567890123456789012"
477 "googpub-phish-shavar:32:1\n" 469 "googpub-phish-shavar:32:1\n"
478 "09876543210987654321098765432109", 470 "09876543210987654321098765432109",
479 kDefaultPhishList)); 471 kDefaultPhishList));
480 std::vector<SBFullHashResult> full_hashes; 472 std::vector<SBFullHashResult> full_hashes;
481 base::TimeDelta cache_lifetime; 473 base::TimeDelta cache_lifetime;
482 EXPECT_TRUE(safe_browsing::ParseGetHash(hash_response.data(), 474 EXPECT_TRUE(ParseGetHash(hash_response.data(), hash_response.size(),
483 hash_response.size(), 475 &cache_lifetime, &full_hashes));
484 &cache_lifetime,
485 &full_hashes));
486 476
487 ASSERT_EQ(1U, full_hashes.size()); 477 ASSERT_EQ(1U, full_hashes.size());
488 EXPECT_EQ(memcmp("12345678901234567890123456789012", 478 EXPECT_EQ(memcmp("12345678901234567890123456789012",
489 &full_hashes[0].hash, sizeof(SBFullHash)), 0); 479 &full_hashes[0].hash, sizeof(SBFullHash)), 0);
490 EXPECT_EQ(safe_browsing::PHISH, full_hashes[0].list_id); 480 EXPECT_EQ(PHISH, full_hashes[0].list_id);
491 481
492 hash_response += base::StringPrintf( 482 hash_response += base::StringPrintf(
493 "%s:32:1\n" 483 "%s:32:1\n"
494 "abcdefghijklmnopqrstuvwxyz123457", 484 "abcdefghijklmnopqrstuvwxyz123457",
495 kDefaultMalwareList); 485 kDefaultMalwareList);
496 full_hashes.clear(); 486 full_hashes.clear();
497 EXPECT_TRUE(safe_browsing::ParseGetHash(hash_response.data(), 487 EXPECT_TRUE(ParseGetHash(hash_response.data(), hash_response.size(),
498 hash_response.size(), 488 &cache_lifetime, &full_hashes));
499 &cache_lifetime,
500 &full_hashes));
501 489
502 EXPECT_EQ(2U, full_hashes.size()); 490 EXPECT_EQ(2U, full_hashes.size());
503 EXPECT_EQ(memcmp("12345678901234567890123456789012", 491 EXPECT_EQ(memcmp("12345678901234567890123456789012",
504 &full_hashes[0].hash, sizeof(SBFullHash)), 0); 492 &full_hashes[0].hash, sizeof(SBFullHash)), 0);
505 EXPECT_EQ(safe_browsing::PHISH, full_hashes[0].list_id); 493 EXPECT_EQ(PHISH, full_hashes[0].list_id);
506 EXPECT_EQ(memcmp("abcdefghijklmnopqrstuvwxyz123457", 494 EXPECT_EQ(memcmp("abcdefghijklmnopqrstuvwxyz123457",
507 &full_hashes[1].hash, sizeof(SBFullHash)), 0); 495 &full_hashes[1].hash, sizeof(SBFullHash)), 0);
508 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[1].list_id); 496 EXPECT_EQ(MALWARE, full_hashes[1].list_id);
509 } 497 }
510 498
511 TEST(SafeBrowsingProtocolParsingTest, TestGetHashWithUnknownListAndMetadata) { 499 TEST(SafeBrowsingProtocolParsingTest, TestGetHashWithUnknownListAndMetadata) {
512 std::vector<SBFullHashResult> full_hashes; 500 std::vector<SBFullHashResult> full_hashes;
513 base::TimeDelta cache_lifetime; 501 base::TimeDelta cache_lifetime;
514 // Test skipping over a hashentry with an unrecognized listname that also has 502 // Test skipping over a hashentry with an unrecognized listname that also has
515 // metadata. 503 // metadata.
516 const std::string get_hash3(base::StringPrintf( 504 const std::string get_hash3(base::StringPrintf(
517 "600\n" 505 "600\n"
518 "BADLISTNAME:32:1:m\n" 506 "BADLISTNAME:32:1:m\n"
519 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 507 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
520 "8\nMETADATA" 508 "8\nMETADATA"
521 "%s:32:1\n" 509 "%s:32:1\n"
522 "0123456789hashhashhashhashhashha", 510 "0123456789hashhashhashhashhashha",
523 kDefaultMalwareList)); 511 kDefaultMalwareList));
524 EXPECT_TRUE(safe_browsing::ParseGetHash(get_hash3.data(), get_hash3.length(), 512 EXPECT_TRUE(ParseGetHash(get_hash3.data(), get_hash3.length(),
525 &cache_lifetime, &full_hashes)); 513 &cache_lifetime, &full_hashes));
526 ASSERT_EQ(1U, full_hashes.size()); 514 ASSERT_EQ(1U, full_hashes.size());
527 EXPECT_EQ(memcmp(&full_hashes[0].hash, 515 EXPECT_EQ(memcmp(&full_hashes[0].hash,
528 "0123456789hashhashhashhashhashha", 516 "0123456789hashhashhashhashhashha",
529 sizeof(SBFullHash)), 0); 517 sizeof(SBFullHash)), 0);
530 EXPECT_EQ(safe_browsing::MALWARE, full_hashes[0].list_id); 518 EXPECT_EQ(MALWARE, full_hashes[0].list_id);
531 EXPECT_EQ(std::string(), full_hashes[0].metadata); 519 EXPECT_EQ(std::string(), full_hashes[0].metadata);
532 } 520 }
533 521
534 TEST(SafeBrowsingProtocolParsingTest, TestFormatHash) { 522 TEST(SafeBrowsingProtocolParsingTest, TestFormatHash) {
535 std::vector<SBPrefix> prefixes; 523 std::vector<SBPrefix> prefixes;
536 prefixes.push_back(0x34333231); 524 prefixes.push_back(0x34333231);
537 prefixes.push_back(0x64636261); 525 prefixes.push_back(0x64636261);
538 prefixes.push_back(0x73727170); 526 prefixes.push_back(0x73727170);
539 527
540 EXPECT_EQ("4:12\n1234abcdpqrs", safe_browsing::FormatGetHash(prefixes)); 528 EXPECT_EQ("4:12\n1234abcdpqrs", FormatGetHash(prefixes));
541 } 529 }
542 530
543 TEST(SafeBrowsingProtocolParsingTest, TestReset) { 531 TEST(SafeBrowsingProtocolParsingTest, TestReset) {
544 std::string update("n:1800\ni:phishy\nr:pleasereset\n"); 532 std::string update("n:1800\ni:phishy\nr:pleasereset\n");
545 533
546 bool reset = false; 534 bool reset = false;
547 size_t next_update = 0; 535 size_t next_update = 0;
548 std::vector<SBChunkDelete> deletes; 536 std::vector<SBChunkDelete> deletes;
549 std::vector<ChunkUrl> urls; 537 std::vector<ChunkUrl> urls;
550 EXPECT_TRUE(safe_browsing::ParseUpdate(update.data(), update.size(), 538 EXPECT_TRUE(ParseUpdate(update.data(), update.size(),
551 &next_update, &reset, 539 &next_update, &reset,
552 &deletes, &urls)); 540 &deletes, &urls));
553 EXPECT_TRUE(reset); 541 EXPECT_TRUE(reset);
554 } 542 }
555 543
556 // The SafeBrowsing service will occasionally send zero length chunks so that 544 // The SafeBrowsing service will occasionally send zero length chunks so that
557 // client requests will have longer contiguous chunk number ranges, and thus 545 // client requests will have longer contiguous chunk number ranges, and thus
558 // reduce the request size. 546 // reduce the request size.
559 TEST(SafeBrowsingProtocolParsingTest, TestZeroSizeAddChunk) { 547 TEST(SafeBrowsingProtocolParsingTest, TestZeroSizeAddChunk) {
560 const char kEmptyAddChunk[] = { 548 const char kEmptyAddChunk[] = {
561 '\0', '\0', '\0', '\x02', // 32-bit payload length in network byte order. 549 '\0', '\0', '\0', '\x02', // 32-bit payload length in network byte order.
562 '\x08', // field 1, wire format varint 550 '\x08', // field 1, wire format varint
563 '\x02', // chunk_number varint 2 551 '\x02', // chunk_number varint 2
564 }; 552 };
565 553
566 ScopedVector<SBChunkData> chunks; 554 ScopedVector<SBChunkData> chunks;
567 EXPECT_TRUE(safe_browsing::ParseChunk(kEmptyAddChunk, sizeof(kEmptyAddChunk), 555 EXPECT_TRUE(ParseChunk(kEmptyAddChunk, sizeof(kEmptyAddChunk), &chunks));
568 &chunks));
569 ASSERT_EQ(1U, chunks.size()); 556 ASSERT_EQ(1U, chunks.size());
570 EXPECT_EQ(2, chunks[0]->ChunkNumber()); 557 EXPECT_EQ(2, chunks[0]->ChunkNumber());
571 EXPECT_TRUE(chunks[0]->IsAdd()); 558 EXPECT_TRUE(chunks[0]->IsAdd());
572 EXPECT_FALSE(chunks[0]->IsSub()); 559 EXPECT_FALSE(chunks[0]->IsSub());
573 EXPECT_TRUE(chunks[0]->IsPrefix()); 560 EXPECT_TRUE(chunks[0]->IsPrefix());
574 EXPECT_FALSE(chunks[0]->IsFullHash()); 561 EXPECT_FALSE(chunks[0]->IsFullHash());
575 EXPECT_EQ(0U, chunks[0]->PrefixCount()); 562 EXPECT_EQ(0U, chunks[0]->PrefixCount());
576 563
577 // Now test a zero size chunk in between normal chunks. 564 // Now test a zero size chunk in between normal chunks.
578 chunks.clear(); 565 chunks.clear();
(...skipping 11 matching lines...) Expand all
590 '\x08', // field 1, wire format varint 577 '\x08', // field 1, wire format varint
591 '\x02', // chunk_number varint 2 578 '\x02', // chunk_number varint 2
592 579
593 '\0', '\0', '\0', '\x08', // 32-bit payload length in network byte order. 580 '\0', '\0', '\0', '\x08', // 32-bit payload length in network byte order.
594 '\x08', // field 1, wire format varint 581 '\x08', // field 1, wire format varint
595 '\x03', // chunk_number varint 3 582 '\x03', // chunk_number varint 3
596 '\x22', // field 4, wire format length-delimited 583 '\x22', // field 4, wire format length-delimited
597 '\x04', // varint length 8 584 '\x04', // varint length 8
598 'p', 'p', 'p', 'p', // 4-byte prefixes 585 'p', 'p', 'p', 'p', // 4-byte prefixes
599 }; 586 };
600 EXPECT_TRUE(safe_browsing::ParseChunk(kAddChunks, sizeof(kAddChunks), 587 EXPECT_TRUE(ParseChunk(kAddChunks, sizeof(kAddChunks), &chunks));
601 &chunks));
602 ASSERT_EQ(3U, chunks.size()); 588 ASSERT_EQ(3U, chunks.size());
603 589
604 EXPECT_EQ(1, chunks[0]->ChunkNumber()); 590 EXPECT_EQ(1, chunks[0]->ChunkNumber());
605 EXPECT_TRUE(chunks[0]->IsAdd()); 591 EXPECT_TRUE(chunks[0]->IsAdd());
606 EXPECT_FALSE(chunks[0]->IsSub()); 592 EXPECT_FALSE(chunks[0]->IsSub());
607 EXPECT_TRUE(chunks[0]->IsPrefix()); 593 EXPECT_TRUE(chunks[0]->IsPrefix());
608 EXPECT_FALSE(chunks[0]->IsFullHash()); 594 EXPECT_FALSE(chunks[0]->IsFullHash());
609 ASSERT_EQ(2U, chunks[0]->PrefixCount()); 595 ASSERT_EQ(2U, chunks[0]->PrefixCount());
610 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111 596 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111
611 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222 597 EXPECT_EQ(0x32323232U, chunks[0]->PrefixAt(1)); // 2222
(...skipping 18 matching lines...) Expand all
630 TEST(SafeBrowsingProtocolParsingTest, TestZeroSizeSubChunk) { 616 TEST(SafeBrowsingProtocolParsingTest, TestZeroSizeSubChunk) {
631 const char kEmptySubChunk[] = { 617 const char kEmptySubChunk[] = {
632 '\0', '\0', '\0', '\x04', // 32-bit payload length in network byte order. 618 '\0', '\0', '\0', '\x04', // 32-bit payload length in network byte order.
633 '\x08', // field 1, wire format varint 619 '\x08', // field 1, wire format varint
634 '\x02', // chunk_number varint 2 620 '\x02', // chunk_number varint 2
635 '\x10', // field 2, wire format varint 621 '\x10', // field 2, wire format varint
636 '\x01', // enum ChunkType == SUB 622 '\x01', // enum ChunkType == SUB
637 }; 623 };
638 624
639 ScopedVector<SBChunkData> chunks; 625 ScopedVector<SBChunkData> chunks;
640 EXPECT_TRUE(safe_browsing::ParseChunk(kEmptySubChunk, sizeof(kEmptySubChunk), 626 EXPECT_TRUE(ParseChunk(kEmptySubChunk, sizeof(kEmptySubChunk), &chunks));
641 &chunks));
642 ASSERT_EQ(1U, chunks.size()); 627 ASSERT_EQ(1U, chunks.size());
643 EXPECT_EQ(2, chunks[0]->ChunkNumber()); 628 EXPECT_EQ(2, chunks[0]->ChunkNumber());
644 EXPECT_FALSE(chunks[0]->IsAdd()); 629 EXPECT_FALSE(chunks[0]->IsAdd());
645 EXPECT_TRUE(chunks[0]->IsSub()); 630 EXPECT_TRUE(chunks[0]->IsSub());
646 EXPECT_TRUE(chunks[0]->IsPrefix()); 631 EXPECT_TRUE(chunks[0]->IsPrefix());
647 EXPECT_FALSE(chunks[0]->IsFullHash()); 632 EXPECT_FALSE(chunks[0]->IsFullHash());
648 EXPECT_EQ(0U, chunks[0]->PrefixCount()); 633 EXPECT_EQ(0U, chunks[0]->PrefixCount());
649 634
650 // Test parsing a zero sized sub chunk mixed in with content carrying chunks. 635 // Test parsing a zero sized sub chunk mixed in with content carrying chunks.
651 chunks.clear(); 636 chunks.clear();
(...skipping 23 matching lines...) Expand all
675 '\x10', // field 2, wire format varint 660 '\x10', // field 2, wire format varint
676 '\x01', // enum ChunkType == SUB 661 '\x01', // enum ChunkType == SUB
677 '\x22', // field 4, wire format length-delimited 662 '\x22', // field 4, wire format length-delimited
678 '\x04', // varint length 8 663 '\x04', // varint length 8
679 'p', 'p', 'p', 'p', // 4-byte prefix 664 'p', 'p', 'p', 'p', // 4-byte prefix
680 '\x2a', // field 5, wire format length-delimited 665 '\x2a', // field 5, wire format length-delimited
681 '\x01', // varint length 1 (1 add-chunk numbers) 666 '\x01', // varint length 1 (1 add-chunk numbers)
682 '\x0B', // varint 11 667 '\x0B', // varint 11
683 }; 668 };
684 669
685 EXPECT_TRUE(safe_browsing::ParseChunk(kSubChunks, sizeof(kSubChunks), 670 EXPECT_TRUE(ParseChunk(kSubChunks, sizeof(kSubChunks), &chunks));
686 &chunks));
687 ASSERT_EQ(3U, chunks.size()); 671 ASSERT_EQ(3U, chunks.size());
688 672
689 EXPECT_EQ(1, chunks[0]->ChunkNumber()); 673 EXPECT_EQ(1, chunks[0]->ChunkNumber());
690 EXPECT_FALSE(chunks[0]->IsAdd()); 674 EXPECT_FALSE(chunks[0]->IsAdd());
691 EXPECT_TRUE(chunks[0]->IsSub()); 675 EXPECT_TRUE(chunks[0]->IsSub());
692 EXPECT_TRUE(chunks[0]->IsPrefix()); 676 EXPECT_TRUE(chunks[0]->IsPrefix());
693 EXPECT_FALSE(chunks[0]->IsFullHash()); 677 EXPECT_FALSE(chunks[0]->IsFullHash());
694 ASSERT_EQ(2U, chunks[0]->PrefixCount()); 678 ASSERT_EQ(2U, chunks[0]->PrefixCount());
695 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111 679 EXPECT_EQ(0x31313131U, chunks[0]->PrefixAt(0)); // 1111
696 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0)); 680 EXPECT_EQ(7, chunks[0]->AddChunkNumberAt(0));
(...skipping 10 matching lines...) Expand all
707 EXPECT_EQ(3, chunks[2]->ChunkNumber()); 691 EXPECT_EQ(3, chunks[2]->ChunkNumber());
708 EXPECT_FALSE(chunks[0]->IsAdd()); 692 EXPECT_FALSE(chunks[0]->IsAdd());
709 EXPECT_TRUE(chunks[0]->IsSub()); 693 EXPECT_TRUE(chunks[0]->IsSub());
710 EXPECT_TRUE(chunks[2]->IsPrefix()); 694 EXPECT_TRUE(chunks[2]->IsPrefix());
711 EXPECT_FALSE(chunks[2]->IsFullHash()); 695 EXPECT_FALSE(chunks[2]->IsFullHash());
712 ASSERT_EQ(1U, chunks[2]->PrefixCount()); 696 ASSERT_EQ(1U, chunks[2]->PrefixCount());
713 EXPECT_EQ(0x70707070U, chunks[2]->PrefixAt(0)); // pppp 697 EXPECT_EQ(0x70707070U, chunks[2]->PrefixAt(0)); // pppp
714 EXPECT_EQ(11, chunks[2]->AddChunkNumberAt(0)); 698 EXPECT_EQ(11, chunks[2]->AddChunkNumberAt(0));
715 } 699 }
716 700
717 } // namespace 701 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/protocol_parser.cc ('k') | chrome/browser/safe_browsing/remote_database_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698