summaryrefslogtreecommitdiff
path: root/test/kdm_naming_test.cc
blob: d9451a92d31fe57d36b242f82bc5f0ff9f752ba2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
    Copyright (C) 2020 Carl Hetherington <cth@carlh.net>

    This file is part of DCP-o-matic.

    DCP-o-matic is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    DCP-o-matic is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.

*/

#include "lib/cinema.h"
#include "lib/screen.h"
#include "lib/config.h"
#include "lib/content_factory.h"
#include "lib/film.h"
#include "lib/kdm_with_metadata.h"
#include "test.h"
#include <boost/test/unit_test.hpp>
#include <boost/shared_ptr.hpp>

using std::list;
using std::string;
using std::vector;
using boost::shared_ptr;
using boost::optional;

static
bool
confirm_overwrite (boost::filesystem::path)
{
	return true;
}


BOOST_AUTO_TEST_CASE (single_kdm_name_test)
{
	Config* c = Config::instance();

	dcp::Certificate cert = c->decryption_chain()->leaf();

	/* Cinema A: UTC +4:30 */
	shared_ptr<Cinema> cinema_a (new Cinema("Cinema A", list<string>(), "", 4, 30));
	shared_ptr<dcpomatic::Screen> cinema_a_screen_1(new dcpomatic::Screen("Screen 1", "", cert, vector<TrustedDevice>()));
	cinema_a->add_screen (cinema_a_screen_1);
	shared_ptr<dcpomatic::Screen> cinema_a_screen_2(new dcpomatic::Screen("Screen 2", "", cert, vector<TrustedDevice>()));
	cinema_a->add_screen (cinema_a_screen_2);
	c->add_cinema (cinema_a);

	/* Cinema B: UTC -1:00 */
	shared_ptr<Cinema> cinema_b (new Cinema("Cinema B", list<string>(), "", -1, 0));
	shared_ptr<dcpomatic::Screen> cinema_b_screen_x(new dcpomatic::Screen("Screen X", "", cert, vector<TrustedDevice>()));
	cinema_b->add_screen (cinema_b_screen_x);
	shared_ptr<dcpomatic::Screen> cinema_b_screen_y(new dcpomatic::Screen("Screen Y", "", cert, vector<TrustedDevice>()));
	cinema_b->add_screen (cinema_b_screen_y);
	shared_ptr<dcpomatic::Screen> cinema_b_screen_z(new dcpomatic::Screen("Screen Z", "", cert, vector<TrustedDevice>()));
	cinema_b->add_screen (cinema_b_screen_z);
	c->add_cinema (cinema_a);

	/* Film */
	boost::filesystem::remove_all ("build/test/single_kdm_name_test");
	shared_ptr<Film> film = new_test_film2 ("single_kdm_name_test");
	film->set_name ("my_great_film");
	film->examine_and_add_content (content_factory("test/data/flat_black.png").front());
	BOOST_REQUIRE (!wait_for_jobs());
	film->set_encrypted (true);
	film->make_dcp ();
	BOOST_REQUIRE (!wait_for_jobs());
	film->write_metadata ();
	vector<CPLSummary> cpls = film->cpls ();
	BOOST_REQUIRE(cpls.size() == 1);

	dcp::LocalTime from (cert.not_before());
	from.add_months (2);
	dcp::LocalTime until (cert.not_after());
	until.add_months (-2);

	string const from_string = from.date() + " " + from.time_of_day(true, false);
	string const until_string = until.date() + " " + until.time_of_day(true, false);

	boost::filesystem::path cpl = cpls.front().cpl_file;
	KDMWithMetadataPtr kdm = kdm_for_screen (
			film,
			cpls.front().cpl_file,
			cinema_a_screen_1,
			boost::posix_time::time_from_string(from_string),
			boost::posix_time::time_from_string(until_string),
			dcp::MODIFIED_TRANSITIONAL_1,
			false,
			optional<int>()
			);

	list<KDMWithMetadataPtr> kdms;
	kdms.push_back (kdm);

	write_files (
		kdms,
		boost::filesystem::path("build/test/single_kdm_name_test"),
		dcp::NameFormat("KDM %c - %s - %f - %b - %e"),
		&confirm_overwrite
		);

	string from_time = from.time_of_day (true, false);
	boost::algorithm::replace_all (from_time, ":", "-");
	string until_time = until.time_of_day (true, false);
	boost::algorithm::replace_all (until_time, ":", "-");

	string const ref = String::compose("KDM_Cinema_A_-_Screen_1_-_my_great_film_-_%1_%2_-_%3_%4.xml", from.date(), from_time, until.date(), until_time);
	BOOST_CHECK_MESSAGE (boost::filesystem::exists("build/test/single_kdm_name_test/" + ref), "File " << ref << " not found");
}