Add -x32/-x64 suffix to boost libraries when building for Windows.
[dcpomatic.git] / test / socket_test.cc
index 562d106396bb193ff8beec53b6280938a4b9c973..64c15480841513ed6a90f7ed5410250e89926cb9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    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
 
@@ -48,8 +53,11 @@ public:
 
        ~TestServer ()
        {
+               boost::this_thread::disable_interruption dis;
                stop ();
-               _thread.join ();
+               try {
+                       _thread.join ();
+               } catch (...) {}
                delete[] _buffer;
        }
 
@@ -76,7 +84,7 @@ public:
        }
 
 private:
-       void handle (boost::shared_ptr<Socket> socket)
+       void handle (std::shared_ptr<Socket> socket)
        {
                boost::mutex::scoped_lock lm (_mutex);
                BOOST_REQUIRE (_size);
@@ -109,14 +117,22 @@ send (shared_ptr<Socket> socket, char const* message)
        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 ();
@@ -127,11 +143,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<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!");
@@ -149,11 +172,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<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!");