diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-01-03 00:11:16 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-04-20 21:23:54 +0200 |
| commit | 58e94d1c412cd87a28fca99b46c7d5cf408f8186 (patch) | |
| tree | 02e8d01cb6dd35a6b04490015bcc49e8c1984e15 /test | |
| parent | 2034cf8a82be21d4d07de81ae40c8255da1ed21e (diff) | |
Fix creation of dcpdig files in projects that make VFs (#2109).
Previously we would always get keys from the project which was
wrong with assets that already have their own key.
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()); +} + |
