diff --git a/include/fc/network/http/websocket.hpp b/include/fc/network/http/websocket.hpp index f56b4be..a42c1f8 100755 --- a/include/fc/network/http/websocket.hpp +++ b/include/fc/network/http/websocket.hpp @@ -50,6 +50,7 @@ namespace fc { namespace http { void on_connection( const on_connection_handler& handler); void listen( uint16_t port ); void listen( const fc::ip::endpoint& ep ); + uint16_t get_listening_port(); void start_accept(); private: diff --git a/src/network/http/websocket.cpp b/src/network/http/websocket.cpp index 9c8981a..6440dd6 100755 --- a/src/network/http/websocket.cpp +++ b/src/network/http/websocket.cpp @@ -612,6 +612,12 @@ namespace fc { namespace http { my->_server.listen( boost::asio::ip::tcp::endpoint( boost::asio::ip::address_v4(uint32_t(ep.get_address())),ep.port()) ); } + uint16_t websocket_server::get_listening_port() + { + websocketpp::lib::asio::error_code ec; + return my->_server.get_local_endpoint(ec).port(); + } + void websocket_server::start_accept() { my->_server.start_accept(); } diff --git a/tests/bloom_test.cpp b/tests/bloom_test.cpp index ca17792..2ea566a 100755 --- a/tests/bloom_test.cpp +++ b/tests/bloom_test.cpp @@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE(bloom_test_1) std::string line; std::ifstream in("README.md"); std::ofstream words("words.txt"); - while( !in.eof() && count < 100000 ) + while( in.good() && count < 100000 ) { std::getline(in, line); // std::cout << "'"< E - sigma && rc < E + sigma); + BOOST_CHECK( rc < E + sigma ); } BOOST_AUTO_TEST_SUITE(fc_crypto) diff --git a/tests/network/http/websocket_test.cpp b/tests/network/http/websocket_test.cpp index d377bc7..e47a21f 100755 --- a/tests/network/http/websocket_test.cpp +++ b/tests/network/http/websocket_test.cpp @@ -10,6 +10,7 @@ BOOST_AUTO_TEST_CASE(websocket_test) { fc::http::websocket_client client; fc::http::websocket_connection_ptr s_conn, c_conn; + int port; { fc::http::websocket_server server; server.on_connection([&]( const fc::http::websocket_connection_ptr& c ){ @@ -19,56 +20,39 @@ BOOST_AUTO_TEST_CASE(websocket_test) }); }); - server.listen( 8090 ); + server.listen( 0 ); + port = server.get_listening_port(); + server.start_accept(); std::string echo; - c_conn = client.connect( "ws://localhost:8090" ); + c_conn = client.connect( "ws://localhost:" + fc::to_string(port) ); c_conn->on_message_handler([&](const std::string& s){ echo = s; }); c_conn->send_message( "hello world" ); - fc::usleep( fc::seconds(1) ); + fc::usleep( fc::milliseconds(100) ); BOOST_CHECK_EQUAL("echo: hello world", echo); c_conn->send_message( "again" ); - fc::usleep( fc::seconds(1) ); + fc::usleep( fc::milliseconds(100) ); 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"); - } catch (const fc::assert_exception& e) { - //std::cerr << e.to_string() << "\n"; - } + fc::usleep( fc::milliseconds(100) ); + BOOST_CHECK_THROW(c_conn->send_message( "again" ), fc::exception); - c_conn = client.connect( "ws://localhost:8090" ); + c_conn = client.connect( "ws://localhost:" + fc::to_string(port) ); c_conn->on_message_handler([&](const std::string& s){ echo = s; }); c_conn->send_message( "hello world" ); - fc::usleep( fc::seconds(1) ); + fc::usleep( fc::milliseconds(100) ); BOOST_CHECK_EQUAL("echo: hello world", echo); } - try { - c_conn->send_message( "again" ); - BOOST_FAIL("expected assertion failure"); - } catch (const fc::assert_exception& e) { - std::cerr << e.to_string() << "\n"; - } - - try { - c_conn = client.connect( "ws://localhost:8090" ); - BOOST_FAIL("expected assertion failure"); - } catch (const fc::assert_exception& e) { - std::cerr << e.to_string() << "\n"; - } catch (const fc::exception& e) { - BOOST_FAIL("Unexpected exception: " + e.to_string()); - } catch (const std::exception& e) { - BOOST_FAIL("Unexpected exception: " + std::string(e.what())); - } + BOOST_CHECK_THROW(c_conn->send_message( "again" ), fc::assert_exception); + BOOST_CHECK_THROW(client.connect( "ws://localhost:" + fc::to_string(port) ), fc::exception); } + BOOST_AUTO_TEST_SUITE_END()