From 369821c41e62d4cce506cd4206f9db0d91b4f643 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 2 Feb 2021 16:36:31 +0100 Subject: [PATCH] Reduce the disk space needed when running tests. --- test/atmos_test.cc | 29 ++++++++++++------- test/closed_caption_test.cc | 23 ++++++++++----- test/content_test.cc | 6 +++- test/ffmpeg_encoder_test.cc | 20 ++++++++----- test/import_dcp_test.cc | 56 ++++++++++++++++++++---------------- test/silence_padding_test.cc | 6 +++- test/srt_subtitle_test.cc | 7 +++-- test/ssa_subtitle_test.cc | 7 +++-- test/test.cc | 21 +++++++++++++- test/test.h | 20 ++++++++++++- 10 files changed, 138 insertions(+), 57 deletions(-) diff --git a/test/atmos_test.cc b/test/atmos_test.cc index 6689ee8d7..50b642c1f 100644 --- a/test/atmos_test.cc +++ b/test/atmos_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. @@ -31,15 +31,18 @@ using std::string; using std::vector; +using std::make_shared; using boost::optional; using std::shared_ptr; BOOST_AUTO_TEST_CASE (atmos_passthrough_test) { - shared_ptr film = new_test_film2 ("atmos_passthrough_test"); - boost::filesystem::path ref = TestPaths::private_data() / "atmos_asset.mxf"; - shared_ptr content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front(); + Cleanup cl; + + auto film = new_test_film2 ("atmos_passthrough_test", &cl); + auto ref = TestPaths::private_data() / "atmos_asset.mxf"; + auto content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front(); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs()); @@ -47,14 +50,18 @@ BOOST_AUTO_TEST_CASE (atmos_passthrough_test) BOOST_REQUIRE (!wait_for_jobs()); BOOST_REQUIRE (mxf_atmos_files_same(ref, dcp_file(film, "atmos"), true)); + + cl.run (); } BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test) { - shared_ptr film = new_test_film2 ("atmos_encrypted_passthrough_test"); - boost::filesystem::path ref = TestPaths::private_data() / "atmos_asset.mxf"; - shared_ptr content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front(); + Cleanup cl; + + auto film = new_test_film2 ("atmos_encrypted_passthrough_test", &cl); + auto ref = TestPaths::private_data() / "atmos_asset.mxf"; + auto content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front(); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs()); @@ -65,7 +72,7 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test) BOOST_REQUIRE (!mxf_atmos_files_same(ref, dcp_file(film, "atmos"))); - dcp::EncryptedKDM kdm = film->make_kdm ( + auto kdm = film->make_kdm ( Config::instance()->decryption_chain()->leaf(), vector(), dcp_file(film, "cpl"), @@ -76,8 +83,8 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test) optional() ); - shared_ptr film2 = new_test_film2 ("atmos_encrypted_passthrough_test2"); - shared_ptr content2 (new DCPContent(film->dir(film->dcp_name()))); + auto film2 = new_test_film2 ("atmos_encrypted_passthrough_test2", &cl); + auto content2 = make_shared(film->dir(film->dcp_name())); content2->add_kdm (kdm); film2->examine_and_add_content (content2); BOOST_REQUIRE (!wait_for_jobs()); @@ -86,5 +93,7 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test) BOOST_REQUIRE (!wait_for_jobs()); BOOST_CHECK (mxf_atmos_files_same(ref, dcp_file(film2, "atmos"), true)); + + cl.run (); } diff --git a/test/closed_caption_test.cc b/test/closed_caption_test.cc index 31824b443..cc2dca930 100644 --- a/test/closed_caption_test.cc +++ b/test/closed_caption_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018 Carl Hetherington + Copyright (C) 2018-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -29,13 +29,16 @@ #include using std::list; +using std::make_shared; using std::shared_ptr; /** Basic test that Interop closed captions are written */ BOOST_AUTO_TEST_CASE (closed_caption_test1) { - shared_ptr film = new_test_film2 ("closed_caption_test1"); - shared_ptr content (new StringTextFileContent("test/data/subrip.srt")); + Cleanup cl; + + auto film = new_test_film2 ("closed_caption_test1", &cl); + auto content = make_shared("test/data/subrip.srt"); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs ()); @@ -54,17 +57,21 @@ BOOST_AUTO_TEST_CASE (closed_caption_test1) BOOST_REQUIRE_EQUAL (check.cpls().size(), 1U); BOOST_REQUIRE_EQUAL (check.cpls().front()->reels().size(), 1U); BOOST_REQUIRE (!check.cpls().front()->reels().front()->closed_captions().empty()); + + cl.run (); } /** Test multiple closed captions */ BOOST_AUTO_TEST_CASE (closed_caption_test2) { - shared_ptr film = new_test_film2 ("closed_caption_test2"); - shared_ptr content1 (new StringTextFileContent("test/data/subrip.srt")); + Cleanup cl; + + auto film = new_test_film2 ("closed_caption_test2", &cl); + auto content1 = make_shared("test/data/subrip.srt"); film->examine_and_add_content (content1); - shared_ptr content2 (new StringTextFileContent("test/data/subrip2.srt")); + auto content2 = make_shared("test/data/subrip2.srt"); film->examine_and_add_content (content2); - shared_ptr content3 (new StringTextFileContent("test/data/subrip3.srt")); + auto content3 = make_shared("test/data/subrip3.srt"); film->examine_and_add_content (content3); BOOST_REQUIRE (!wait_for_jobs ()); @@ -98,4 +105,6 @@ BOOST_AUTO_TEST_CASE (closed_caption_test2) BOOST_CHECK_EQUAL ((*i)->annotation_text(), "Third track"); BOOST_REQUIRE (static_cast((*i)->language())); BOOST_CHECK_EQUAL ((*i)->language().get(), "it-IT"); + + cl.run (); } diff --git a/test/content_test.cc b/test/content_test.cc index 0815e16c2..cf34251f5 100644 --- a/test/content_test.cc +++ b/test/content_test.cc @@ -156,12 +156,16 @@ BOOST_AUTO_TEST_CASE (content_test5) /** Sync error #1833 */ BOOST_AUTO_TEST_CASE (content_test6) { - shared_ptr film = new_test_film2 ("content_test6"); + Cleanup cl; + + auto film = new_test_film2 ("content_test6", &cl); film->examine_and_add_content (content_factory(TestPaths::private_data() / "fha.mkv").front()); BOOST_REQUIRE (!wait_for_jobs()); film->make_dcp (); BOOST_REQUIRE (!wait_for_jobs()); check_dcp (TestPaths::private_data() / "fha", film); + + cl.run (); } diff --git a/test/ffmpeg_encoder_test.cc b/test/ffmpeg_encoder_test.cc index 7a967b200..aab3fd8ef 100644 --- a/test/ffmpeg_encoder_test.cc +++ b/test/ffmpeg_encoder_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2017-2019 Carl Hetherington + Copyright (C) 2017-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -36,12 +36,15 @@ using std::string; using std::shared_ptr; +using std::make_shared; using boost::optional; using namespace dcpomatic; static void ffmpeg_content_test (int number, boost::filesystem::path content, ExportFormat format) { + Cleanup cl; + string name = "ffmpeg_encoder_"; string extension; switch (format) { @@ -60,19 +63,22 @@ ffmpeg_content_test (int number, boost::filesystem::path content, ExportFormat f name = String::compose("%1_test%2", name, number); - shared_ptr film = new_test_film (name); + shared_ptr film = new_test_film2 (name, &cl); film->set_name (name); - shared_ptr c (new FFmpegContent(content)); - film->set_container (Ratio::from_id ("185")); + auto c = make_shared(content); film->set_audio_channels (6); film->examine_and_add_content (c); BOOST_REQUIRE (!wait_for_jobs ()); film->write_metadata (); - shared_ptr job (new TranscodeJob (film)); - FFmpegEncoder encoder (film, job, String::compose("build/test/%1.%2", name, extension), format, false, false, false, 23); + auto job = make_shared(film); + auto file = boost::filesystem::path("build") / "test" / String::compose("%1.%2", name, extension); + cl.add (file); + FFmpegEncoder encoder (film, job, file, format, false, false, false, 23); encoder.go (); + + cl.run (); } /** Red / green / blue MP4 -> Prores */ @@ -102,7 +108,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_test4) /** Still image -> Prores */ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_test5) { - shared_ptr film = new_test_film ("ffmpeg_encoder_prores_test5"); + auto film = new_test_film ("ffmpeg_encoder_prores_test5"); film->set_name ("ffmpeg_encoder_prores_test5"); shared_ptr c (new ImageContent(TestPaths::private_data() / "bbc405.png")); film->set_container (Ratio::from_id ("185")); diff --git a/test/import_dcp_test.cc b/test/import_dcp_test.cc index 7729cfe5b..44f3c7d44 100644 --- a/test/import_dcp_test.cc +++ b/test/import_dcp_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014-2020 Carl Hetherington + Copyright (C) 2014-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,11 +18,13 @@ */ + /** @file test/import_dcp_test.cc * @brief Test import of encrypted DCPs. * @ingroup feature */ + #include "test.h" #include "lib/film.h" #include "lib/screen.h" @@ -40,22 +42,25 @@ #include #include + using std::vector; using std::string; using std::map; using std::shared_ptr; using std::dynamic_pointer_cast; +using std::make_shared; + /** Make an encrypted DCP, import it and make a new unencrypted DCP */ BOOST_AUTO_TEST_CASE (import_dcp_test) { - shared_ptr A = new_test_film ("import_dcp_test"); + auto A = new_test_film ("import_dcp_test"); A->set_container (Ratio::from_id ("185")); A->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); A->set_name ("frobozz"); A->set_interop (false); - shared_ptr c (new FFmpegContent("test/data/test.mp4")); + auto c = make_shared("test/data/test.mp4"); A->examine_and_add_content (c); A->set_encrypted (true); BOOST_CHECK (!wait_for_jobs ()); @@ -66,10 +71,10 @@ BOOST_AUTO_TEST_CASE (import_dcp_test) dcp::DCP A_dcp ("build/test/import_dcp_test/" + A->dcp_name()); A_dcp.read (); - Config::instance()->set_decryption_chain (shared_ptr (new dcp::CertificateChain (openssl_path ()))); + Config::instance()->set_decryption_chain (make_shared(openssl_path())); /* Dear future-carl: I suck! I thought you wouldn't still be running these tests in 2030! Sorry! */ - dcp::EncryptedKDM kdm = A->make_kdm ( + auto kdm = A->make_kdm ( Config::instance()->decryption_chain()->leaf (), vector(), A_dcp.cpls().front()->file().get(), @@ -79,17 +84,17 @@ BOOST_AUTO_TEST_CASE (import_dcp_test) true, 0 ); - shared_ptr B = new_test_film ("import_dcp_test2"); + auto B = new_test_film ("import_dcp_test2"); B->set_container (Ratio::from_id ("185")); B->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); B->set_name ("frobozz"); B->set_interop (false); - shared_ptr d (new DCPContent("build/test/import_dcp_test/" + A->dcp_name())); + auto d = make_shared("build/test/import_dcp_test/" + A->dcp_name()); B->examine_and_add_content (d); BOOST_CHECK (!wait_for_jobs ()); d->add_kdm (kdm); - JobManager::instance()->add (shared_ptr (new ExamineContentJob (B, d))); + JobManager::instance()->add (make_shared(B, d)); BOOST_CHECK (!wait_for_jobs ()); B->make_dcp (); @@ -103,9 +108,11 @@ BOOST_AUTO_TEST_CASE (import_dcp_test) /** Check that DCP markers are imported correctly */ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) { + Cleanup cl; + /* Make a DCP with some markers */ - shared_ptr film = new_test_film2 ("import_dcp_markers_test"); - shared_ptr content = content_factory("test/data/flat_red.png").front(); + auto film = new_test_film2 ("import_dcp_markers_test", &cl); + auto content = content_factory("test/data/flat_red.png").front(); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs()); @@ -119,8 +126,8 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) BOOST_REQUIRE (!wait_for_jobs()); /* Import the DCP to a new film and check the markers */ - shared_ptr film2 = new_test_film2 ("import_dcp_markers_test2"); - shared_ptr imported (new DCPContent(film->dir(film->dcp_name()))); + auto film2 = new_test_film2 ("import_dcp_markers_test2", &cl); + auto imported = make_shared(film->dir(film->dcp_name())); film2->examine_and_add_content (imported); BOOST_REQUIRE (!wait_for_jobs()); film2->write_metadata (); @@ -130,7 +137,7 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) */ BOOST_CHECK_EQUAL (imported->markers().size(), 4U); - map markers = imported->markers(); + auto markers = imported->markers(); BOOST_REQUIRE(markers.find(dcp::Marker::FFOC) != markers.end()); BOOST_CHECK(markers[dcp::Marker::FFOC] == dcpomatic::ContentTime(184000)); BOOST_REQUIRE(markers.find(dcp::Marker::FFMC) != markers.end()); @@ -139,7 +146,7 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) BOOST_CHECK(markers[dcp::Marker::LFMC] == dcpomatic::ContentTime(960000)); /* Load that film and check that the markers have been loaded */ - shared_ptr film3(new Film(boost::filesystem::path("build/test/import_dcp_markers_test2"))); + auto film3 = make_shared(boost::filesystem::path("build/test/import_dcp_markers_test2")); film3->read_metadata (); BOOST_REQUIRE_EQUAL (film3->content().size(), 1U); shared_ptr reloaded = dynamic_pointer_cast(film3->content().front()); @@ -154,6 +161,8 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) BOOST_CHECK(markers[dcp::Marker::FFMC] == dcpomatic::ContentTime(904000)); BOOST_REQUIRE(markers.find(dcp::Marker::LFMC) != markers.end()); BOOST_CHECK(markers[dcp::Marker::LFMC] == dcpomatic::ContentTime(960000)); + + cl.run (); } @@ -161,28 +170,25 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test) BOOST_AUTO_TEST_CASE (import_dcp_metadata_test) { /* Make a DCP with some ratings and a content version */ - shared_ptr film = new_test_film2 ("import_dcp_metadata_test"); - shared_ptr content = content_factory("test/data/flat_red.png").front(); + auto film = new_test_film2 ("import_dcp_metadata_test"); + auto content = content_factory("test/data/flat_red.png").front(); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs()); content->video->set_length (10); - std::vector ratings; - ratings.push_back (dcp::Rating("BBFC", "15")); - ratings.push_back (dcp::Rating("MPAA", "NC-17")); + vector ratings = { {"BBFC", "15"}, {"MPAA", "NC-17"} }; film->set_ratings (ratings); - vector cv; - cv.push_back ("Fred"); + vector cv = { "Fred "}; film->set_content_versions (cv); film->make_dcp (); BOOST_REQUIRE (!wait_for_jobs()); /* Import the DCP to a new film and check the metadata */ - shared_ptr film2 = new_test_film2 ("import_dcp_metadata_test2"); - shared_ptr imported (new DCPContent(film->dir(film->dcp_name()))); + auto film2 = new_test_film2 ("import_dcp_metadata_test2"); + auto imported = make_shared(film->dir(film->dcp_name())); film2->examine_and_add_content (imported); BOOST_REQUIRE (!wait_for_jobs()); film2->write_metadata (); @@ -191,10 +197,10 @@ BOOST_AUTO_TEST_CASE (import_dcp_metadata_test) BOOST_CHECK (imported->content_versions() == cv); /* Load that film and check that the metadata has been loaded */ - shared_ptr film3(new Film(boost::filesystem::path("build/test/import_dcp_metadata_test2"))); + auto film3 = make_shared(boost::filesystem::path("build/test/import_dcp_metadata_test2")); film3->read_metadata (); BOOST_REQUIRE_EQUAL (film3->content().size(), 1U); - shared_ptr reloaded = dynamic_pointer_cast(film3->content().front()); + auto reloaded = dynamic_pointer_cast(film3->content().front()); BOOST_REQUIRE (reloaded); BOOST_CHECK (reloaded->ratings() == ratings); diff --git a/test/silence_padding_test.cc b/test/silence_padding_test.cc index 11c5bd0d1..d3382f30a 100644 --- a/test/silence_padding_test.cc +++ b/test/silence_padding_test.cc @@ -136,7 +136,9 @@ BOOST_AUTO_TEST_CASE (silence_padding_test) BOOST_AUTO_TEST_CASE (silence_padding_test2) { - auto film = new_test_film2 ("silence_padding_test2"); + Cleanup cl; + + auto film = new_test_film2 ("silence_padding_test2", &cl); auto content = make_shared(TestPaths::private_data() / "cars.mov"); film->examine_and_add_content (content); BOOST_REQUIRE (!wait_for_jobs()); @@ -146,4 +148,6 @@ BOOST_AUTO_TEST_CASE (silence_padding_test2) film->make_dcp (); BOOST_REQUIRE (!wait_for_jobs()); + + cl.run (); } diff --git a/test/srt_subtitle_test.cc b/test/srt_subtitle_test.cc index d07d70ba0..3fe9bc2d2 100644 --- a/test/srt_subtitle_test.cc +++ b/test/srt_subtitle_test.cc @@ -98,10 +98,11 @@ check_subtitle_file (shared_ptr film, boost::filesystem::path ref) /** Make another DCP with a longer .srt file */ BOOST_AUTO_TEST_CASE (srt_subtitle_test3) { - shared_ptr film = new_test_film ("srt_subtitle_test3"); + Cleanup cl; + + shared_ptr film = new_test_film2 ("srt_subtitle_test3", &cl); film->set_container (Ratio::from_id ("185")); - film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); film->set_interop (true); film->set_audio_channels (6); @@ -116,6 +117,8 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test3) BOOST_REQUIRE (!wait_for_jobs()); check_subtitle_file (film, TestPaths::private_data() / "Ankoemmling_short.xml"); + + cl.run (); } /** Build a small DCP with no picture and a single subtitle overlaid onto it */ diff --git a/test/ssa_subtitle_test.cc b/test/ssa_subtitle_test.cc index 0756deed9..c7e4c39a6 100644 --- a/test/ssa_subtitle_test.cc +++ b/test/ssa_subtitle_test.cc @@ -41,10 +41,11 @@ using std::shared_ptr; /** Make a DCP with subs from a .ssa file */ BOOST_AUTO_TEST_CASE (ssa_subtitle_test1) { - shared_ptr film = new_test_film ("ssa_subtitle_test1"); + Cleanup cl; + + shared_ptr film = new_test_film2 ("ssa_subtitle_test1", &cl); film->set_container (Ratio::from_id ("185")); - film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); film->set_interop (true); shared_ptr content (new StringTextFileContent(TestPaths::private_data() / "DKH_UT_EN20160601def.ssa")); @@ -61,4 +62,6 @@ BOOST_AUTO_TEST_CASE (ssa_subtitle_test1) list ignore; ignore.push_back ("SubtitleID"); check_xml (subtitle_file(film), TestPaths::private_data() / "DKH_UT_EN20160601def.xml", ignore); + + cl.run (); } diff --git a/test/test.cc b/test/test.cc index 6c811221d..292b4e1d9 100644 --- a/test/test.cc +++ b/test/test.cc @@ -176,12 +176,15 @@ new_test_film (string name) } shared_ptr -new_test_film2 (string name) +new_test_film2 (string name, Cleanup* cleanup) { auto p = test_film_dir (name); if (boost::filesystem::exists (p)) { boost::filesystem::remove_all (p); } + if (cleanup) { + cleanup->add (p); + } auto film = make_shared(p); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST")); @@ -811,3 +814,19 @@ operator<< (std::ostream&s, VideoFrameType f) return s; } + +void +Cleanup::add (boost::filesystem::path path) +{ + _paths.push_back (path); +} + + +void +Cleanup::run () +{ + boost::system::error_code ec; + for (auto i: _paths) { + boost::filesystem::remove_all (i, ec); + } +} diff --git a/test/test.h b/test/test.h index da00fe688..5a2246894 100644 --- a/test/test.h +++ b/test/test.h @@ -36,10 +36,27 @@ public: static boost::filesystem::path xsd(); }; + +class Cleanup +{ +public: + void add (boost::filesystem::path path); + + /* Remove everything passed to add(). We don't do this + * in a destructor so that results of failed tests aren't + * deleted. + */ + void run (); + +private: + std::vector _paths; +}; + + extern bool wait_for_jobs (); extern void setup_test_config (); extern std::shared_ptr new_test_film (std::string); -extern std::shared_ptr new_test_film2 (std::string); +extern std::shared_ptr new_test_film2 (std::string, Cleanup* cleanup = nullptr); extern void check_dcp (boost::filesystem::path, boost::filesystem::path); extern void check_dcp (boost::filesystem::path, std::shared_ptr); extern void check_file (boost::filesystem::path ref, boost::filesystem::path check); @@ -57,6 +74,7 @@ void check_one_frame (boost::filesystem::path dcp, int64_t index, boost::filesys extern boost::filesystem::path subtitle_file (std::shared_ptr film); extern void make_random_file (boost::filesystem::path path, size_t size); + class LogSwitcher { public: -- 2.30.2