/*
- Copyright (C) 2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2020-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
-#include "lib/server.h"
+
#include "lib/dcpomatic_socket.h"
-#include <boost/thread.hpp>
+#include "lib/server.h"
+#include <dcp/raw_convert.h>
#include <boost/test/unit_test.hpp>
-#include <boost/shared_ptr.hpp>
+#include <boost/thread.hpp>
#include <cstring>
#include <iostream>
-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
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)
try {
_thread.join ();
} catch (...) {}
- delete[] _buffer;
}
void expect (int size)
}
uint8_t const * buffer() const {
- return _buffer;
+ return _buffer.data();
}
void await ()
}
private:
- void handle (boost::shared_ptr<Socket> socket)
+ void handle (std::shared_ptr<Socket> 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 ();
}
boost::thread _thread;
boost::mutex _mutex;
boost::condition _condition;
- uint8_t* _buffer;
+ std::vector<uint8_t> _buffer;
int _size;
bool _result;
bool _digest;
socket->write (reinterpret_cast<uint8_t const *>(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> 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<string>(TEST_SERVER_PORT));
+ tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
+
+ auto socket = make_shared<Socket>();
+ socket->connect (*endpoint_iterator);
send (socket, "Hello world!");
server.await ();
/** 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<string>(TEST_SERVER_PORT));
+ tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
+
shared_ptr<Socket> 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!");
/** 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<string>(TEST_SERVER_PORT));
+ tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
+
shared_ptr<Socket> 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!");