tcp: a few tests
This commit is contained in:
parent
f218b2f134
commit
4d44d89158
@ -45,6 +45,7 @@ set(TARGET_LOOP loop)
|
||||
set(TARGET_PREPARE prepare)
|
||||
set(TARGET_RESOURCE resource)
|
||||
set(TARGET_SIGNAL signal)
|
||||
set(TARGET_TCP tcp)
|
||||
set(TARGET_TIMER timer)
|
||||
set(TARGET_UTIL util)
|
||||
set(TARGET_WORK work)
|
||||
@ -166,6 +167,14 @@ target_include_directories(${TARGET_SIGNAL} PRIVATE ${COMMON_INCLUDE_DIRS})
|
||||
target_link_libraries(${TARGET_SIGNAL} PRIVATE ${COMMON_LINK_LIBS})
|
||||
add_test(NAME ${TARGET_SIGNAL} COMMAND ${TARGET_SIGNAL})
|
||||
|
||||
# Test TARGET_TCP
|
||||
|
||||
set(TARGET_TCP_SOURCES $<TARGET_OBJECTS:odr> uvw/tcp.cpp)
|
||||
add_executable(${TARGET_TCP} ${TARGET_TCP_SOURCES})
|
||||
target_include_directories(${TARGET_TCP} PRIVATE ${COMMON_INCLUDE_DIRS})
|
||||
target_link_libraries(${TARGET_TCP} PRIVATE ${COMMON_LINK_LIBS})
|
||||
add_test(NAME ${TARGET_TCP} COMMAND ${TARGET_TCP})
|
||||
|
||||
# Test TARGET_TIMER
|
||||
|
||||
set(TARGET_TIMER_SOURCES $<TARGET_OBJECTS:odr> uvw/timer.cpp)
|
||||
|
||||
@ -86,7 +86,7 @@ void conn(uvw::Loop &loop) {
|
||||
std::cout << "close" << std::endl;
|
||||
});
|
||||
|
||||
tcp->connect(std::string{"127.0.0.1"}, 4242);
|
||||
tcp->connect("127.0.0.1", 4242);
|
||||
}
|
||||
|
||||
void g() {
|
||||
|
||||
92
test/uvw/tcp.cpp
Normal file
92
test/uvw/tcp.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <uvw.hpp>
|
||||
|
||||
|
||||
TEST(Tcp, Functionalities) {
|
||||
auto loop = uvw::Loop::getDefault();
|
||||
auto handle = loop->resource<uvw::TcpHandle>();
|
||||
|
||||
ASSERT_TRUE(handle->noDelay(true));
|
||||
ASSERT_TRUE(handle->keepAlive(true, uvw::TcpHandle::Time{128}));
|
||||
ASSERT_TRUE(handle->simultaneousAccepts());
|
||||
|
||||
handle->close();
|
||||
loop->run();
|
||||
}
|
||||
|
||||
|
||||
TEST(Tcp, ReadWrite) {
|
||||
auto loop = uvw::Loop::getDefault();
|
||||
auto server = loop->resource<uvw::TcpHandle>();
|
||||
auto client = loop->resource<uvw::TcpHandle>();
|
||||
|
||||
server->on<uvw::ErrorEvent>([](const auto &, auto &) { FAIL(); });
|
||||
client->on<uvw::ErrorEvent>([](const auto &, auto &) { FAIL(); });
|
||||
|
||||
server->once<uvw::ListenEvent>([](const uvw::ListenEvent &, uvw::TcpHandle &srv) {
|
||||
std::shared_ptr<uvw::TcpHandle> socket = srv.loop().resource<uvw::TcpHandle>();
|
||||
|
||||
socket->on<uvw::ErrorEvent>([](const uvw::ErrorEvent &, uvw::TcpHandle &) { FAIL(); });
|
||||
socket->on<uvw::CloseEvent>([&srv](const uvw::CloseEvent &, uvw::TcpHandle &) { srv.close(); });
|
||||
socket->on<uvw::EndEvent>([](const uvw::EndEvent &, uvw::TcpHandle &sock) { sock.close(); });
|
||||
|
||||
srv.accept(*socket);
|
||||
socket->read();
|
||||
});
|
||||
|
||||
client->once<uvw::WriteEvent>([](const uvw::WriteEvent &, uvw::TcpHandle &handle) {
|
||||
handle.close();
|
||||
});
|
||||
|
||||
client->once<uvw::ConnectEvent>([](const uvw::ConnectEvent &, uvw::TcpHandle &handle) {
|
||||
auto dataTryWrite = std::unique_ptr<char[]>(new char[1]{ 'a' });
|
||||
handle.tryWrite(std::move(dataTryWrite), 1);
|
||||
auto dataWrite = std::unique_ptr<char[]>(new char[2]{ 'b', 'c' });
|
||||
handle.write(std::move(dataWrite), 2);
|
||||
});
|
||||
|
||||
server->bind("127.0.0.1", 4242);
|
||||
server->listen();
|
||||
client->connect("127.0.0.1", 4242);
|
||||
|
||||
loop->run();
|
||||
}
|
||||
|
||||
|
||||
TEST(Tcp, SockPeer) {
|
||||
auto loop = uvw::Loop::getDefault();
|
||||
auto server = loop->resource<uvw::TcpHandle>();
|
||||
auto client = loop->resource<uvw::TcpHandle>();
|
||||
|
||||
server->on<uvw::ErrorEvent>([](const auto &, auto &) { FAIL(); });
|
||||
client->on<uvw::ErrorEvent>([](const auto &, auto &) { FAIL(); });
|
||||
|
||||
server->once<uvw::ListenEvent>([](const uvw::ListenEvent &, uvw::TcpHandle &srv) {
|
||||
std::shared_ptr<uvw::TcpHandle> socket = srv.loop().resource<uvw::TcpHandle>();
|
||||
|
||||
socket->on<uvw::ErrorEvent>([](const uvw::ErrorEvent &, uvw::TcpHandle &) { FAIL(); });
|
||||
socket->on<uvw::CloseEvent>([&srv](const uvw::CloseEvent &, uvw::TcpHandle &) { srv.close(); });
|
||||
socket->on<uvw::EndEvent>([](const uvw::EndEvent &, uvw::TcpHandle &sock) { sock.close(); });
|
||||
|
||||
srv.accept(*socket);
|
||||
socket->read();
|
||||
|
||||
uvw::Addr local = srv.sock();
|
||||
uvw::Addr remote = socket->peer();
|
||||
|
||||
ASSERT_EQ(local.ip, "127.0.0.1");
|
||||
ASSERT_EQ(remote.ip, "127.0.0.1");
|
||||
ASSERT_EQ(local.port, decltype(local.port){4242});
|
||||
ASSERT_NE(remote.port, decltype(remote.port){0});
|
||||
});
|
||||
|
||||
client->once<uvw::ConnectEvent>([](const uvw::ConnectEvent &, uvw::TcpHandle &handle) {
|
||||
handle.close();
|
||||
});
|
||||
|
||||
server->bind("127.0.0.1", 4242);
|
||||
server->listen();
|
||||
client->connect("127.0.0.1", 4242);
|
||||
|
||||
loop->run();
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user