diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/dcp_digest_file_test.cc | 65 |
1 files changed, 65 insertions, 0 deletions
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 <dcp/cpl.h> #include <dcp/dcp.h> +#include <boost/algorithm/string.hpp> #include <boost/test/unit_test.hpp> +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<string> { + ifstream digest(filename.string().c_str()); + while (digest.good()) { + string line; + getline (digest, line); + boost::algorithm::trim (line); + if (boost::starts_with(line, "<Key>") && 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<bool>(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<bool>(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<DCPContent>(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<bool>(vf_key_check)); + BOOST_CHECK_EQUAL (*vf_key_check, ov->key().hex()); +} + |
