diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-09-10 22:56:51 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-09-10 22:56:51 +0200 |
| commit | 96f25981e914d27377d13cccdd733d9996130703 (patch) | |
| tree | 91d779656477467d17a6661cb8b22f65cce866cd /test | |
| parent | 23306255085a0b48168d51629f38597ee0bf80ce (diff) | |
Rearrange encoder.rearrange-encoder
Diffstat (limited to 'test')
| -rw-r--r-- | test/client_server_test.cc | 20 | ||||
| -rw-r--r-- | test/j2k_encode_threading_test.cc | 94 | ||||
| -rw-r--r-- | test/wscript | 1 |
3 files changed, 110 insertions, 5 deletions
diff --git a/test/client_server_test.cc b/test/client_server_test.cc index 596668aae..ded3a5dfc 100644 --- a/test/client_server_test.cc +++ b/test/client_server_test.cc @@ -20,15 +20,12 @@ /** @file test/client_server_test.cc - * @brief Test the server class. + * @brief Test the remote encoding code. * @ingroup feature - * - * Create a test image and then encode it using the standard mechanism - * and also using a EncodeServer object running on localhost. Compare the resulting - * encoded data to check that they are the same. */ +#include "lib/content_factory.h" #include "lib/cross.h" #include "lib/dcp_video.h" #include "lib/dcpomatic_log.h" @@ -315,3 +312,16 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k) } +BOOST_AUTO_TEST_CASE(real_encode_with_server) +{ + auto content = content_factory(TestPaths::private_data() / "dolby_aurora.vob"); + auto film = new_test_film2("real_encode_with_server", content); + + EncodeServer server(true, 4); + thread server_thread(boost::bind(&EncodeServer::run, &server)); + + make_and_verify_dcp(film); + + BOOST_CHECK(server.frames_encoded() > 0); +} + diff --git a/test/j2k_encode_threading_test.cc b/test/j2k_encode_threading_test.cc new file mode 100644 index 000000000..42bb582e1 --- /dev/null +++ b/test/j2k_encode_threading_test.cc @@ -0,0 +1,94 @@ +#include "lib/config.h" +#include "lib/content_factory.h" +#include "lib/dcp_encoder.h" +#include "lib/dcp_transcode_job.h" +#include "lib/encode_server_description.h" +#include "lib/film.h" +#include "lib/j2k_encoder.h" +#include "lib/job_manager.h" +#include "lib/make_dcp.h" +#include "lib/transcode_job.h" +#include "test.h" +#include <dcp/cpl.h> +#include <dcp/dcp.h> +#include <dcp/reel.h> +#include <dcp/reel_picture_asset.h> +#include <boost/test/unit_test.hpp> + + +using std::dynamic_pointer_cast; +using std::list; + + +BOOST_AUTO_TEST_CASE(local_threads_created_and_destroyed) +{ + auto film = new_test_film2("local_threads_created_and_destroyed", {}); + Writer writer(film, {}); + J2KEncoder encoder(film, writer); + + encoder.remake_threads(32, {}); + BOOST_CHECK_EQUAL(encoder._threads.size(), 32); + + encoder.remake_threads(9, {}); + BOOST_CHECK_EQUAL(encoder._threads.size(), 9); + + encoder.end(); + BOOST_CHECK_EQUAL(encoder._threads.size(), 0); +} + + +BOOST_AUTO_TEST_CASE(remote_threads_created_and_destroyed) +{ + auto film = new_test_film2("remote_threads_created_and_destroyed", {}); + Writer writer(film, {}); + J2KEncoder encoder(film, writer); + + list<EncodeServerDescription> servers = { + { "fred", 7, SERVER_LINK_VERSION }, + { "jim", 2, SERVER_LINK_VERSION }, + { "sheila", 14, SERVER_LINK_VERSION }, + }; + + encoder.remake_threads(0, servers); + BOOST_CHECK_EQUAL(encoder._threads.size(), 7 + 2 + 14); + + servers = { + { "fred", 7, SERVER_LINK_VERSION }, + { "jim", 5, SERVER_LINK_VERSION }, + { "sheila", 14, SERVER_LINK_VERSION }, + }; + + encoder.remake_threads(0, servers); + BOOST_CHECK_EQUAL(encoder._threads.size(), 7 + 5 + 14); + + servers = { + { "fred", 0, SERVER_LINK_VERSION }, + { "jim", 0, SERVER_LINK_VERSION }, + { "sheila", 11, SERVER_LINK_VERSION }, + }; + + encoder.remake_threads(0, servers); + BOOST_CHECK_EQUAL(encoder._threads.size(), 11); +} + + +BOOST_AUTO_TEST_CASE(frames_not_lost_when_threads_disappear) +{ + auto content = content_factory(TestPaths::private_data() / "clapperboard.mp4"); + auto film = new_test_film2("frames_not_lost", content); + film->write_metadata(); + auto job = make_dcp(film, TranscodeJob::ChangedBehaviour::IGNORE); + auto& encoder = dynamic_pointer_cast<DCPEncoder>(job->_encoder)->_j2k_encoder; + + while (JobManager::instance()->work_to_do()) { + encoder.remake_threads(rand() % 8, {}); + dcpomatic_sleep_seconds(1); + } + + dcp::DCP dcp(film->dir(film->dcp_name())); + dcp.read(); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + BOOST_REQUIRE_EQUAL(dcp.cpls()[0]->reels().size(), 1U); + BOOST_REQUIRE_EQUAL(dcp.cpls()[0]->reels()[0]->main_picture()->intrinsic_duration(), 423U); +} + diff --git a/test/wscript b/test/wscript index f40568e3c..14b682357 100644 --- a/test/wscript +++ b/test/wscript @@ -111,6 +111,7 @@ def build(bld): interrupt_encoder_test.cc isdcf_name_test.cc j2k_bandwidth_test.cc + j2k_encode_threading_test.cc job_manager_test.cc kdm_cli_test.cc kdm_naming_test.cc |
