Adds HeaderValidator unit tests for valid and invalid path characters.

PiperOrigin-RevId: 535301294
diff --git a/quiche/http2/adapter/header_validator_test.cc b/quiche/http2/adapter/header_validator_test.cc
index 3dfbd96..6aaf974 100644
--- a/quiche/http2/adapter/header_validator_test.cc
+++ b/quiche/http2/adapter/header_validator_test.cc
@@ -446,6 +446,43 @@
     }
   }
   EXPECT_FALSE(v.FinishHeaderBlock(HeaderType::REQUEST));
+
+  // Various valid path characters.
+  for (const absl::string_view c :
+       {"/", "?", "_", "'", "9", "&", "(", "@", ":"}) {
+    const std::string value = absl::StrCat("/shawa", c, "rma");
+
+    HeaderValidator validator;
+    validator.StartHeaderBlock();
+    for (Header to_add : kSampleRequestPseudoheaders) {
+      if (to_add.first == ":path") {
+        EXPECT_EQ(HeaderValidator::HEADER_OK,
+                  validator.ValidateSingleHeader(to_add.first, value));
+      } else {
+        EXPECT_EQ(HeaderValidator::HEADER_OK,
+                  validator.ValidateSingleHeader(to_add.first, to_add.second));
+      }
+    }
+    EXPECT_TRUE(validator.FinishHeaderBlock(HeaderType::REQUEST));
+  }
+
+  // BUG: Various invalid path characters.
+  for (const absl::string_view c : {"[", "<", "}", "`", "\\", " ", "\t"}) {
+    const std::string value = absl::StrCat("/shawa", c, "rma");
+
+    HeaderValidator validator;
+    validator.StartHeaderBlock();
+    for (Header to_add : kSampleRequestPseudoheaders) {
+      if (to_add.first == ":path") {
+        EXPECT_EQ(HeaderValidator::HEADER_OK,
+                  validator.ValidateSingleHeader(to_add.first, value));
+      } else {
+        EXPECT_EQ(HeaderValidator::HEADER_OK,
+                  validator.ValidateSingleHeader(to_add.first, to_add.second));
+      }
+    }
+    EXPECT_TRUE(validator.FinishHeaderBlock(HeaderType::REQUEST));
+  }
 }
 
 TEST(HeaderValidatorTest, ResponsePseudoHeaders) {