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

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

Powered by Google App Engine
This is Rietveld 408576698