From bbb84b0855335062339358047fdd41b3510237e8 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Sun, 6 Aug 2017 15:15:49 +0200 Subject: [PATCH] more tests --- test/uvw/pipe.cpp | 42 +++++++++++++++++++++++++ test/uvw/tcp.cpp | 79 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 106 insertions(+), 15 deletions(-) diff --git a/test/uvw/pipe.cpp b/test/uvw/pipe.cpp index 49fb37f6..2d924ca4 100644 --- a/test/uvw/pipe.cpp +++ b/test/uvw/pipe.cpp @@ -28,6 +28,9 @@ TEST(Pipe, ReadWrite) { }); client->once([](const uvw::ConnectEvent &, uvw::PipeHandle &handle) { + ASSERT_TRUE(handle.writable()); + ASSERT_TRUE(handle.readable()); + 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' }); @@ -79,6 +82,45 @@ TEST(Pipe, SockPeer) { } +TEST(Pipe, Shutdown) { + const std::string sockname = std::string{TARGET_PIPE_DIR} + std::string{"/test.sock"}; + auto data = std::unique_ptr(new char[3]{ 'a', 'b', 'c' }); + + 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::ShutdownEvent &, uvw::PipeHandle &handle) { + handle.close(); + }); + + client->once([&data](const uvw::ConnectEvent &, uvw::PipeHandle &handle) { + handle.write(data.get(), 3); + handle.shutdown(); + }); + + 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 dea3e122..d6238f8f 100644 --- a/test/uvw/tcp.cpp +++ b/test/uvw/tcp.cpp @@ -16,6 +16,9 @@ TEST(Tcp, Functionalities) { TEST(Tcp, ReadWrite) { + const std::string address = std::string{"127.0.0.1"}; + const unsigned int port = 4242; + auto loop = uvw::Loop::getDefault(); auto server = loop->resource(); auto client = loop->resource(); @@ -39,21 +42,72 @@ TEST(Tcp, ReadWrite) { }); client->once([](const uvw::ConnectEvent &, uvw::TcpHandle &handle) { + ASSERT_TRUE(handle.writable()); + ASSERT_TRUE(handle.readable()); + 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("127.0.0.1", 4242); + server->bind(address, port); server->listen(); - client->connect("127.0.0.1", 4242); + client->connect(address, port); loop->run(); } TEST(Tcp, SockPeer) { + const std::string address = std::string{"127.0.0.1"}; + const unsigned int port = 4242; + + 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([&address, port](const uvw::ListenEvent &, uvw::TcpHandle &handle) { + std::shared_ptr socket = handle.loop().resource(); + + socket->on([](const uvw::ErrorEvent &, uvw::TcpHandle &) { FAIL(); }); + socket->on([&handle](const uvw::CloseEvent &, uvw::TcpHandle &) { handle.close(); }); + socket->on([](const uvw::EndEvent &, uvw::TcpHandle &sock) { sock.close(); }); + + handle.accept(*socket); + socket->read(); + + uvw::Addr addr = handle.sock(); + + ASSERT_EQ(addr.ip, address); + ASSERT_EQ(addr.port, decltype(addr.port){port}); + }); + + client->once([&address](const uvw::ConnectEvent &, uvw::TcpHandle &handle) { + uvw::Addr addr = handle.peer(); + + ASSERT_EQ(addr.ip, address); + ASSERT_NE(addr.port, decltype(addr.port){0}); + + handle.close(); + }); + + server->bind(uvw::Addr{ address, port }); + server->listen(); + client->connect(uvw::Addr{ address, port }); + + loop->run(); +} + + +TEST(Tcp, Shutdown) { + const std::string address = std::string{"127.0.0.1"}; + const unsigned int port = 4242; + auto data = std::unique_ptr(new char[3]{ 'a', 'b', 'c' }); + auto loop = uvw::Loop::getDefault(); auto server = loop->resource(); auto client = loop->resource(); @@ -70,25 +124,20 @@ TEST(Tcp, SockPeer) { handle.accept(*socket); socket->read(); - - uvw::Addr addr = handle.sock(); - - 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}); - + client->once([](const uvw::ShutdownEvent &, uvw::TcpHandle &handle) { handle.close(); }); - server->bind(uvw::Addr{ "127.0.0.1", 4242 }); + client->once([&data](const uvw::ConnectEvent &, uvw::TcpHandle &handle) { + handle.write(data.get(), 3); + handle.shutdown(); + }); + + server->bind(address, port); server->listen(); - client->connect(uvw::Addr{ "127.0.0.1", 4242 }); + client->connect(address, port); loop->run(); }