X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fdcp_digest_file_test.cc;h=becfd4317a0e9abed8a87f85da0d0c68efe0ba66;hb=c06c71f4273d2c81677f35ac7d6de90402940121;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..becfd4317 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,58 @@ 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").front(); + 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 kdm = ov->make_kdm ( + Config::instance()->decryption_chain()->leaf(), + {}, + ov_cpl.get(), + dcp::LocalTime(), dcp::LocalTime(), + 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}); + + 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()); +} +