Fix hang in client_server tests.
[dcpomatic.git] / test / client_server_test.cc
index f12c5335d42f3480ffddfe4fc828bd767cc6c016..5e4c2540e7b2fa3b5382cfa8571756d484c2b1c8 100644 (file)
@@ -20,6 +20,7 @@
 
 /** @file  test/client_server_test.cc
  *  @brief Test the server class.
+ *  @ingroup specific
  *
  *  Create a test image and then encode it using the standard mechanism
  *  and also using a EncodeServer object running on localhost.  Compare the resulting
@@ -87,7 +88,6 @@ BOOST_AUTO_TEST_CASE (client_server_test_rgb)
        shared_ptr<PlayerVideo> pvf (
                new PlayerVideo (
                        shared_ptr<ImageProxy> (new RawImageProxy (image)),
-                       DCPTime (),
                        Crop (),
                        optional<double> (),
                        dcp::Size (1998, 1080),
@@ -115,7 +115,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_rgb)
 
        EncodeServer* server = new EncodeServer (log, true, 2);
 
-       new thread (boost::bind (&EncodeServer::run, server));
+       thread* server_thread = new thread (boost::bind (&EncodeServer::run, server));
 
        /* Let the server get itself ready */
        dcpomatic_sleep (1);
@@ -135,6 +135,9 @@ BOOST_AUTO_TEST_CASE (client_server_test_rgb)
                delete *i;
        }
 
+       server->stop ();
+       server_thread->join ();
+       delete server_thread;
        delete server;
 }
 
@@ -167,7 +170,6 @@ BOOST_AUTO_TEST_CASE (client_server_test_yuv)
        shared_ptr<PlayerVideo> pvf (
                new PlayerVideo (
                        shared_ptr<ImageProxy> (new RawImageProxy (image)),
-                       DCPTime (),
                        Crop (),
                        optional<double> (),
                        dcp::Size (1998, 1080),
@@ -195,7 +197,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_yuv)
 
        EncodeServer* server = new EncodeServer (log, true, 2);
 
-       new thread (boost::bind (&EncodeServer::run, server));
+       thread* server_thread = new thread (boost::bind (&EncodeServer::run, server));
 
        /* Let the server get itself ready */
        dcpomatic_sleep (1);
@@ -215,6 +217,9 @@ BOOST_AUTO_TEST_CASE (client_server_test_yuv)
                delete *i;
        }
 
+       server_thread->join ();
+       delete server_thread;
+
        delete server;
 }
 
@@ -234,7 +239,6 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
        shared_ptr<PlayerVideo> raw_pvf (
                new PlayerVideo (
                        shared_ptr<ImageProxy> (new RawImageProxy (image)),
-                       DCPTime (),
                        Crop (),
                        optional<double> (),
                        dcp::Size (1998, 1080),
@@ -261,7 +265,6 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
        shared_ptr<PlayerVideo> j2k_pvf (
                new PlayerVideo (
                        shared_ptr<ImageProxy> (new J2KImageProxy (raw_locally_encoded, dcp::Size (1998, 1080), AV_PIX_FMT_XYZ12LE)),
-                       DCPTime (),
                        Crop (),
                        optional<double> (),
                        dcp::Size (1998, 1080),
@@ -287,7 +290,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
 
        EncodeServer* server = new EncodeServer (log, true, 2);
 
-       new thread (boost::bind (&EncodeServer::run, server));
+       thread* server_thread = new thread (boost::bind (&EncodeServer::run, server));
 
        /* Let the server get itself ready */
        dcpomatic_sleep (1);
@@ -307,5 +310,8 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
                delete *i;
        }
 
+       server->stop ();
+       server_thread->join ();
+       delete server_thread;
        delete server;
 }