| 10 | BOOST_AUTO_TEST_SUITE(remote_httputility) |
| 11 | |
| 12 | BOOST_AUTO_TEST_CASE(IsValidHeaderName) |
| 13 | { |
| 14 | // Use string_view literals (""sv) to allow test inputs containing '\0'. |
| 15 | using namespace std::string_view_literals; |
| 16 | |
| 17 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("Host"sv), true); |
| 18 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("X-Powered-By"sv), true); |
| 19 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("Content-Security-Policy"sv), true); |
| 20 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("Strict-Transport-Security"sv), true); |
| 21 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("lowercase-is-fine-too"sv), true); |
| 22 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("everything-from-the-spec-!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"sv), true); |
| 23 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("-this-seems-to-be-allowed-too-"sv), true); |
| 24 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("~http~is~weird~"sv), true); |
| 25 | |
| 26 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName(""sv /* empty header name is invalid */), false); |
| 27 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("spaces are not allowed"sv), false); |
| 28 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("tabs\tare\tnot\tallowed"sv), false); |
| 29 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("nul-is-bad\0"sv), false); |
| 30 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("del-is-bad\x7f"sv), false); |
| 31 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("non-ascii-is-bad\x80"sv), false); |
| 32 | BOOST_CHECK_EQUAL(HttpUtility::IsValidHeaderName("non-ascii-is-bad\xff"sv), false); |
| 33 | } |
| 34 | |
| 35 | BOOST_AUTO_TEST_CASE(IsValidHeaderValue) |
| 36 | { |