*/
+#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");
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");
+ 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());
+}
+