summaryrefslogtreecommitdiff
path: root/test/recovery_test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-02 23:50:08 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-02 23:50:08 +0100
commitf33cc09ad01f4aa57a09d3bfa23193f357240d45 (patch)
tree202752555b8cc3fd6398954c7de2db460a8d2307 /test/recovery_test.cc
parentac08ad9d8e10aa1c8e13645ea83438376329d678 (diff)
Split test file up a bit.
Diffstat (limited to 'test/recovery_test.cc')
-rw-r--r--test/recovery_test.cc84
1 files changed, 84 insertions, 0 deletions
diff --git a/test/recovery_test.cc b/test/recovery_test.cc
new file mode 100644
index 00000000..751bf357
--- /dev/null
+++ b/test/recovery_test.cc
@@ -0,0 +1,84 @@
+/*
+ Copyright (C) 2012-2013 Carl Hetherington <cth@carlh.net>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/* Check that recovery from a partially-written MXF works */
+BOOST_AUTO_TEST_CASE (recovery)
+{
+ Kumu::libdcp_test = true;
+
+ string const picture = "test/data/32x32_red_square.j2c";
+ int const size = boost::filesystem::file_size (picture);
+ uint8_t* data = new uint8_t[size];
+ {
+ FILE* f = fopen (picture.c_str(), "rb");
+ BOOST_CHECK (f);
+ fread (data, 1, size, f);
+ fclose (f);
+ }
+
+#ifdef LIBDCP_POSIX
+ /* XXX: fix this posix-only stuff */
+ Kumu::ResetTestRNG ();
+#endif
+
+ boost::filesystem::remove_all ("build/test/baz");
+ boost::filesystem::create_directories ("build/test/baz");
+ shared_ptr<libdcp::MonoPictureAsset> mp (new libdcp::MonoPictureAsset ("build/test/baz", "video1.mxf", 24, libdcp::Size (32, 32)));
+ shared_ptr<libdcp::MonoPictureAssetWriter> writer = mp->start_write (false);
+
+ int written_size = 0;
+ for (int i = 0; i < 24; ++i) {
+ libdcp::FrameInfo info = writer->write (data, size);
+ written_size = info.size;
+ }
+
+ writer->finalize ();
+ writer.reset ();
+
+ boost::filesystem::copy_file ("build/test/baz/video1.mxf", "build/test/baz/video2.mxf");
+ boost::filesystem::resize_file ("build/test/baz/video2.mxf", 16384 + 353 * 11);
+
+ {
+ FILE* f = fopen ("build/test/baz/video2.mxf", "r+");
+ rewind (f);
+ char zeros[256];
+ memset (zeros, 0, 256);
+ fwrite (zeros, 1, 256, f);
+ fclose (f);
+ }
+
+#ifdef LIBDCP_POSIX
+ Kumu::ResetTestRNG ();
+#endif
+
+ mp.reset (new libdcp::MonoPictureAsset ("build/test/baz", "video2.mxf", 24, libdcp::Size (32, 32)));
+ writer = mp->start_write (true);
+
+ writer->write (data, size);
+
+ for (int i = 1; i < 4; ++i) {
+ writer->fake_write (written_size);
+ }
+
+ for (int i = 4; i < 24; ++i) {
+ writer->write (data, size);
+ }
+
+ writer->finalize ();
+}