/*
- Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2016-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
/** @file test/digest_test.cc
* @brief Check computed DCP digests against references calculated by the `openssl` binary.
- * @ingroup specific
+ * @ingroup feature
*/
+
#include "lib/film.h"
#include "lib/image_content.h"
#include "lib/dcp_content_type.h"
#include <dcp/reel_picture_asset.h>
#include <boost/test/unit_test.hpp>
+
using std::list;
using std::string;
-using boost::shared_ptr;
+using std::shared_ptr;
+using std::make_shared;
+
static string
openssl_hash (boost::filesystem::path file)
{
- FILE* pipe = popen (String::compose ("openssl sha1 -binary %1 | openssl base64 -e", file.string()).c_str (), "r");
+ auto pipe = popen (String::compose ("openssl sha1 -binary %1 | openssl base64 -e", file.string()).c_str (), "r");
BOOST_REQUIRE (pipe);
char buffer[128];
string output;
return output;
}
+
/** Test the digests made by the DCP writing code on a multi-reel DCP */
BOOST_AUTO_TEST_CASE (digest_test)
{
- shared_ptr<Film> film = new_test_film ("digest_test");
+ auto film = new_test_film ("digest_test");
film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
film->set_name ("digest_test");
- shared_ptr<ImageContent> r (new ImageContent (film, "test/data/flat_red.png"));
- shared_ptr<ImageContent> g (new ImageContent (film, "test/data/flat_green.png"));
- shared_ptr<ImageContent> b (new ImageContent (film, "test/data/flat_blue.png"));
+ auto r = make_shared<ImageContent>("test/data/flat_red.png");
+ auto g = make_shared<ImageContent>("test/data/flat_green.png");
+ auto b = make_shared<ImageContent>("test/data/flat_blue.png");
film->examine_and_add_content (r);
film->examine_and_add_content (g);
film->examine_and_add_content (b);
- film->set_reel_type (REELTYPE_BY_VIDEO_CONTENT);
- wait_for_jobs ();
+ film->set_reel_type (ReelType::BY_VIDEO_CONTENT);
+ BOOST_REQUIRE (!wait_for_jobs());
- Config::instance()->set_num_local_encoding_threads (4);
- film->make_dcp ();
- wait_for_jobs ();
- Config::instance()->set_num_local_encoding_threads (1);
+ BOOST_CHECK (Config::instance()->master_encoding_threads() > 1);
+ make_and_verify_dcp (film);
dcp::DCP dcp (film->dir (film->dcp_name ()));
dcp.read ();
- BOOST_CHECK_EQUAL (dcp.cpls().size(), 1);
- list<shared_ptr<dcp::Reel> > reels = dcp.cpls().front()->reels ();
+ BOOST_CHECK_EQUAL (dcp.cpls().size(), 1U);
+ auto reels = dcp.cpls()[0]->reels();
- list<shared_ptr<dcp::Reel> >::const_iterator i = reels.begin ();
+ auto i = reels.begin ();
BOOST_REQUIRE (i != reels.end ());
+ BOOST_REQUIRE ((*i)->main_picture()->hash());
+ BOOST_REQUIRE ((*i)->main_picture()->asset()->file());
BOOST_CHECK_EQUAL ((*i)->main_picture()->hash().get(), openssl_hash ((*i)->main_picture()->asset()->file().get()));
++i;
BOOST_REQUIRE (i != reels.end ());
+ BOOST_REQUIRE ((*i)->main_picture()->hash());
+ BOOST_REQUIRE ((*i)->main_picture()->asset()->file());
BOOST_CHECK_EQUAL ((*i)->main_picture()->hash().get(), openssl_hash ((*i)->main_picture()->asset()->file().get()));
++i;
BOOST_REQUIRE (i != reels.end ());
+ BOOST_REQUIRE ((*i)->main_picture()->hash());
+ BOOST_REQUIRE ((*i)->main_picture()->asset()->file());
BOOST_CHECK_EQUAL ((*i)->main_picture()->hash().get(), openssl_hash ((*i)->main_picture()->asset()->file().get()));
++i;
BOOST_REQUIRE (i == reels.end ());