From 1e6b5764c7f5afeb51680ea41c5e3d82165cb82a Mon Sep 17 00:00:00 2001 From: BrennanConroy Date: Wed, 16 Feb 2022 15:32:13 -0800 Subject: [PATCH] fixup tests --- .../hub_connection_tests.cpp | 28 ++++++++++--------- .../test_websocket_client.cpp | 14 ++++++++-- .../test_websocket_client.h | 3 +- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/test/signalrclienttests/hub_connection_tests.cpp b/test/signalrclienttests/hub_connection_tests.cpp index 3066189c..3d49fb0b 100644 --- a/test/signalrclienttests/hub_connection_tests.cpp +++ b/test/signalrclienttests/hub_connection_tests.cpp @@ -1829,7 +1829,10 @@ TEST(keepalive, sends_ping_messages) messages->push_back(msg); } callback(nullptr); - }); + }, + [](const std::string&, std::function callback) { callback(nullptr); }, + [](std::function callback) { callback(nullptr); }, + false); auto hub_connection = create_hub_connection(websocket_client); hub_connection.set_client_config(config); @@ -1858,15 +1861,17 @@ TEST(keepalive, server_timeout_on_no_ping_from_server) { signalr_client_config config; config.set_keepalive_interval(std::chrono::seconds(1)); - config.set_server_timeout(std::chrono::seconds(3)); + config.set_server_timeout(std::chrono::seconds(1)); auto websocket_client = create_test_websocket_client(); auto hub_connection = create_hub_connection(websocket_client); hub_connection.set_client_config(config); auto disconnected_called = false; - hub_connection.set_disconnected([&disconnected_called](std::exception_ptr ex) + + auto disconnect_mre = manual_reset_event(); + hub_connection.set_disconnected([&disconnected_called, &disconnect_mre](std::exception_ptr ex) { - disconnected_called = true; + disconnect_mre.set(ex); }); auto mre = manual_reset_event(); @@ -1881,24 +1886,23 @@ TEST(keepalive, server_timeout_on_no_ping_from_server) mre.get(); - std::this_thread::sleep_for(config.get_server_timeout() + std::chrono::milliseconds(500)); + disconnect_mre.get(); ASSERT_EQ(connection_state::disconnected, hub_connection.get_connection_state()); - ASSERT_TRUE(disconnected_called); } TEST(keepalive, resets_server_timeout_timer_on_any_message_from_server) { signalr_client_config config; config.set_keepalive_interval(std::chrono::seconds(1)); - config.set_server_timeout(std::chrono::seconds(3)); + config.set_server_timeout(std::chrono::seconds(1)); auto websocket_client = create_test_websocket_client(); auto hub_connection = create_hub_connection(websocket_client); hub_connection.set_client_config(config); - auto disconnected_called = false; - hub_connection.set_disconnected([&disconnected_called](std::exception_ptr ex) + auto disconnect_mre = manual_reset_event(); + hub_connection.set_disconnected([&disconnect_mre](std::exception_ptr ex) { - disconnected_called = true; + disconnect_mre.set(ex); }); auto mre = manual_reset_event(); @@ -1917,9 +1921,7 @@ TEST(keepalive, resets_server_timeout_timer_on_any_message_from_server) websocket_client->receive_message("{\"type\":6}\x1e"); std::this_thread::sleep_for(std::chrono::seconds(1)); ASSERT_EQ(connection_state::connected, hub_connection.get_connection_state()); - ASSERT_FALSE(disconnected_called); - std::this_thread::sleep_for(config.get_server_timeout() + std::chrono::milliseconds(500)); + disconnect_mre.get(); ASSERT_EQ(connection_state::disconnected, hub_connection.get_connection_state()); - ASSERT_TRUE(disconnected_called); } diff --git a/test/signalrclienttests/test_websocket_client.cpp b/test/signalrclienttests/test_websocket_client.cpp index 8c99a897..7434f523 100644 --- a/test/signalrclienttests/test_websocket_client.cpp +++ b/test/signalrclienttests/test_websocket_client.cpp @@ -10,12 +10,14 @@ std::shared_ptr create_test_websocket_client( std::function)> send_function, std::function)> connect_function, - std::function)> close_function) + std::function)> close_function, + bool ignore_pings) { auto websocket_client = std::make_shared(); websocket_client->set_send_function(send_function); websocket_client->set_connect_function(connect_function); websocket_client->set_close_function(close_function); + websocket_client->ignore_pings = ignore_pings; return websocket_client; } @@ -24,7 +26,7 @@ test_websocket_client::test_websocket_client() : m_connect_function(std::make_shared)>>([](const std::string&, std::function callback) { callback(nullptr); })), m_send_function(std::make_shared)>>([](const std::string msg, std::function callback) { callback(nullptr); })), m_close_function(std::make_shared)>>([](std::function callback) { callback(nullptr); })), - m_receive_message_event(), m_receive_message(), m_stopped(true), receive_count(0) + m_receive_message_event(), m_receive_message(), m_stopped(true), receive_count(0), ignore_pings(true) { m_receive_loop_not_running.cancel(); } @@ -107,8 +109,14 @@ void test_websocket_client::send(const std::string& payload, signalr::transfer_f { handshake_sent.cancel(); auto local_copy = m_send_function; - m_scheduler->schedule([payload, callback, local_copy]() + auto l_ignore_pings = ignore_pings; + m_scheduler->schedule([payload, callback, local_copy, l_ignore_pings]() { + if (l_ignore_pings && payload.find("\"type\":6") != -1) + { + callback(nullptr); + return; + } (*local_copy)(payload, callback); }); } diff --git a/test/signalrclienttests/test_websocket_client.h b/test/signalrclienttests/test_websocket_client.h index d232d6da..f11c07a7 100644 --- a/test/signalrclienttests/test_websocket_client.h +++ b/test/signalrclienttests/test_websocket_client.h @@ -41,6 +41,7 @@ class test_websocket_client : public websocket_client cancellation_token_source receive_loop_started; cancellation_token_source handshake_sent; int receive_count; + bool ignore_pings; private: std::shared_ptr)>> m_connect_function; @@ -63,4 +64,4 @@ class test_websocket_client : public websocket_client std::shared_ptr create_test_websocket_client( std::function)> send_function = [](const std::string&, std::function callback) { callback(nullptr); }, std::function)> connect_function = [](const std::string&, std::function callback) { callback(nullptr); }, - std::function)> close_function = [](std::function callback) { callback(nullptr); }); \ No newline at end of file + std::function)> close_function = [](std::function callback) { callback(nullptr); }, bool ignore_pings = true); \ No newline at end of file