X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fsocket_test.cc;h=bcdbcd7246f7cde15ffac522d3824260f13f90cb;hb=809bcfd85fad2ef7d4131c054be4cccd5bcc9d05;hp=5024272abce3eb99cb6805b8fcbadc9a92e24d60;hpb=e3c7656f9dc0acbaf518c051b847ee2e4eb7ba23;p=dcpomatic.git diff --git a/test/socket_test.cc b/test/socket_test.cc index 5024272ab..bcdbcd724 100644 --- a/test/socket_test.cc +++ b/test/socket_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2020 Carl Hetherington + Copyright (C) 2020-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,17 +18,22 @@ */ -#include "lib/server.h" + #include "lib/dcpomatic_socket.h" -#include +#include "lib/server.h" +#include #include -#include +#include #include #include -using boost::shared_ptr; + +using std::make_shared; +using std::shared_ptr; +using std::string; using boost::bind; + #define TEST_SERVER_PORT 9142 #define TEST_SERVER_BUFFER_LENGTH 1024 @@ -38,7 +43,7 @@ class TestServer : public Server public: TestServer (bool digest) : Server (TEST_SERVER_PORT, 30) - , _buffer (new uint8_t[TEST_SERVER_BUFFER_LENGTH]) + , _buffer (TEST_SERVER_BUFFER_LENGTH) , _size (0) , _result (false) , _digest (digest) @@ -53,7 +58,6 @@ public: try { _thread.join (); } catch (...) {} - delete[] _buffer; } void expect (int size) @@ -63,7 +67,7 @@ public: } uint8_t const * buffer() const { - return _buffer; + return _buffer.data(); } void await () @@ -79,18 +83,18 @@ public: } private: - void handle (boost::shared_ptr socket) + void handle (std::shared_ptr socket) override { boost::mutex::scoped_lock lm (_mutex); BOOST_REQUIRE (_size); if (_digest) { Socket::ReadDigestScope ds (socket); - socket->read (_buffer, _size); + socket->read (_buffer.data(), _size); _size = 0; _condition.notify_one (); _result = ds.check(); } else { - socket->read (_buffer, _size); + socket->read (_buffer.data(), _size); _size = 0; _condition.notify_one (); } @@ -99,7 +103,7 @@ private: boost::thread _thread; boost::mutex _mutex; boost::condition _condition; - uint8_t* _buffer; + std::vector _buffer; int _size; bool _result; bool _digest; @@ -112,14 +116,22 @@ send (shared_ptr socket, char const* message) socket->write (reinterpret_cast(message), strlen(message) + 1); } + /** Basic test to see if Socket can send and receive data */ BOOST_AUTO_TEST_CASE (socket_basic_test) { + using boost::asio::ip::tcp; + TestServer server(false); server.expect (13); - shared_ptr socket (new Socket); - socket->connect (boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), TEST_SERVER_PORT)); + boost::asio::io_service io_service; + tcp::resolver resolver (io_service); + tcp::resolver::query query ("127.0.0.1", dcp::raw_convert(TEST_SERVER_PORT)); + tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); + + auto socket = make_shared(); + socket->connect (*endpoint_iterator); send (socket, "Hello world!"); server.await (); @@ -130,11 +142,18 @@ BOOST_AUTO_TEST_CASE (socket_basic_test) /** Check that the socket "auto-digest" creation works */ BOOST_AUTO_TEST_CASE (socket_digest_test1) { + using boost::asio::ip::tcp; + TestServer server(false); server.expect (13 + 16); + boost::asio::io_service io_service; + tcp::resolver resolver (io_service); + tcp::resolver::query query ("127.0.0.1", dcp::raw_convert(TEST_SERVER_PORT)); + tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); + shared_ptr socket(new Socket); - socket->connect (boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), TEST_SERVER_PORT)); + socket->connect (*endpoint_iterator); { Socket::WriteDigestScope ds(socket); send (socket, "Hello world!"); @@ -152,11 +171,18 @@ BOOST_AUTO_TEST_CASE (socket_digest_test1) /** Check that the socket "auto-digest" round-trip works */ BOOST_AUTO_TEST_CASE (socket_digest_test2) { + using boost::asio::ip::tcp; + TestServer server(true); server.expect (13); + boost::asio::io_service io_service; + tcp::resolver resolver (io_service); + tcp::resolver::query query ("127.0.0.1", dcp::raw_convert(TEST_SERVER_PORT)); + tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); + shared_ptr socket(new Socket); - socket->connect (boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), TEST_SERVER_PORT)); + socket->connect (*endpoint_iterator); { Socket::WriteDigestScope ds(socket); send (socket, "Hello world!");