certificate_principal_pattern_unittest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/certificate_matching/certificate_principal_pattern.h"
  5. #include "base/values.h"
  6. #include "net/cert/x509_cert_types.h"
  7. #include "testing/gmock/include/gmock/gmock.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace certificate_matching {
  10. namespace {
  11. constexpr char kKeyCN[] = "CN";
  12. constexpr char kKeyL[] = "L";
  13. constexpr char kKeyO[] = "O";
  14. constexpr char kKeyOU[] = "OU";
  15. } // namespace
  16. TEST(CertificatePrincipalPatternTest, EmptyPattern) {
  17. CertificatePrincipalPattern pattern;
  18. EXPECT_TRUE(pattern.Empty());
  19. EXPECT_TRUE(pattern.Matches(net::CertPrincipal()));
  20. {
  21. net::CertPrincipal principal;
  22. principal.common_name = "CN";
  23. EXPECT_TRUE(pattern.Matches(principal));
  24. }
  25. }
  26. TEST(CertificatePrincipalPatternTest, MatchingOnlyCN) {
  27. CertificatePrincipalPattern pattern("CN" /* common_name */, "" /* locality */,
  28. "" /* organization */,
  29. "" /* organization_unit */);
  30. EXPECT_FALSE(pattern.Empty());
  31. EXPECT_FALSE(pattern.Matches(net::CertPrincipal()));
  32. {
  33. net::CertPrincipal principal;
  34. principal.common_name = "CN";
  35. EXPECT_TRUE(pattern.Matches(principal));
  36. }
  37. {
  38. net::CertPrincipal principal;
  39. principal.common_name = "CNIsWrong";
  40. EXPECT_FALSE(pattern.Matches(principal));
  41. }
  42. {
  43. net::CertPrincipal principal;
  44. principal.common_name = "CN";
  45. principal.locality_name = "NotRelevant";
  46. EXPECT_TRUE(pattern.Matches(principal));
  47. }
  48. }
  49. TEST(CertificatePrincipalPatternTest, MatchingEverything) {
  50. CertificatePrincipalPattern pattern(
  51. "CN" /* common_name */, "L" /* locality */, "O" /* organization */,
  52. "OU" /* organization_unit */);
  53. EXPECT_FALSE(pattern.Empty());
  54. // Matches an empty CertPrincipal
  55. EXPECT_FALSE(pattern.Matches(net::CertPrincipal()));
  56. net::CertPrincipal principal;
  57. principal.common_name = "CN";
  58. EXPECT_FALSE(pattern.Matches(principal));
  59. principal.locality_name = "L";
  60. EXPECT_FALSE(pattern.Matches(principal));
  61. principal.organization_names.push_back("O");
  62. EXPECT_FALSE(pattern.Matches(principal));
  63. principal.organization_unit_names.push_back("OU");
  64. EXPECT_TRUE(pattern.Matches(principal));
  65. // Additional entries in the lists don't cause matching to fail.
  66. principal.organization_names.insert(principal.organization_names.begin(),
  67. "Front");
  68. principal.organization_names.push_back("Back");
  69. principal.organization_unit_names.insert(
  70. principal.organization_unit_names.begin(), "Front");
  71. principal.organization_unit_names.push_back("Back");
  72. EXPECT_TRUE(pattern.Matches(principal));
  73. }
  74. TEST(CertificatePrincipalPatternTest, ParseFromNullptr) {
  75. CertificatePrincipalPattern pattern =
  76. CertificatePrincipalPattern::ParseFromOptionalDict(nullptr, kKeyCN, kKeyL,
  77. kKeyO, kKeyOU);
  78. EXPECT_TRUE(pattern.Empty());
  79. }
  80. TEST(CertificatePrincipalPatternTest, ParseFromEmptyDict) {
  81. base::Value::Dict dict_value;
  82. CertificatePrincipalPattern pattern =
  83. CertificatePrincipalPattern::ParseFromOptionalDict(&dict_value, kKeyCN,
  84. kKeyL, kKeyO, kKeyOU);
  85. EXPECT_TRUE(pattern.Empty());
  86. }
  87. TEST(CertificatePrincipalPatternTest, Parse) {
  88. base::Value::Dict dict_value;
  89. dict_value.Set(kKeyCN, "ValueCN");
  90. dict_value.Set(kKeyL, "ValueL");
  91. dict_value.Set(kKeyO, "ValueO");
  92. dict_value.Set(kKeyOU, "ValueOU");
  93. CertificatePrincipalPattern pattern =
  94. CertificatePrincipalPattern::ParseFromOptionalDict(&dict_value, kKeyCN,
  95. kKeyL, kKeyO, kKeyOU);
  96. EXPECT_FALSE(pattern.Empty());
  97. EXPECT_EQ("ValueCN", pattern.common_name());
  98. EXPECT_EQ("ValueL", pattern.locality());
  99. EXPECT_EQ("ValueO", pattern.organization());
  100. EXPECT_EQ("ValueOU", pattern.organization_unit());
  101. }
  102. } // namespace certificate_matching