Mercurial > code
diff C++/Tests/Sockets/main.cpp @ 316:4c0af1143fc4
Add wait operation (no tests yet)
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 03 Mar 2015 18:48:54 +0100 |
parents | c9356cb38c86 |
children | 68ae6d7dea1f |
line wrap: on
line diff
--- a/C++/Tests/Sockets/main.cpp Mon Mar 02 14:00:48 2015 +0100 +++ b/C++/Tests/Sockets/main.cpp Tue Mar 03 18:48:54 2015 +0100 @@ -64,15 +64,21 @@ { m_tserver = std::thread([this] () { m_server.bind(Internet("*", 16000, AF_INET)); + + ASSERT_EQ(SocketState::Bound, m_server.state()); + m_server.listen(); m_server.accept(); m_server.close(); }); - std::this_thread::sleep_for(500ms); + std::this_thread::sleep_for(100ms); m_tclient = std::thread([this] () { m_client.connect(Internet("127.0.0.1", 16000, AF_INET)); + + ASSERT_EQ(SocketState::Connected, m_client.state()); + m_client.close(); }); } @@ -94,7 +100,7 @@ m_server.close(); }); - std::this_thread::sleep_for(500ms); + std::this_thread::sleep_for(100ms); m_tclient = std::thread([this] () { m_client.connect(Internet("127.0.0.1", 16000, AF_INET)); @@ -148,7 +154,7 @@ m_server.close(); }); - std::this_thread::sleep_for(500ms); + std::this_thread::sleep_for(100ms); m_tclient = std::thread([this] () { Internet info("127.0.0.1", 16000, AF_INET); @@ -251,6 +257,168 @@ ASSERT_EQ(0, static_cast<int>(m_listener.size())); } +/* -------------------------------------------------------- + * Listener: poll + * -------------------------------------------------------- */ + +#if defined(SOCKET_HAVE_POLL) + +class ListenerPollTest : public testing::Test { +protected: + SocketListener m_listener{SocketMethod::Poll}; + SocketTcp m_masterTcp{AF_INET, 0}; + SocketTcp m_clientTcp{AF_INET, 0}; + + std::thread m_tserver; + std::thread m_tclient; + +public: + ListenerPollTest() + { + m_masterTcp.set(SOL_SOCKET, SO_REUSEADDR, 1); + m_masterTcp.bind(Internet("*", 16000, AF_INET)); + m_masterTcp.listen(); + } + + ~ListenerPollTest() + { + if (m_tserver.joinable()) { + m_tserver.join(); + } + if (m_tclient.joinable()) { + m_tclient.join(); + } + } +}; + +TEST_F(ListenerPollTest, accept) +{ + m_tserver = std::thread([this] () { + try { + m_listener.set(m_masterTcp, SocketListener::Read); + m_listener.select(); + m_masterTcp.accept(); + m_masterTcp.close(); + } catch (const std::exception &ex) { + FAIL() << ex.what(); + } + }); + + std::this_thread::sleep_for(100ms); + + m_tclient = std::thread([this] () { + m_clientTcp.connect(Internet("127.0.0.1", 16000, AF_INET)); + }); +} + +TEST_F(ListenerPollTest, recv) +{ + m_tserver = std::thread([this] () { + try { + m_listener.set(m_masterTcp, SocketListener::Read); + m_listener.select(); + + auto sc = m_masterTcp.accept(); + + ASSERT_EQ("hello", sc.recv(512)); + + m_masterTcp.close(); + } catch (const std::exception &ex) { + FAIL() << ex.what(); + } + }); + + std::this_thread::sleep_for(100ms); + + m_tclient = std::thread([this] () { + m_clientTcp.connect(Internet("127.0.0.1", 16000, AF_INET)); + m_clientTcp.send("hello"); + }); +} + +#endif + +/* -------------------------------------------------------- + * Listener: select + * -------------------------------------------------------- */ + +class ListenerSelectTest : public testing::Test { +protected: + SocketListener m_listener{SocketMethod::Select}; + SocketTcp m_masterTcp{AF_INET, 0}; + SocketTcp m_clientTcp{AF_INET, 0}; + + std::thread m_tserver; + std::thread m_tclient; + +public: + ListenerSelectTest() + { + m_masterTcp.set(SOL_SOCKET, SO_REUSEADDR, 1); + m_masterTcp.bind(Internet("*", 16000, AF_INET)); + m_masterTcp.listen(); + } + + ~ListenerSelectTest() + { + if (m_tserver.joinable()) { + m_tserver.join(); + } + if (m_tclient.joinable()) { + m_tclient.join(); + } + } +}; + +TEST_F(ListenerSelectTest, accept) +{ + m_tserver = std::thread([this] () { + try { + m_listener.set(m_masterTcp, SocketListener::Read); + m_listener.select(); + m_masterTcp.accept(); + m_masterTcp.close(); + } catch (const std::exception &ex) { + FAIL() << ex.what(); + } + }); + + std::this_thread::sleep_for(100ms); + + m_tclient = std::thread([this] () { + m_clientTcp.connect(Internet("127.0.0.1", 16000, AF_INET)); + }); +} + +TEST_F(ListenerSelectTest, recv) +{ + m_tserver = std::thread([this] () { + try { + m_listener.set(m_masterTcp, SocketListener::Read); + m_listener.select(); + + auto sc = m_masterTcp.accept(); + + ASSERT_EQ("hello", sc.recv(512)); + + m_masterTcp.close(); + } catch (const std::exception &ex) { + FAIL() << ex.what(); + } + }); + + std::this_thread::sleep_for(100ms); + + m_tclient = std::thread([this] () { + m_clientTcp.connect(Internet("127.0.0.1", 16000, AF_INET)); + m_clientTcp.send("hello"); + }); +} + + + + +