mirror of
https://github.com/CrowCpp/Crow.git
synced 2024-06-07 21:10:44 +00:00
Merge pull request #277 from CrowCpp/wip-luca-schlecker
Add unit test for server timeout.
This commit is contained in:
commit
22d3918345
@ -2341,3 +2341,71 @@ TEST_CASE("get_port")
|
||||
|
||||
runTest.join();
|
||||
}
|
||||
|
||||
TEST_CASE("timeout")
|
||||
{
|
||||
auto test_timeout = [](const std::uint8_t timeout) {
|
||||
static char buf[2048];
|
||||
|
||||
SimpleApp app;
|
||||
|
||||
CROW_ROUTE(app, "/")
|
||||
([]() { return "hello"; });
|
||||
|
||||
auto _ = async(launch::async, [&] {
|
||||
app.bindaddr(LOCALHOST_ADDRESS).timeout(timeout).port(45451).run();
|
||||
});
|
||||
app.wait_for_server_start();
|
||||
asio::io_service is;
|
||||
std::string sendmsg = "GET /\r\n\r\n";
|
||||
future_status status;
|
||||
|
||||
{
|
||||
asio::ip::tcp::socket c(is);
|
||||
c.connect(asio::ip::tcp::endpoint(
|
||||
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
|
||||
|
||||
auto receive_future = async(launch::async, [&]() {
|
||||
boost::system::error_code ec;
|
||||
c.receive(asio::buffer(buf, 2048), 0, ec);
|
||||
return ec;
|
||||
});
|
||||
status = receive_future.wait_for(std::chrono::seconds(timeout - 1));
|
||||
CHECK(status == future_status::timeout);
|
||||
|
||||
status = receive_future.wait_for(chrono::seconds(3));
|
||||
CHECK(status == future_status::ready);
|
||||
CHECK(receive_future.get() == asio::error::eof);
|
||||
|
||||
c.close();
|
||||
}
|
||||
{
|
||||
asio::ip::tcp::socket c(is);
|
||||
c.connect(asio::ip::tcp::endpoint(
|
||||
asio::ip::address::from_string(LOCALHOST_ADDRESS), 45451));
|
||||
|
||||
size_t received;
|
||||
auto receive_future = async(launch::async, [&]() {
|
||||
boost::system::error_code ec;
|
||||
received = c.receive(asio::buffer(buf, 2048), 0, ec);
|
||||
return ec;
|
||||
});
|
||||
status = receive_future.wait_for(std::chrono::seconds(timeout - 1));
|
||||
CHECK(status == future_status::timeout);
|
||||
|
||||
c.send(asio::buffer(sendmsg));
|
||||
|
||||
status = receive_future.wait_for(chrono::seconds(3));
|
||||
CHECK(status == future_status::ready);
|
||||
CHECK(!receive_future.get());
|
||||
CHECK("hello" == std::string(buf + received - 5, buf + received));
|
||||
|
||||
c.close();
|
||||
}
|
||||
|
||||
app.stop();
|
||||
};
|
||||
|
||||
test_timeout(3);
|
||||
test_timeout(5);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user