diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4d39caa5..68b906ac 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -59,7 +59,7 @@ ADD_UVW_TEST(handle uvw/handle.cpp) ADD_UVW_TEST(idle uvw/idle.cpp) ADD_UVW_LIB_TEST(lib uvw/lib.cpp) ADD_UVW_TEST(loop uvw/loop.cpp) -ADD_UVW_TEST(pipe uvw/pipe.cpp) +ADD_UVW_DIR_TEST(pipe uvw/pipe.cpp) ADD_UVW_TEST(poll uvw/poll.cpp) ADD_UVW_TEST(prepare uvw/prepare.cpp) ADD_UVW_TEST(process uvw/process.cpp) diff --git a/test/uvw/pipe.cpp b/test/uvw/pipe.cpp index 22aa7312..49fb37f6 100644 --- a/test/uvw/pipe.cpp +++ b/test/uvw/pipe.cpp @@ -2,6 +2,83 @@ #include +TEST(Pipe, ReadWrite) { + const std::string sockname = std::string{TARGET_PIPE_DIR} + std::string{"/test.sock"}; + + auto loop = uvw::Loop::getDefault(); + auto server = loop->resource(); + auto client = loop->resource(); + + server->on([](const auto &, auto &) { FAIL(); }); + client->on([](const auto &, auto &) { FAIL(); }); + + server->once([](const uvw::ListenEvent &, uvw::PipeHandle &handle) { + std::shared_ptr socket = handle.loop().resource(); + + socket->on([](const uvw::ErrorEvent &, uvw::PipeHandle &) { FAIL(); }); + socket->on([&handle](const uvw::CloseEvent &, uvw::PipeHandle &) { handle.close(); }); + socket->on([](const uvw::EndEvent &, uvw::PipeHandle &sock) { sock.close(); }); + + handle.accept(*socket); + socket->read(); + }); + + client->once([](const uvw::WriteEvent &, uvw::PipeHandle &handle) { + handle.close(); + }); + + client->once([](const uvw::ConnectEvent &, uvw::PipeHandle &handle) { + auto dataTryWrite = std::unique_ptr(new char[1]{ 'a' }); + handle.tryWrite(std::move(dataTryWrite), 1); + auto dataWrite = std::unique_ptr(new char[2]{ 'b', 'c' }); + handle.write(std::move(dataWrite), 2); + }); + + server->bind(sockname); + server->listen(); + client->connect(sockname); + + loop->run(); +} + + +TEST(Pipe, SockPeer) { + const std::string sockname = std::string{TARGET_PIPE_DIR} + std::string{"/test.sock"}; + + auto loop = uvw::Loop::getDefault(); + auto server = loop->resource(); + auto client = loop->resource(); + + server->on([](const auto &, auto &) { FAIL(); }); + client->on([](const auto &, auto &) { FAIL(); }); + + server->once([&sockname](const uvw::ListenEvent &, uvw::PipeHandle &handle) { + std::shared_ptr socket = handle.loop().resource(); + + socket->on([](const uvw::ErrorEvent &, uvw::PipeHandle &) { FAIL(); }); + socket->on([&handle](const uvw::CloseEvent &, uvw::PipeHandle &) { handle.close(); }); + socket->on([](const uvw::EndEvent &, uvw::PipeHandle &sock) { sock.close(); }); + + handle.accept(*socket); + socket->read(); + + ASSERT_EQ(handle.sock(), sockname); + }); + + client->once([&sockname](const uvw::ConnectEvent &, uvw::PipeHandle &handle) { + ASSERT_EQ(handle.peer(), sockname); + + handle.close(); + }); + + server->bind(sockname); + server->listen(); + client->connect(sockname); + + loop->run(); +} + + TEST(Pipe, TODO) { auto loop = uvw::Loop::getDefault(); auto handle = uvw::PipeHandle::create(loop); diff --git a/test/uvw/tcp.cpp b/test/uvw/tcp.cpp index d5930661..dea3e122 100644 --- a/test/uvw/tcp.cpp +++ b/test/uvw/tcp.cpp @@ -23,14 +23,14 @@ TEST(Tcp, ReadWrite) { server->on([](const auto &, auto &) { FAIL(); }); client->on([](const auto &, auto &) { FAIL(); }); - server->once([](const uvw::ListenEvent &, uvw::TcpHandle &srv) { - std::shared_ptr socket = srv.loop().resource(); + server->once([](const uvw::ListenEvent &, uvw::TcpHandle &handle) { + std::shared_ptr socket = handle.loop().resource(); socket->on([](const uvw::ErrorEvent &, uvw::TcpHandle &) { FAIL(); }); - socket->on([&srv](const uvw::CloseEvent &, uvw::TcpHandle &) { srv.close(); }); + socket->on([&handle](const uvw::CloseEvent &, uvw::TcpHandle &) { handle.close(); }); socket->on([](const uvw::EndEvent &, uvw::TcpHandle &sock) { sock.close(); }); - srv.accept(*socket); + handle.accept(*socket); socket->read(); }); @@ -61,26 +61,28 @@ TEST(Tcp, SockPeer) { server->on([](const auto &, auto &) { FAIL(); }); client->on([](const auto &, auto &) { FAIL(); }); - server->once([](const uvw::ListenEvent &, uvw::TcpHandle &srv) { - std::shared_ptr socket = srv.loop().resource(); + server->once([](const uvw::ListenEvent &, uvw::TcpHandle &handle) { + std::shared_ptr socket = handle.loop().resource(); socket->on([](const uvw::ErrorEvent &, uvw::TcpHandle &) { FAIL(); }); - socket->on([&srv](const uvw::CloseEvent &, uvw::TcpHandle &) { srv.close(); }); + socket->on([&handle](const uvw::CloseEvent &, uvw::TcpHandle &) { handle.close(); }); socket->on([](const uvw::EndEvent &, uvw::TcpHandle &sock) { sock.close(); }); - srv.accept(*socket); + handle.accept(*socket); socket->read(); - uvw::Addr local = srv.sock(); - uvw::Addr remote = socket->peer(); + uvw::Addr addr = handle.sock(); - 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}); + ASSERT_EQ(addr.ip, "127.0.0.1"); + ASSERT_EQ(addr.port, decltype(addr.port){4242}); }); client->once([](const uvw::ConnectEvent &, uvw::TcpHandle &handle) { + uvw::Addr addr = handle.peer(); + + ASSERT_EQ(addr.ip, "127.0.0.1"); + ASSERT_NE(addr.port, decltype(addr.port){0}); + handle.close(); });