Add a test for DCP::add() for KDMs.
authorCarl Hetherington <cth@carlh.net>
Mon, 3 Jan 2022 23:27:37 +0000 (23:27 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 20 Apr 2022 18:06:46 +0000 (20:06 +0200)
src/reel.h
test/dcp_test.cc

index 9a3c38d3d61abaa0f6972dcc9ae174e389572531..60b5a64bb873808f64a1673b2572f9237be60949 100644 (file)
@@ -59,6 +59,9 @@ namespace xmlpp {
 }
 
 
+struct dcp_add_kdm_test;
+
+
 namespace dcp {
 
 
@@ -137,6 +140,8 @@ public:
        void resolve_refs (std::vector<std::shared_ptr<Asset>>);
 
 private:
+       friend struct ::dcp_add_kdm_test;
+
        void give_kdm_to_assets (dcp::DecryptedKDM const& kdm);
 
        std::shared_ptr<ReelPictureAsset> _main_picture;
index 4e667364010907ab4fb7aa057e5379e0b8285c14..f36aa41f2a97a56d49f12d6403ed60452df301b6 100644 (file)
@@ -425,3 +425,63 @@ BOOST_AUTO_TEST_CASE (dcp_with_mixed_cpls)
        dcp.add(make_shared<dcp::CPL>("", 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<dcp::CPL> cpls[] = {
+               make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE),
+               make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE),
+               make_shared<dcp::CPL>("", dcp::ContentKind::FEATURE, dcp::Standard::SMPTE)
+       };
+
+       shared_ptr<dcp::Reel> reels[] = {
+               make_shared<dcp::Reel>(),
+               make_shared<dcp::Reel>(),
+               make_shared<dcp::Reel>()
+       };
+
+       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);
+}
+