From 5f1ff58ed2b76c9e915de58d29451663026095e3 Mon Sep 17 00:00:00 2001 From: yhirose Date: Tue, 29 Aug 2017 18:41:34 -0400 Subject: [PATCH] Added unit tests for AI_PASSIVE flag. --- test/test.cc | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/test/test.cc b/test/test.cc index 8632368..97fe0a9 100644 --- a/test/test.cc +++ b/test/test.cc @@ -65,7 +65,16 @@ TEST(ParseQueryTest, ParseQueryString) TEST(SocketTest, OpenClose) { - socket_t sock = detail::create_server_socket(HOST, PORT); + socket_t sock = detail::create_server_socket(HOST, PORT, 0); + ASSERT_NE(-1, sock); + + auto ret = detail::close_socket(sock); + EXPECT_EQ(0, ret); +} + +TEST(SocketTest, OpenCloseWithAI_PASSIVE) +{ + socket_t sock = detail::create_server_socket(nullptr, PORT, AI_PASSIVE); ASSERT_NE(-1, sock); auto ret = detail::close_socket(sock); @@ -157,7 +166,6 @@ protected: virtual void TearDown() { //svr_.stop(); // NOTE: This causes dead lock on Windows. cli_.get("/stop"); - f_.get(); } @@ -295,6 +303,60 @@ TEST_F(ServerTest, InvalidBaseDir) EXPECT_EQ(true, svr_.set_base_dir(".")); } +class ServerTestWithAI_PASSIVE : public ::testing::Test { +protected: + ServerTestWithAI_PASSIVE() + : cli_(HOST, PORT) +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + , svr_(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE) +#endif + , up_(false) {} + + virtual void SetUp() { + svr_.get("/hi", [&](const Request& req, Response& res) { + res.set_content("Hello World!", "text/plain"); + }); + + svr_.get("/stop", [&](const Request& req, Response& res) { + svr_.stop(); + }); + + f_ = async([&](){ + up_ = true; + svr_.listen(nullptr, PORT, AI_PASSIVE); + }); + + while (!up_) { + msleep(1); + } + } + + virtual void TearDown() { + //svr_.stop(); // NOTE: This causes dead lock on Windows. + cli_.get("/stop"); + f_.get(); + } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + SSLClient cli_; + SSLServer svr_; +#else + Client cli_; + Server svr_; +#endif + future f_; + bool up_; +}; + +TEST_F(ServerTestWithAI_PASSIVE, GetMethod200) +{ + auto res = cli_.get("/hi"); + ASSERT_TRUE(res != nullptr); + EXPECT_EQ(200, res->status); + EXPECT_EQ("text/plain", res->get_header_value("Content-Type")); + EXPECT_EQ("Hello World!", res->body); +} + #ifdef _WIN32 TEST(CleanupTest, WSACleanup) {