From fbf4e083ac834a94167d5d0e3d715206cb736a23 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 3 Jan 2022 23:27:37 +0000 Subject: Add a test for DCP::add() for KDMs. --- src/reel.h | 5 +++++ test/dcp_test.cc | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/src/reel.h b/src/reel.h index 9a3c38d3..60b5a64b 100644 --- a/src/reel.h +++ b/src/reel.h @@ -59,6 +59,9 @@ namespace xmlpp { } +struct dcp_add_kdm_test; + + namespace dcp { @@ -137,6 +140,8 @@ public: void resolve_refs (std::vector>); private: + friend struct ::dcp_add_kdm_test; + void give_kdm_to_assets (dcp::DecryptedKDM const& kdm); std::shared_ptr _main_picture; diff --git a/test/dcp_test.cc b/test/dcp_test.cc index 4e667364..f36aa41f 100644 --- a/test/dcp_test.cc +++ b/test/dcp_test.cc @@ -425,3 +425,63 @@ BOOST_AUTO_TEST_CASE (dcp_with_mixed_cpls) dcp.add(make_shared("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE)); BOOST_REQUIRE_THROW (dcp.write_xml(), dcp::MiscError); } + + +BOOST_AUTO_TEST_CASE (dcp_add_kdm_test) +{ + /* Some CPLs, each with a reel */ + + shared_ptr cpls[] = { + make_shared("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE), + make_shared("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE), + make_shared("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE) + }; + + shared_ptr reels[] = { + make_shared(), + make_shared(), + make_shared() + }; + + for (auto i = 0; i < 3; ++i) { + cpls[i]->add(reels[i]); + } + + dcp::DCP dcp ("build/test/dcp_add_kdm_test"); + dcp.add(cpls[0]); + dcp.add(cpls[1]); + dcp.add(cpls[2]); + + /* Simple KDM with one key that should be given to cpls[0] */ + + auto kdm_1 = dcp::DecryptedKDM({}, {}, "", "", ""); + auto kdm_1_uuid = dcp::make_uuid(); + kdm_1.add_key (dcp::DecryptedKDMKey(string("MDIK"), kdm_1_uuid, dcp::Key(), cpls[0]->id(), dcp::Standard::SMPTE)); + dcp.add (kdm_1); + BOOST_REQUIRE (reels[0]->_kdms.size() == 1); + BOOST_CHECK (reels[0]->_kdms[0].keys().size() == 1); + BOOST_CHECK (reels[0]->_kdms[0].keys()[0].id() == kdm_1_uuid); + BOOST_CHECK (reels[1]->_kdms.size() == 0); + BOOST_CHECK (reels[2]->_kdms.size() == 0); + + /* KDM with two keys that should be given to cpls[1] and cpls[2] */ + + auto kdm_2 = dcp::DecryptedKDM({}, {}, "", "", ""); + auto kdm_2_uuid_1 = dcp::make_uuid(); + kdm_2.add_key (dcp::DecryptedKDMKey(string("MDIK"), kdm_2_uuid_1, dcp::Key(), cpls[1]->id(), dcp::Standard::SMPTE)); + auto kdm_2_uuid_2 = dcp::make_uuid(); + kdm_2.add_key (dcp::DecryptedKDMKey(string("MDIK"), kdm_2_uuid_2, dcp::Key(), cpls[2]->id(), dcp::Standard::SMPTE)); + dcp.add (kdm_2); + /* Unchanged from previous test */ + BOOST_CHECK (reels[0]->_kdms.size() == 1); + /* kdm_2 should have been added to both the other CPLs */ + BOOST_REQUIRE (reels[1]->_kdms.size() == 1); + BOOST_REQUIRE (reels[1]->_kdms[0].keys().size() == 2); + BOOST_CHECK (reels[1]->_kdms[0].keys()[0].id() == kdm_2_uuid_1); + BOOST_CHECK (reels[1]->_kdms[0].keys()[1].id() == kdm_2_uuid_2); + BOOST_REQUIRE (reels[2]->_kdms.size() == 1); + BOOST_REQUIRE (reels[2]->_kdms[0].keys().size() == 2); + BOOST_CHECK (reels[2]->_kdms[0].keys()[0].id() == kdm_2_uuid_1); + BOOST_CHECK (reels[2]->_kdms[0].keys()[1].id() == kdm_2_uuid_2); +} + -- cgit v1.2.3