Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "net/der/parse_values.h" | 8 #include "net/der/parse_values.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 177 | 177 |
| 178 struct Uint64TestData { | 178 struct Uint64TestData { |
| 179 bool should_pass; | 179 bool should_pass; |
| 180 const uint8_t input[9]; | 180 const uint8_t input[9]; |
| 181 size_t length; | 181 size_t length; |
| 182 uint64_t expected_value; | 182 uint64_t expected_value; |
| 183 }; | 183 }; |
| 184 | 184 |
| 185 const Uint64TestData kUint64TestData[] = { | 185 const Uint64TestData kUint64TestData[] = { |
| 186 {true, {0x00}, 1, 0}, | 186 {true, {0x00}, 1, 0}, |
| 187 // This number fails because it is not a minimal representation. | |
| 188 {false, {0x00, 0x00}, 2, 0}, | |
| 187 {true, {0x01}, 1, 1}, | 189 {true, {0x01}, 1, 1}, |
| 188 {false, {0xFF}, 1, 0}, | 190 {false, {0xFF}, 1, 0}, |
| 189 {true, {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 8, INT64_MAX}, | 191 {true, {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 8, INT64_MAX}, |
| 192 {true, | |
| 193 {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, | |
| 194 9, | |
| 195 UINT64_MAX}, | |
| 196 // This number fails because it is negative. | |
| 197 {false, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 8, 0}, | |
| 190 {false, {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 8, 0}, | 198 {false, {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 8, 0}, |
| 191 {false, {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 9, 0}, | 199 {false, {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 9, 0}, |
| 192 {false, {0x00, 0x01}, 2, 1}, | 200 {false, {0x00, 0x01}, 2, 1}, |
| 193 {false, {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}, 9, 0}, | 201 {false, {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}, 9, 0}, |
| 194 {false, {0}, 0, 0}, | 202 {false, {0}, 0, 0}, |
|
nharper
2015/08/14 22:23:41
I noticed your ParseIntegerTestData initialization
eroman
2015/08/14 23:19:38
Done
| |
| 195 }; | 203 }; |
| 196 | 204 |
| 197 TEST(ParseValuesTest, ParseUint64) { | 205 TEST(ParseValuesTest, ParseUint64) { |
| 198 for (size_t i = 0; i < arraysize(kUint64TestData); i++) { | 206 for (size_t i = 0; i < arraysize(kUint64TestData); i++) { |
| 199 Uint64TestData test_case = kUint64TestData[i]; | 207 const Uint64TestData& test_case = kUint64TestData[i]; |
| 200 SCOPED_TRACE(i); | 208 SCOPED_TRACE(i); |
| 201 | 209 |
| 202 uint64_t result; | 210 uint64_t result; |
| 203 EXPECT_EQ(test_case.should_pass, | 211 EXPECT_EQ(test_case.should_pass, |
| 204 ParseUint64(Input(test_case.input, test_case.length), &result)); | 212 ParseUint64(Input(test_case.input, test_case.length), &result)); |
| 205 if (test_case.should_pass) | 213 if (test_case.should_pass) |
| 206 EXPECT_EQ(test_case.expected_value, result); | 214 EXPECT_EQ(test_case.expected_value, result); |
| 207 } | 215 } |
| 208 } | 216 } |
| 209 | 217 |
| 218 struct ParseIntegerTestData { | |
| 219 bool should_pass; | |
| 220 const uint8_t input[16]; | |
|
nharper
2015/08/14 22:23:41
Why 16? The maximum length used in those test case
eroman
2015/08/14 23:19:38
Done (no reason, just a consequence of copy-paste
| |
| 221 size_t length; | |
| 222 bool negative; | |
| 223 int length_difference; | |
| 224 }; | |
| 225 | |
| 226 const ParseIntegerTestData kParseIntegerTestData[] = { | |
| 227 // Empty input (invalid DER). | |
| 228 {false, {0x00}, 0}, | |
| 229 | |
| 230 // The correct encoding for zero. | |
| 231 {true, {0x00}, 1, false}, | |
| 232 | |
| 233 // Invalid representation of zero (not minimal) | |
| 234 {false, {0x00, 0x00}, 2}, | |
| 235 | |
| 236 // Valid single byte negative numbers. | |
| 237 {true, {0x80}, 1, true}, | |
| 238 {true, {0xFF}, 1, true}, | |
| 239 | |
| 240 // Non-minimal negative number. | |
| 241 {false, {0xFF, 0x80}, 2}, | |
| 242 | |
| 243 // Positive number with a legitimate leading zero. | |
| 244 {true, {0x00, 0x80}, 2, false, -1}, | |
| 245 | |
| 246 // A legitimate negative number that starts with FF (MSB of second byte is | |
| 247 // 0 so OK). | |
| 248 {true, {0xFF, 0x7F}, 2, true}, | |
| 249 }; | |
| 250 | |
| 251 TEST(ParseValuesTest, ParseInteger) { | |
| 252 for (size_t i = 0; i < arraysize(kParseIntegerTestData); i++) { | |
| 253 const ParseIntegerTestData& test_case = kParseIntegerTestData[i]; | |
| 254 SCOPED_TRACE(i); | |
| 255 | |
| 256 bool negative; | |
| 257 size_t numeric_length; | |
| 258 EXPECT_EQ(test_case.should_pass, | |
| 259 ParseInteger(Input(test_case.input, test_case.length), &negative, | |
| 260 &numeric_length)); | |
| 261 if (test_case.should_pass) { | |
| 262 EXPECT_EQ(test_case.negative, negative); | |
| 263 EXPECT_EQ(test_case.length + test_case.length_difference, numeric_length); | |
| 264 } | |
| 265 } | |
| 266 } | |
| 267 | |
| 210 // Tests parsing an empty BIT STRING. | 268 // Tests parsing an empty BIT STRING. |
| 211 TEST(ParseValuesTest, ParseBitStringEmptyNoUnusedBits) { | 269 TEST(ParseValuesTest, ParseBitStringEmptyNoUnusedBits) { |
| 212 const uint8_t kData[] = {0x00}; | 270 const uint8_t kData[] = {0x00}; |
| 213 | 271 |
| 214 BitString bit_string; | 272 BitString bit_string; |
| 215 ASSERT_TRUE(ParseBitString(Input(kData), &bit_string)); | 273 ASSERT_TRUE(ParseBitString(Input(kData), &bit_string)); |
| 216 | 274 |
| 217 EXPECT_EQ(0u, bit_string.unused_bits()); | 275 EXPECT_EQ(0u, bit_string.unused_bits()); |
| 218 EXPECT_EQ(0u, bit_string.bytes().Length()); | 276 EXPECT_EQ(0u, bit_string.bytes().Length()); |
| 219 } | 277 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 252 TEST(ParseValuesTest, ParseBitStringSevenOneBitsUnusedBitIsOne) { | 310 TEST(ParseValuesTest, ParseBitStringSevenOneBitsUnusedBitIsOne) { |
| 253 const uint8_t kData[] = {0x01, 0xFF}; | 311 const uint8_t kData[] = {0x01, 0xFF}; |
| 254 | 312 |
| 255 BitString bit_string; | 313 BitString bit_string; |
| 256 EXPECT_FALSE(ParseBitString(Input(kData), &bit_string)); | 314 EXPECT_FALSE(ParseBitString(Input(kData), &bit_string)); |
| 257 } | 315 } |
| 258 | 316 |
| 259 } // namespace test | 317 } // namespace test |
| 260 } // namespace der | 318 } // namespace der |
| 261 } // namespace net | 319 } // namespace net |
| OLD | NEW |