X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Fdcp_digest_file_test.cc;h=f22aa6d67cc97d869826d85d945b08dbc6b3cc01;hb=a4a7d9ef34f2f083b0ba9e32e933ea5c64d2352d;hp=85928b6bbac39421509571c9e4eba4821e09be54;hpb=2034cf8a82be21d4d07de81ae40c8255da1ed21e;p=dcpomatic.git diff --git a/test/dcp_digest_file_test.cc b/test/dcp_digest_file_test.cc index 85928b6bb..f22aa6d67 100644 --- a/test/dcp_digest_file_test.cc +++ b/test/dcp_digest_file_test.cc @@ -19,14 +19,24 @@ */ +#include "lib/config.h" #include "lib/content_factory.h" +#include "lib/dcp_content.h" #include "lib/dcp_digest_file.h" #include "lib/film.h" #include "test.h" +#include #include +#include #include +using std::ifstream; +using std::make_shared; +using std::string; +using boost::optional; + + BOOST_AUTO_TEST_CASE (dcp_digest_file_test) { dcp::DCP dcp("test/data/dcp_digest_test_dcp"); @@ -38,3 +48,54 @@ BOOST_AUTO_TEST_CASE (dcp_digest_file_test) check_xml ("test/data/digest.xml", "build/test/digest.xml", {}); } + +BOOST_AUTO_TEST_CASE (dcp_digest_file_test2) +{ + auto get_key_from_digest = [](boost::filesystem::path filename) -> optional { + ifstream digest(filename.string().c_str()); + while (digest.good()) { + string line; + getline (digest, line); + boost::algorithm::trim (line); + if (boost::starts_with(line, "") && line.length() > 37) { + return line.substr(5, 32); + } + } + + return {}; + }; + + auto red = content_factory("test/data/flat_red.png"); + auto ov = new_test_film2 ("dcp_digest_file_test2_ov", red); + ov->set_encrypted (true); + make_and_verify_dcp (ov); + + auto ov_key_check = get_key_from_digest ("build/test/dcp_digest_file_test2_ov/" + ov->dcp_name() + ".dcpdig"); + BOOST_REQUIRE (static_cast(ov_key_check)); + BOOST_CHECK_EQUAL (*ov_key_check, ov->key().hex()); + + dcp::DCP find_cpl (ov->dir(ov->dcp_name())); + find_cpl.read (); + BOOST_REQUIRE (!find_cpl.cpls().empty()); + auto ov_cpl = find_cpl.cpls()[0]->file(); + BOOST_REQUIRE (static_cast(ov_cpl)); + + auto signer = Config::instance()->signer_chain(); + BOOST_REQUIRE(signer->valid()); + + auto decrypted_kdm = ov->make_kdm(ov_cpl.get(), dcp::LocalTime(), dcp::LocalTime()); + auto kdm = decrypted_kdm.encrypt(signer, Config::instance()->decryption_chain()->leaf(), {}, dcp::Formulation::MODIFIED_TRANSITIONAL_1, true, 0); + + auto ov_dcp = make_shared(ov->dir(ov->dcp_name())); + ov_dcp->add_kdm (kdm); + ov_dcp->set_reference_video (true); + ov_dcp->set_reference_audio (true); + auto vf = new_test_film2 ("dcp_digest_file_test2_vf", { ov_dcp }); + vf->set_encrypted (true); + make_and_verify_dcp(vf, {dcp::VerificationNote::Code::EXTERNAL_ASSET}, false); + + auto vf_key_check = get_key_from_digest ("build/test/dcp_digest_file_test2_vf/" + vf->dcp_name() + ".dcpdig"); + BOOST_REQUIRE (static_cast(vf_key_check)); + BOOST_CHECK_EQUAL (*vf_key_check, ov->key().hex()); +} +