diff --git a/Net/testsuite/src/SocketTest.cpp b/Net/testsuite/src/SocketTest.cpp index b45bd3dde..e9b41a054 100644 --- a/Net/testsuite/src/SocketTest.cpp +++ b/Net/testsuite/src/SocketTest.cpp @@ -22,6 +22,8 @@ #include "Poco/FIFOBuffer.h" #include "Poco/Delegate.h" #include "Poco/File.h" +#include "Poco/TemporaryFile.h" +#include "Poco/FileStream.h" #include "Poco/Path.h" #include @@ -667,6 +669,46 @@ void SocketTest::testUseFd() } +void SocketTest::testSendFile() +{ + EchoServer echoServer; + StreamSocket ss; + ss.connect(SocketAddress("127.0.0.1", echoServer.port())); + + std::string sentData = "Hello, world!"; + + Poco::TemporaryFile file; + Poco::FileOutputStream ostr(file.path()); + ostr.write(sentData.data(), sentData.size()); + ostr.close(); + + Poco::FileInputStream istr(file.path()); + std::streamsize sent = 0; + std::streamoff off = 0; + while (sent < file.getSize()) + { + sent += ss.sendFile(istr, sent); + } + istr.close(); + + std::string receivedData; + char buffer[1024]; + int n = ss.receiveBytes(buffer, sizeof(buffer)); + while (n > 0) + { + receivedData.append(buffer, n); + if (receivedData.size() < sentData.size()) + n = ss.receiveBytes(buffer, sizeof(buffer)); + else + n = 0; + } + + assertTrue (receivedData == sentData); + + ss.close(); +} + + void SocketTest::onReadable(bool& b) { if (b) ++_notToReadable; @@ -724,6 +766,7 @@ CppUnit::Test* SocketTest::suite() CppUnit_addTest(pSuite, SocketTest, testEchoUnixLocal); CppUnit_addTest(pSuite, SocketTest, testUnixLocalAbstract); CppUnit_addTest(pSuite, SocketTest, testUseFd); + CppUnit_addTest(pSuite, SocketTest, testSendFile); return pSuite; } diff --git a/Net/testsuite/src/SocketTest.h b/Net/testsuite/src/SocketTest.h index 2bfe8526b..af026e7d8 100644 --- a/Net/testsuite/src/SocketTest.h +++ b/Net/testsuite/src/SocketTest.h @@ -45,9 +45,11 @@ public: void testSelect2(); void testSelect3(); #endif + void testEchoUnixLocal(); void testUnixLocalAbstract(); void testUseFd(); + void testSendFile(); void setUp() override; void tearDown() override; diff --git a/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.cpp b/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.cpp index 10935c5a5..ecb057876 100644 --- a/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.cpp +++ b/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.cpp @@ -25,6 +25,9 @@ #include "Poco/Util/Application.h" #include "Poco/Util/AbstractConfiguration.h" #include "Poco/Thread.h" +#include "Poco/File.h" +#include "Poco/TemporaryFile.h" +#include "Poco/FileStream.h" #include @@ -200,6 +203,49 @@ void SecureStreamSocketTest::testNB() } +void SecureStreamSocketTest::testSendFile() +{ + SecureServerSocket svs(0); + TCPServer srv(new TCPServerConnectionFactoryImpl(), svs); + srv.start(); + + SecureStreamSocket ss; + ss.connect(SocketAddress("127.0.0.1", srv.port())); + + std::string sentData = "Hello, world!"; + + Poco::TemporaryFile file; + Poco::FileOutputStream ostr(file.path()); + ostr.write(sentData.data(), sentData.size()); + ostr.close(); + + Poco::FileInputStream istr(file.path()); + std::streamsize sent = 0; + std::streamoff off = 0; + while (sent < file.getSize()) + { + sent += ss.sendFile(istr, sent); + } + istr.close(); + + std::string receivedData; + char buffer[1024]; + int n = ss.receiveBytes(buffer, sizeof(buffer)); + while (n > 0) + { + receivedData.append(buffer, n); + if (receivedData.size() < sentData.size()) + n = ss.receiveBytes(buffer, sizeof(buffer)); + else + n = 0; + } + + assertTrue (receivedData == sentData); + + ss.close(); +} + + void SecureStreamSocketTest::setUp() { } @@ -217,6 +263,7 @@ CppUnit::Test* SecureStreamSocketTest::suite() CppUnit_addTest(pSuite, SecureStreamSocketTest, testSendReceive); CppUnit_addTest(pSuite, SecureStreamSocketTest, testPeek); CppUnit_addTest(pSuite, SecureStreamSocketTest, testNB); + CppUnit_addTest(pSuite, SecureStreamSocketTest, testSendFile); return pSuite; } diff --git a/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.h b/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.h index 62ac9e1c7..f072e90fc 100644 --- a/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.h +++ b/NetSSL_OpenSSL/testsuite/src/SecureStreamSocketTest.h @@ -27,6 +27,7 @@ public: void testSendReceive(); void testPeek(); void testNB(); + void testSendFile(); void setUp(); void tearDown();