| Index: net/cert/internal/verify_name_match_unittest.cc
|
| diff --git a/net/cert/internal/verify_name_match_unittest.cc b/net/cert/internal/verify_name_match_unittest.cc
|
| index d6dc3884dcbb513513b7b0f47aef2249fbeb394d..2bdf82efb68bcf9118e76234f8fab125c6958259 100644
|
| --- a/net/cert/internal/verify_name_match_unittest.cc
|
| +++ b/net/cert/internal/verify_name_match_unittest.cc
|
| @@ -7,27 +7,11 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "net/cert/internal/test_helpers.h"
|
| -#include "net/der/input.h"
|
| -#include "net/der/parser.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace net {
|
| namespace {
|
|
|
| -der::Input SequenceValueFromString(const std::string* s) {
|
| - der::Parser parser(InputFromString(s));
|
| - der::Input data;
|
| - if (!parser.ReadTag(der::kSequence, &data)) {
|
| - ADD_FAILURE();
|
| - return der::Input();
|
| - }
|
| - if (parser.HasMore()) {
|
| - ADD_FAILURE();
|
| - return der::Input();
|
| - }
|
| - return data;
|
| -}
|
| -
|
| // Loads test data from file. The filename is constructed from the parameters:
|
| // |prefix| describes the type of data being tested, e.g. "ascii",
|
| // "unicode_bmp", "unicode_supplementary", and "invalid".
|
| @@ -232,6 +216,58 @@ TEST_P(VerifyNameMatchDifferingTypesTest, NormalizableTypesAreEqual) {
|
| }
|
| }
|
|
|
| +TEST_P(VerifyNameMatchDifferingTypesTest, NormalizableTypesInSubtrees) {
|
| + std::string der_1;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_1(), "unmangled", &der_1));
|
| + std::string der_1_extra_rdn;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_1(), "unmangled-extra_rdn",
|
| + &der_1_extra_rdn));
|
| + std::string der_1_extra_attr;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_1(), "unmangled-extra_attr",
|
| + &der_1_extra_attr));
|
| + std::string der_2;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_2(), "unmangled", &der_2));
|
| + std::string der_2_extra_rdn;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_2(), "unmangled-extra_rdn",
|
| + &der_2_extra_rdn));
|
| + std::string der_2_extra_attr;
|
| + ASSERT_TRUE(LoadTestData("ascii", value_type_2(), "unmangled-extra_attr",
|
| + &der_2_extra_attr));
|
| +
|
| + if (TypesAreComparable(value_type_1(), value_type_2())) {
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
|
| + SequenceValueFromString(&der_2)));
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
|
| + SequenceValueFromString(&der_1)));
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_rdn),
|
| + SequenceValueFromString(&der_2)));
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_rdn),
|
| + SequenceValueFromString(&der_1)));
|
| + } else {
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
|
| + SequenceValueFromString(&der_2)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
|
| + SequenceValueFromString(&der_1)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_rdn),
|
| + SequenceValueFromString(&der_2)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_rdn),
|
| + SequenceValueFromString(&der_1)));
|
| + }
|
| +
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
|
| + SequenceValueFromString(&der_2_extra_rdn)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
|
| + SequenceValueFromString(&der_1_extra_rdn)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1_extra_attr),
|
| + SequenceValueFromString(&der_2)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2_extra_attr),
|
| + SequenceValueFromString(&der_1)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_1),
|
| + SequenceValueFromString(&der_2_extra_attr)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&der_2),
|
| + SequenceValueFromString(&der_1_extra_attr)));
|
| +}
|
| +
|
| // Runs VerifyNameMatchDifferingTypesTest for all combinations of value types in
|
| // value_type1 and value_type_2.
|
| INSTANTIATE_TEST_CASE_P(InstantiationName,
|
| @@ -459,4 +495,36 @@ TEST(VerifyNameMatchRDNSorting, DuplicateTypes) {
|
| SequenceValueFromString(&a)));
|
| }
|
|
|
| +TEST(VerifyNameInSubtreeInvalidDataTest, FailOnEmptyRdn) {
|
| + std::string valid;
|
| + ASSERT_TRUE(LoadTestData("ascii", "PRINTABLESTRING", "unmangled", &valid));
|
| + std::string invalid;
|
| + ASSERT_TRUE(LoadTestData("invalid", "RDN", "empty", &invalid));
|
| + // For both |name| and |parent|, a RelativeDistinguishedName must have at
|
| + // least one AttributeTypeAndValue.
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&valid),
|
| + SequenceValueFromString(&invalid)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&invalid),
|
| + SequenceValueFromString(&valid)));
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&invalid),
|
| + SequenceValueFromString(&invalid)));
|
| +}
|
| +
|
| +TEST(VerifyNameInSubtreeTest, EmptyNameMatching) {
|
| + std::string empty;
|
| + ASSERT_TRUE(LoadTestData("valid", "Name", "empty", &empty));
|
| + std::string non_empty;
|
| + ASSERT_TRUE(
|
| + LoadTestData("ascii", "PRINTABLESTRING", "unmangled", &non_empty));
|
| + // Empty name is in the subtree defined by empty name.
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&empty),
|
| + SequenceValueFromString(&empty)));
|
| + // Any non-empty name is in the subtree defined by empty name.
|
| + EXPECT_TRUE(VerifyNameInSubtree(SequenceValueFromString(&non_empty),
|
| + SequenceValueFromString(&empty)));
|
| + // Empty name is not in the subtree defined by non-empty name.
|
| + EXPECT_FALSE(VerifyNameInSubtree(SequenceValueFromString(&empty),
|
| + SequenceValueFromString(&non_empty)));
|
| +}
|
| +
|
| } // namespace net
|
|
|