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

Side by Side Diff: components/safe_browsing_db/v4_rice_unittest.cc

Issue 2228393003: PVer4: DecodeHashes needs to sort the output of the Rice decoder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@01_checksum
Patch Set: Fix the test to expect sorted list of hashes from DecodeBytes Created 4 years, 4 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/safe_browsing_db/v4_rice.h" 5 #include "components/safe_browsing_db/v4_rice.h"
6 #include "testing/platform_test.h" 6 #include "testing/platform_test.h"
7 7
8 using ::google::protobuf::RepeatedField; 8 using ::google::protobuf::RepeatedField;
9 using ::google::protobuf::int32; 9 using ::google::protobuf::int32;
10 10
11 namespace safe_browsing { 11 namespace safe_browsing {
12 12
13 class V4RiceTest : public PlatformTest { 13 class V4RiceTest : public PlatformTest {
14 public: 14 public:
15 V4RiceTest() {} 15 V4RiceTest() {}
16
17 struct RiceDecodingTestInfo {
18 uint32_t rice_parameter;
19 std::vector<uint32_t> expected_values;
20 std::string encoded_string;
21
22 RiceDecodingTestInfo(const uint32_t in_rice_parameter,
23 const std::vector<uint32_t>& in_expected_values,
24 const std::string& in_encoded_string) {
25 rice_parameter = in_rice_parameter;
26 expected_values = in_expected_values;
27 encoded_string = in_encoded_string;
28 }
29 };
30
31 void VerifyRiceDecoding(const RiceDecodingTestInfo& test_info) {
32 const uint32_t num_entries = test_info.expected_values.size();
33 V4RiceDecoder decoder(test_info.rice_parameter, num_entries,
34 test_info.encoded_string);
35 uint32_t word;
36 for (const auto& expected : test_info.expected_values) {
37 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word));
38 EXPECT_EQ(expected, word);
39 }
40 EXPECT_FALSE(decoder.HasAnotherValue());
41 }
16 }; 42 };
17 43
18 TEST_F(V4RiceTest, TestDecoderGetNextWordWithNoData) { 44 TEST_F(V4RiceTest, TestDecoderGetNextWordWithNoData) {
19 uint32_t word; 45 uint32_t word;
20 V4RiceDecoder decoder(5, 1, ""); 46 V4RiceDecoder decoder(5, 1, "");
21 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextWord(&word)); 47 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextWord(&word));
22 } 48 }
23 49
24 TEST_F(V4RiceTest, TestDecoderGetNextBitsWithNoData) { 50 TEST_F(V4RiceTest, TestDecoderGetNextBitsWithNoData) {
25 uint32_t word; 51 uint32_t word;
26 V4RiceDecoder decoder(5, 1, ""); 52 V4RiceDecoder decoder(5, 1, "");
27 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextBits(1, &word)); 53 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextBits(1, &word));
28 } 54 }
29 55
30 TEST_F(V4RiceTest, TestDecoderGetNextValueWithNoData) { 56 TEST_F(V4RiceTest, TestDecoderGetNextValueWithNoData) {
31 uint32_t word; 57 uint32_t word;
32 V4RiceDecoder decoder(5, 1, ""); 58 V4RiceDecoder decoder(5, 1, "");
33 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextValue(&word)); 59 EXPECT_EQ(DECODE_RAN_OUT_OF_BITS_FAILURE, decoder.GetNextValue(&word));
34 } 60 }
35 61
36 TEST_F(V4RiceTest, TestDecoderGetNextValueWithNoEntries) { 62 TEST_F(V4RiceTest, TestDecoderGetNextValueWithNoEntries) {
37 uint32_t word; 63 uint32_t word;
38 V4RiceDecoder decoder(28, 0, "\xbf\xa8"); 64 V4RiceDecoder decoder(28, 0, "\xbf\xa8");
39 EXPECT_FALSE(decoder.HasAnotherValue()); 65 EXPECT_FALSE(decoder.HasAnotherValue());
40 EXPECT_EQ(DECODE_NO_MORE_ENTRIES_FAILURE, decoder.GetNextValue(&word)); 66 EXPECT_EQ(DECODE_NO_MORE_ENTRIES_FAILURE, decoder.GetNextValue(&word));
41 } 67 }
42 68
43 TEST_F(V4RiceTest, TestDecoderGetNextValueWithSmallValues) { 69 TEST_F(V4RiceTest, TestDecoderGetNextValueWithInterestingValues) {
44 uint32_t word; 70 // These values are interesting because they match the unit test
45 V4RiceDecoder decoder(2, 2, "\xf7\x2"); 71 // values used within Google to this test this code in other
46 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word)); 72 // components, such as the SafeBrowsing service itself.
47 EXPECT_EQ(15u, word);
48 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word));
49 EXPECT_EQ(9u, word);
50 EXPECT_FALSE(decoder.HasAnotherValue());
51 }
52 73
53 TEST_F(V4RiceTest, TestDecoderGetNextValueWithLargeValues) { 74 std::vector<RiceDecodingTestInfo> test_inputs = {
54 uint32_t word; 75 RiceDecodingTestInfo(2, {15, 9}, "\xf7\x2"),
55 V4RiceDecoder decoder(28, 3, 76 RiceDecodingTestInfo(
56 "\xbf\xa8\x3f\xfb\xfc\xfb\x5e\x27\xe6\xc3\x1d\xc6\x38"); 77 28, {1777762129, 2093280223, 924369848},
57 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word)); 78 "\xbf\xa8\x3f\xfb\xfc\xfb\x5e\x27\xe6\xc3\x1d\xc6\x38"),
58 EXPECT_EQ(1777762129u, word); 79 RiceDecodingTestInfo(
59 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word)); 80 28, {62763050, 1046523781, 192522171, 1800511020, 4442775, 582142548},
60 EXPECT_EQ(2093280223u, word); 81 "\x54\x60\x7b\xe7\x0a\x5f\xc1\xdc\xee\x69\xde"
61 EXPECT_EQ(DECODE_SUCCESS, decoder.GetNextValue(&word)); 82 "\xfe\x58\x3c\xa3\xd6\xa5\xf2\x10\x8c\x4a\x59"
62 EXPECT_EQ(924369848u, word); 83 "\x56\x00"),
63 EXPECT_FALSE(decoder.HasAnotherValue()); 84 RiceDecodingTestInfo(
85 28, {26067715, 344823336, 8420095, 399843890, 95029378, 731622412,
86 35811335, 1047558127, 1117722715, 78698892},
87 "\x06\x86\x1b\x23\x14\xcb\x46\xf2\xaf\x07\x08\xc9\x88\x54\x1f\x41\x04"
88 "\xd5\x1a\x03\xeb\xe6\x3a\x80\x13\x91\x7b\xbf\x83\xf3\xb7\x85\xf1\x29"
89 "\x18\xb3\x61\x09"),
90 RiceDecodingTestInfo(
91 27, {225846818, 328287420, 166748623, 29117720, 552397365, 350353215,
92 558267528, 4738273, 567093445, 28563065, 55077698, 73091685,
93 339246010, 98242620, 38060941, 63917830, 206319759, 137700744},
94 "\x89\x98\xd8\x75\xbc\x44\x91\xeb\x39\x0c\x3e\x30\x9a\x78\xf3\x6a\xd4"
95 "\xd9\xb1\x9f\xfb\x70\x3e\x44\x3e\xa3\x08\x67\x42\xc2\x2b\x46\x69\x8e"
96 "\x3c\xeb\xd9\x10\x5a\x43\x9a\x32\xa5\x2d\x4e\x77\x0f\x87\x78\x20\xb6"
97 "\xab\x71\x98\x48\x0c\x9e\x9e\xd7\x23\x0c\x13\x43\x2c\xa9\x01"),
98 RiceDecodingTestInfo(
99 28, {339784008, 263128563, 63871877, 69723256, 826001074, 797300228,
100 671166008, 207712688},
101 std::string("\x21\xc5\x02\x91\xf9\x82\xd7\x57\xb8\xe9\x3c\xf0\xc8\x4f"
102 "\xe8\x64\x8d\x77\x62\x04\xd6\x85\x3f\x1c\x97\x00\x04\x1b"
103 "\x17\xc6",
104 30)),
105 RiceDecodingTestInfo(
106 28, {471820069, 196333855, 855579133, 122737976, 203433838, 85354544,
107 1307949392, 165938578, 195134475, 553930435, 49231136},
108 "\x95\x9c\x7d\xb0\x8f\xe8\xd9\xbd\xfe\x8c\x7f\x81\x53\x0d\x75\xdc\x4e"
109 "\x40\x18\x0c\x9a\x45\x3d\xa8\xdc\xfa\x26\x59\x40\x9e\x16\x08\x43\x77"
110 "\xc3\x4e\x04\x01\xa4\xe6\x5d\x00"),
111 RiceDecodingTestInfo(
112 27, {87336845, 129291033, 30906211, 433549264, 30899891, 53207875,
113 11959529, 354827862, 82919275, 489637251, 53561020, 336722992,
114 408117728, 204506246, 188216092, 9047110, 479817359, 230317256},
115 "\x1a\x4f\x69\x2a\x63\x9a\xf6\xc6\x2e\xaf\x73\xd0\x6f\xd7\x31\xeb\x77"
116 "\x1d\x43\xe3\x2b\x93\xce\x67\x8b\x59\xf9\x98\xd4\xda\x4f\x3c\x6f\xb0"
117 "\xe8\xa5\x78\x8d\x62\x36\x18\xfe\x08\x1e\x78\xd8\x14\x32\x24\x84\x61"
118 "\x1c\xf3\x37\x63\xc4\xa0\x88\x7b\x74\xcb\x64\xc8\x5c\xba\x05"),
119 RiceDecodingTestInfo(
120 28, {297968956, 19709657, 259702329, 76998112, 1023176123, 29296013,
121 1602741145, 393745181, 177326295, 55225536, 75194472},
122 "\xf1\x94\x0a\x87\x6c\x5f\x96\x90\xe3\xab\xf7\xc0\xcb\x2d\xe9\x76\xdb"
123 "\xf8\x59\x63\xc1\x6f\x7c\x99\xe3\x87\x5f\xc7\x04\xde\xb9\x46\x8e\x54"
124 "\xc0\xac\x4a\x03\x0d\x6c\x8f\x00"),
125 RiceDecodingTestInfo(
126 28, {532220688, 780594691, 436816483, 163436269, 573044456, 1069604,
127 39629436, 211410997, 227714491, 381562898, 75610008, 196754597,
128 40310339, 15204118, 99010842},
129 "\x41\x2c\xe4\xfe\x06\xdc\x0d\xbd\x31\xa5\x04\xd5\x6e\xdd\x9b\x43\xb7"
130 "\x3f\x11\x24\x52\x10\x80\x4f\x96\x4b\xd4\x80\x67\xb2\xdd\x52\xc9\x4e"
131 "\x02\xc6\xd7\x60\xde\x06\x92\x52\x1e\xdd\x35\x64\x71\x26\x2c\xfe\xcf"
132 "\x81\x46\xb2\x79\x01"),
133 RiceDecodingTestInfo(
134 28, {219354713, 389598618, 750263679, 554684211, 87381124, 4523497,
135 287633354, 801308671, 424169435, 372520475, 277287849},
136 "\xb2\x2c\x26\x3a\xcd\x66\x9c\xdb\x5f\x07\x2e\x6f\xe6\xf9\x21\x10\x52"
137 "\xd5\x94\xf4\x82\x22\x48\xf9\x9d\x24\xf6\xff\x2f\xfc\x6d\x3f\x21\x65"
138 "\x1b\x36\x34\x56\xea\xc4\x21\x00"),
139 };
140
141 for (const auto& it : test_inputs) {
142 VerifyRiceDecoding(it);
Nathan Parker 2016/08/12 23:01:49 If this fails, will it tell you which test cast fa
vakh (use Gerrit instead) 2016/08/13 00:15:14 It'll grok what did not match and I can then grep
Scott Hess - ex-Googler 2016/08/15 21:18:15 It seems unlikely that the logged output will matc
vakh (use Gerrit instead) 2016/08/16 00:23:02 I changed one of the values and the produced error
143 }
64 } 144 }
65 145
66 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) 146 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
67 // This test hits a NOTREACHED so it is a release mode only test. 147 // This test hits a NOTREACHED so it is a release mode only test.
68 TEST_F(V4RiceTest, TestDecoderIntegersWithNoData) { 148 TEST_F(V4RiceTest, TestDecoderIntegersWithNoData) {
69 RepeatedField<int32> out; 149 RepeatedField<int32> out;
70 EXPECT_EQ(ENCODED_DATA_UNEXPECTED_EMPTY_FAILURE, 150 EXPECT_EQ(ENCODED_DATA_UNEXPECTED_EMPTY_FAILURE,
71 V4RiceDecoder::DecodeIntegers(3, 5, 1, "", &out)); 151 V4RiceDecoder::DecodeIntegers(3, 5, 1, "", &out));
72 } 152 }
73 #endif 153 #endif
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 EXPECT_EQ(std::string("\x11\0\0\0", 4), out); 247 EXPECT_EQ(std::string("\x11\0\0\0", 4), out);
168 } 248 }
169 249
170 TEST_F(V4RiceTest, TestDecoderBytesWithMultipleValues) { 250 TEST_F(V4RiceTest, TestDecoderBytesWithMultipleValues) {
171 std::string out; 251 std::string out;
172 EXPECT_EQ(DECODE_SUCCESS, 252 EXPECT_EQ(DECODE_SUCCESS,
173 V4RiceDecoder::DecodeBytes( 253 V4RiceDecoder::DecodeBytes(
174 5, 28, 3, "\xbf\xa8\x3f\xfb\xf\xf\x5e\x27\xe6\xc3\x1d\xc6\x38", 254 5, 28, 3, "\xbf\xa8\x3f\xfb\xf\xf\x5e\x27\xe6\xc3\x1d\xc6\x38",
175 &out)); 255 &out));
176 EXPECT_EQ(16u, out.size()); 256 EXPECT_EQ(16u, out.size());
177 EXPECT_EQ(std::string("\x5\0\0\0V\x7F\xF6o\xCEo1\x81\fL\x93\xAD", 16), out); 257 EXPECT_EQ(std::string("\x5\0\0\0\fL\x93\xADV\x7F\xF6o\xCEo1\x81", 16), out);
Nathan Parker 2016/08/12 23:01:49 How did you generate this? (or was it just based o
vakh (use Gerrit instead) 2016/08/13 00:15:14 Got the input from a unit test for the server. Ver
178 } 258 }
179 259
180 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) 260 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
181 // This test hits a NOTREACHED so it is a release mode only test. 261 // This test hits a NOTREACHED so it is a release mode only test.
182 TEST_F(V4RiceTest, TestDecoderBytesWithOverflowValues) { 262 TEST_F(V4RiceTest, TestDecoderBytesWithOverflowValues) {
183 std::string out; 263 std::string out;
184 EXPECT_EQ(DECODED_INTEGER_OVERFLOW_FAILURE, 264 EXPECT_EQ(DECODED_INTEGER_OVERFLOW_FAILURE,
185 V4RiceDecoder::DecodeBytes( 265 V4RiceDecoder::DecodeBytes(
186 5, 28, 3, 266 5, 28, 3,
187 "\xbf\xa8\x3f\xfb\xfc\xfb\x5e\x27\xe6\xc3\x1d\xc6\x38", &out)); 267 "\xbf\xa8\x3f\xfb\xfc\xfb\x5e\x27\xe6\xc3\x1d\xc6\x38", &out));
188 } 268 }
189 #endif 269 #endif
190 270
191 } // namespace safe_browsing 271 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698