peerplays-fc/tests/network/http/websocket_test.cpp

93 lines
3 KiB
C++
Raw Normal View History

2015-08-30 20:15:20 +00:00
#include <boost/test/unit_test.hpp>
#include <fc/network/http/websocket.hpp>
#include <iostream>
BOOST_AUTO_TEST_SUITE(fc_network)
BOOST_AUTO_TEST_CASE(websocket_test)
{
fc::http::websocket_client client;
fc::http::websocket_connection_ptr s_conn, c_conn;
2018-03-22 16:33:17 +00:00
int port;
2015-08-30 20:15:20 +00:00
{
fc::http::websocket_server server;
server.on_connection([&]( const fc::http::websocket_connection_ptr& c ){
s_conn = c;
c->on_message_handler([&](const std::string& s){
c->send_message("echo: " + s);
});
});
2018-03-22 16:33:17 +00:00
bool listen_ok = false;
for( int i = 0; !listen_ok && i < 5; ++i )
{
port = std::rand() % 50000 + 10000;
try
{
server.listen( port );
listen_ok = true;
}
catch( std::exception )
{
// if the port is busy, listen() will throw a std::exception, do nothing here.
}
}
BOOST_REQUIRE( listen_ok );
2015-08-30 20:15:20 +00:00
server.start_accept();
std::string echo;
2018-03-22 16:33:17 +00:00
c_conn = client.connect( "ws://localhost:" + fc::to_string(port) );
2015-08-30 20:15:20 +00:00
c_conn->on_message_handler([&](const std::string& s){
echo = s;
});
c_conn->send_message( "hello world" );
fc::usleep( fc::seconds(1) );
BOOST_CHECK_EQUAL("echo: hello world", echo);
c_conn->send_message( "again" );
fc::usleep( fc::seconds(1) );
BOOST_CHECK_EQUAL("echo: again", echo);
s_conn->close(0, "test");
fc::usleep( fc::seconds(1) );
try {
c_conn->send_message( "again" );
BOOST_FAIL("expected assertion failure");
2018-02-02 12:29:46 +00:00
} catch (const fc::exception& e) {
2015-08-30 20:15:20 +00:00
//std::cerr << e.to_string() << "\n";
}
2018-03-22 16:33:17 +00:00
c_conn = client.connect( "ws://localhost:" + fc::to_string(port) );
2015-08-30 20:15:20 +00:00
c_conn->on_message_handler([&](const std::string& s){
echo = s;
});
c_conn->send_message( "hello world" );
fc::usleep( fc::seconds(1) );
BOOST_CHECK_EQUAL("echo: hello world", echo);
}
try {
c_conn->send_message( "again" );
BOOST_FAIL("expected assertion failure");
2018-03-22 16:33:17 +00:00
} catch (const fc::assert_exception& e) {
std::cerr << "Expected assertion failure : " << e.to_string() << "\n";
2018-02-02 12:29:46 +00:00
} catch (const fc::exception& e) {
2018-03-22 16:33:17 +00:00
BOOST_FAIL("Unexpected exception : " + e.to_string());
} catch (const std::exception& e) {
BOOST_FAIL("Unexpected exception : " + std::string(e.what()));
2015-08-30 20:15:20 +00:00
}
try {
2018-03-22 16:33:17 +00:00
c_conn = client.connect( "ws://localhost:" + fc::to_string(port) );
BOOST_FAIL("expected fc::exception (fail to connect)");
} catch (const fc::exception& e) {
2018-03-22 16:33:17 +00:00
std::cerr << "Excepted fc::exception : " << e.to_string() << "\n";
} catch (const std::exception& e) {
2018-03-22 16:33:17 +00:00
BOOST_FAIL("Unexpected exception : " + std::string(e.what()));
2015-08-30 20:15:20 +00:00
}
}
BOOST_AUTO_TEST_SUITE_END()