X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Fkdm_naming_test.cc;h=32500553e90e48065c6786064eaa94f5cf628e94;hp=4ff0233dcfddd20e9d1d685a0e839f9a8b650264;hb=9f125fddff88bf62d36381f9d3f09e5240b033d5;hpb=39f0c853beb0363479f4216bd1d598eccd97495c diff --git a/test/kdm_naming_test.cc b/test/kdm_naming_test.cc index 4ff0233dc..32500553e 100644 --- a/test/kdm_naming_test.cc +++ b/test/kdm_naming_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. @@ -18,22 +18,25 @@ */ + #include "lib/cinema.h" -#include "lib/screen.h" #include "lib/config.h" #include "lib/content_factory.h" #include "lib/film.h" #include "lib/kdm_with_metadata.h" +#include "lib/screen.h" #include "test.h" #include -#include + +using std::dynamic_pointer_cast; using std::list; +using std::make_shared; +using std::shared_ptr; using std::string; using std::vector; -using boost::shared_ptr; using boost::optional; -using boost::dynamic_pointer_cast; + static bool @@ -42,85 +45,90 @@ confirm_overwrite (boost::filesystem::path) return true; } + static shared_ptr cinema_a_screen_1; static shared_ptr cinema_a_screen_2; static shared_ptr cinema_b_screen_x; static shared_ptr cinema_b_screen_y; static shared_ptr cinema_b_screen_z; + BOOST_AUTO_TEST_CASE (single_kdm_naming_test) { - Config* c = Config::instance(); + auto c = Config::instance(); - dcp::Certificate cert = c->decryption_chain()->leaf(); + auto crypt_cert = c->decryption_chain()->leaf(); /* Cinema A: UTC +4:30 */ - shared_ptr cinema_a (new Cinema("Cinema A", list(), "", 4, 30)); - cinema_a_screen_1.reset(new dcpomatic::Screen("Screen 1", "", cert, vector())); + auto cinema_a = make_shared("Cinema A", vector(), "", 4, 30); + cinema_a_screen_1 = std::make_shared("Screen 1", "", crypt_cert, boost::none, vector()); cinema_a->add_screen (cinema_a_screen_1); - cinema_a_screen_2.reset(new dcpomatic::Screen("Screen 2", "", cert, vector())); + cinema_a_screen_2 = std::make_shared("Screen 2", "", crypt_cert, boost::none, vector()); cinema_a->add_screen (cinema_a_screen_2); c->add_cinema (cinema_a); /* Cinema B: UTC -1:00 */ - shared_ptr cinema_b (new Cinema("Cinema B", list(), "", -1, 0)); - cinema_b_screen_x.reset(new dcpomatic::Screen("Screen X", "", cert, vector())); + auto cinema_b = make_shared("Cinema B", vector(), "", -1, 0); + cinema_b_screen_x = std::make_shared("Screen X", "", crypt_cert, boost::none, vector()); cinema_b->add_screen (cinema_b_screen_x); - cinema_b_screen_y.reset(new dcpomatic::Screen("Screen Y", "", cert, vector())); + cinema_b_screen_y = std::make_shared("Screen Y", "", crypt_cert, boost::none, vector()); cinema_b->add_screen (cinema_b_screen_y); - cinema_b_screen_z.reset(new dcpomatic::Screen("Screen Z", "", cert, vector())); + cinema_b_screen_z = std::make_shared("Screen Z", "", crypt_cert, boost::none, vector()); cinema_b->add_screen (cinema_b_screen_z); c->add_cinema (cinema_a); /* Film */ boost::filesystem::remove_all ("build/test/single_kdm_naming_test"); - shared_ptr film = new_test_film2 ("single_kdm_naming_test"); + auto film = new_test_film2 ("single_kdm_naming_test"); film->set_name ("my_great_film"); - film->examine_and_add_content (content_factory("test/data/flat_black.png").front()); + film->examine_and_add_content (content_factory("test/data/flat_black.png")[0]); BOOST_REQUIRE (!wait_for_jobs()); film->set_encrypted (true); - film->make_dcp (); - BOOST_REQUIRE (!wait_for_jobs()); - film->write_metadata (); - vector cpls = film->cpls (); + make_and_verify_dcp (film); + auto cpls = film->cpls (); BOOST_REQUIRE(cpls.size() == 1); - dcp::LocalTime from (cert.not_before()); + auto sign_cert = c->signer_chain()->leaf(); + + dcp::LocalTime from (sign_cert.not_before()); from.add_months (2); - dcp::LocalTime until (cert.not_after()); + dcp::LocalTime until (sign_cert.not_after()); until.add_months (-2); - string const from_string = from.date() + " " + from.time_of_day(true, false); - string const until_string = until.date() + " " + until.time_of_day(true, false); + auto const from_string = from.date() + " " + from.time_of_day(true, false); + auto const until_string = until.date() + " " + until.time_of_day(true, false); + + std::vector period_checks; - boost::filesystem::path cpl = cpls.front().cpl_file; - KDMWithMetadataPtr kdm = kdm_for_screen ( - film, - cpls.front().cpl_file, + auto cpl = cpls.front().cpl_file; + std::function make_kdm = [film, cpl](dcp::LocalTime begin, dcp::LocalTime end) { + return film->make_kdm(cpl, begin, end); + }; + auto kdm = kdm_for_screen ( + make_kdm, cinema_a_screen_1, boost::posix_time::time_from_string(from_string), boost::posix_time::time_from_string(until_string), - dcp::MODIFIED_TRANSITIONAL_1, + dcp::Formulation::MODIFIED_TRANSITIONAL_1, false, - optional() + optional(), + period_checks ); - list kdms; - kdms.push_back (kdm); - write_files ( - kdms, + { kdm }, boost::filesystem::path("build/test/single_kdm_naming_test"), dcp::NameFormat("KDM %c - %s - %f - %b - %e"), &confirm_overwrite ); - string from_time = from.time_of_day (true, false); + auto from_time = from.time_of_day (true, false); boost::algorithm::replace_all (from_time, ":", "-"); - string until_time = until.time_of_day (true, false); + auto until_time = until.time_of_day (true, false); boost::algorithm::replace_all (until_time, ":", "-"); - string const ref = String::compose("KDM_Cinema_A_-_Screen_1_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time); + auto const dcp_date = boost::gregorian::to_iso_string(film->isdcf_date()); + auto const ref = String::compose("KDM_Cinema_A_-_Screen_1_-_MyGreatFilm_TST-1_F_XX-XX_MOS_2K_%1_SMPTE_OV_-_%2_%3_-_%4_%5.xml", dcp_date, from.date(), from_time, until.date(), until_time); BOOST_CHECK_MESSAGE (boost::filesystem::exists("build/test/single_kdm_naming_test/" + ref), "File " << ref << " not found"); } @@ -129,49 +137,53 @@ BOOST_AUTO_TEST_CASE (directory_kdm_naming_test, * boost::unit_test::depends_on( { using boost::filesystem::path; - dcp::Certificate cert = Config::instance()->decryption_chain()->leaf(); - /* Film */ boost::filesystem::remove_all ("build/test/directory_kdm_naming_test"); - shared_ptr film = new_test_film2 ("directory_kdm_naming_test"); + auto film = new_test_film2 ( + "directory_kdm_naming_test", + { content_factory("test/data/flat_black.png")[0] } + ); + film->set_name ("my_great_film"); - film->examine_and_add_content (content_factory("test/data/flat_black.png").front()); - BOOST_REQUIRE (!wait_for_jobs()); film->set_encrypted (true); - film->make_dcp (); - BOOST_REQUIRE (!wait_for_jobs()); - film->write_metadata (); - vector cpls = film->cpls (); + make_and_verify_dcp (film); + auto cpls = film->cpls (); BOOST_REQUIRE(cpls.size() == 1); - dcp::LocalTime from (cert.not_before()); + auto sign_cert = Config::instance()->signer_chain()->leaf(); + + dcp::LocalTime from (sign_cert.not_before()); from.add_months (2); - dcp::LocalTime until (cert.not_after()); + dcp::LocalTime until (sign_cert.not_after()); until.add_months (-2); string const from_string = from.date() + " " + from.time_of_day(true, false); string const until_string = until.date() + " " + until.time_of_day(true, false); - list > screens; - screens.push_back (cinema_a_screen_2); - screens.push_back (cinema_b_screen_x); - screens.push_back (cinema_a_screen_1); - screens.push_back (cinema_b_screen_z); + vector> screens = { + cinema_a_screen_2, cinema_b_screen_x, cinema_a_screen_1, (cinema_b_screen_z) + }; - path const cpl = cpls.front().cpl_file; - string const cpl_id = cpls.front().cpl_id; + auto const cpl = cpls.front().cpl_file; + auto const cpl_id = cpls.front().cpl_id; + std::vector period_checks; list kdms; - BOOST_FOREACH (shared_ptr i, screens) { - KDMWithMetadataPtr kdm = kdm_for_screen ( - film, - cpls.front().cpl_file, + + std::function make_kdm = [film, cpls](dcp::LocalTime begin, dcp::LocalTime end) { + return film->make_kdm(cpls.front().cpl_file, begin, end); + }; + + for (auto i: screens) { + auto kdm = kdm_for_screen ( + make_kdm, i, boost::posix_time::time_from_string(from_string), boost::posix_time::time_from_string(until_string), - dcp::MODIFIED_TRANSITIONAL_1, + dcp::Formulation::MODIFIED_TRANSITIONAL_1, false, - optional() + optional(), + period_checks ); kdms.push_back (kdm); @@ -182,51 +194,55 @@ BOOST_AUTO_TEST_CASE (directory_kdm_naming_test, * boost::unit_test::depends_on( path("build/test/directory_kdm_naming_test"), dcp::NameFormat("%c - %s - %f - %b - %e"), #ifdef DCPOMATIC_WINDOWS - /* With %i in the format the path is too long for Windows */ - dcp::NameFormat("KDM %c - %s - %f - %b - %e"), + /* Use a shorter name on Windows so that the paths aren't too long */ + dcp::NameFormat("KDM %f"), #else dcp::NameFormat("KDM %c - %s - %f - %b - %e - %i"), #endif &confirm_overwrite ); - string from_time = from.time_of_day (true, false); + auto from_time = from.time_of_day (true, false); boost::algorithm::replace_all (from_time, ":", "-"); - string until_time = until.time_of_day (true, false); + auto until_time = until.time_of_day (true, false); boost::algorithm::replace_all (until_time, ":", "-"); + auto const dcp_date = boost::gregorian::to_iso_string(film->isdcf_date()); + auto const dcp_name = String::compose("MyGreatFilm_TST-1_F_XX-XX_MOS_2K_%1_SMPTE_OV", dcp_date); + auto const common = String::compose("%1_-_%2_%3_-_%4_%5", dcp_name, from.date(), from_time, until.date(), until_time); + path const base = "build/test/directory_kdm_naming_test"; - path dir_a = String::compose("Cinema_A_-_%s_-_my_great_film_-_%1_%2_-_%3_%4", from.date(), from_time, until.date(), until_time); + path dir_a = String::compose("Cinema_A_-_%s_-_%1", common); BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_a), "Directory " << dir_a << " not found"); - path dir_b = String::compose("Cinema_B_-_%s_-_my_great_film_-_%1_%2_-_%3_%4", from.date(), from_time, until.date(), until_time); + path dir_b = String::compose("Cinema_B_-_%s_-_%1", common); BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_b), "Directory " << dir_b << " not found"); #ifdef DCPOMATIC_WINDOWS - path ref = String::compose("KDM_Cinema_A_-_Screen_2_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time); + path ref = String::compose("KDM_%1.xml", dcp_name); #else - path ref = String::compose("KDM_Cinema_A_-_Screen_2_-_my_great_film_-_%1_%2_-_%3_%4_-_%5.xml", from.date(), from_time, until.date(), until_time, cpl_id); + path ref = String::compose("KDM_Cinema_A_-_Screen_2_-_%1_-_%2.xml", common, cpl_id); #endif BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_a / ref), "File " << ref << " not found"); #ifdef DCPOMATIC_WINDOWS - ref = String::compose("KDM_Cinema_B_-_Screen_X_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time); + ref = String::compose("KDM_%1.xml", dcp_name); #else - ref = String::compose("KDM_Cinema_B_-_Screen_X_-_my_great_film_-_%1_%2_-_%3_%4_-_%5.xml", from.date(), from_time, until.date(), until_time, cpl_id); + ref = String::compose("KDM_Cinema_B_-_Screen_X_-_%1_-_%2.xml", common, cpl_id); #endif BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_b / ref), "File " << ref << " not found"); #ifdef DCPOMATIC_WINDOWS - ref = String::compose("KDM_Cinema_A_-_Screen_1_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time); + ref = String::compose("KDM_%1.xml", dcp_name); #else - ref = String::compose("KDM_Cinema_A_-_Screen_1_-_my_great_film_-_%1_%2_-_%3_%4_-_%5.xml", from.date(), from_time, until.date(), until_time, cpl_id); + ref = String::compose("KDM_Cinema_A_-_Screen_1_-_%1_-_%2.xml", common, cpl_id); #endif BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_a / ref), "File " << ref << " not found"); #ifdef DCPOMATIC_WINDOWS - ref = String::compose("KDM_Cinema_B_-_Screen_Z_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time); + ref = String::compose("KDM_%1.xml", dcp_name); #else - ref = String::compose("KDM_Cinema_B_-_Screen_Z_-_my_great_film_-_%1_%2_-_%3_%4_-_%5.xml", from.date(), from_time, until.date(), until_time, cpl_id); + ref = String::compose("KDM_Cinema_B_-_Screen_Z_-_%1_-_%2.xml", common, cpl_id); #endif BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_b / ref), "File " << ref << " not found"); }