diff --git a/httplib.h b/httplib.h index 68a8a58..730fbc6 100644 --- a/httplib.h +++ b/httplib.h @@ -3555,7 +3555,8 @@ inline bool load_system_certs_on_windows(X509_STORE *store) { if (!hStore) { return false; } PCCERT_CONTEXT pContext = NULL; - while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != nullptr) { + while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != + nullptr) { auto encoded_cert = static_cast(pContext->pbCertEncoded); diff --git a/test/test.cc b/test/test.cc index 69ce410..ad43f53 100644 --- a/test/test.cc +++ b/test/test.cc @@ -59,19 +59,18 @@ TEST(EncodeQueryParamTest, ParseReservedCharactersTest) { "%3B%2C%2F%3F%3A%40%26%3D%2B%24"); } -TEST(EncodeQueryParamTest, TestUTF8Characters){ +TEST(EncodeQueryParamTest, TestUTF8Characters) { string chineseCharacters = "中国語"; string russianCharacters = "дом"; string brazilianCharacters = "óculos"; EXPECT_EQ(detail::encode_query_param(chineseCharacters), - "%E4%B8%AD%E5%9B%BD%E8%AA%9E"); + "%E4%B8%AD%E5%9B%BD%E8%AA%9E"); EXPECT_EQ(detail::encode_query_param(russianCharacters), - "%D0%B4%D0%BE%D0%BC"); + "%D0%B4%D0%BE%D0%BC"); - EXPECT_EQ(detail::encode_query_param(brazilianCharacters), - "%C3%B3culos"); + EXPECT_EQ(detail::encode_query_param(brazilianCharacters), "%C3%B3culos"); } TEST(TrimTests, TrimStringTests) { @@ -3150,7 +3149,7 @@ TEST(ExceptionTest, ThrowExceptionInHandler) { svr.Get("/hi", [&](const Request & /*req*/, Response & /*res*/) { throw std::runtime_error("exception..."); - //res.set_content("Hello World!", "text/plain"); + // res.set_content("Hello World!", "text/plain"); }); auto listen_thread = std::thread([&svr]() { svr.listen("localhost", PORT); }); @@ -3211,6 +3210,39 @@ TEST(KeepAliveTest, ReadTimeout) { ASSERT_FALSE(svr.is_running()); } +TEST(ErrorHandlerWithContentProviderTest, ErrorHandler) { + Server svr; + + svr.set_error_handler([](Request const &, Response &res) -> void { + res.set_chunked_content_provider( + "text/plain", [](std::size_t const, DataSink &sink) -> bool { + sink.os << "hello"; + sink.os << "world"; + sink.done(); + return true; + }); + }); + + auto listen_thread = std::thread([&svr]() { svr.listen("localhost", PORT); }); + while (!svr.is_running()) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + // Give GET time to get a few messages. + std::this_thread::sleep_for(std::chrono::seconds(1)); + + Client cli("localhost", PORT); + + auto res = cli.Get("/"); + ASSERT_TRUE(res); + EXPECT_EQ(404, res->status); + EXPECT_EQ("helloworld", res->body); + + svr.stop(); + listen_thread.join(); + ASSERT_FALSE(svr.is_running()); +} + #ifdef CPPHTTPLIB_OPENSSL_SUPPORT TEST(KeepAliveTest, ReadTimeoutSSL) { SSLServer svr(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE); @@ -3770,9 +3802,9 @@ TEST(DecodeWithChunkedEncoding, BrotliEncoding) { TEST(HttpsToHttpRedirectTest2, SimpleInterface) { Client cli("https://nghttp2.org"); cli.set_follow_location(true); - auto res = cli.Get( - "/httpbin/" - "redirect-to?url=http%3A%2F%2Fwww.google.com&status_code=302"); + auto res = + cli.Get("/httpbin/" + "redirect-to?url=http%3A%2F%2Fwww.google.com&status_code=302"); ASSERT_TRUE(res); EXPECT_EQ(200, res->status);