summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-10-10 13:04:59 +0100
committerCarl Hetherington <cth@carlh.net>2012-10-10 13:04:59 +0100
commitd382f34db155ddaf4bb61538c18b87c7564e00b2 (patch)
tree8c63943ad046240f9a307c640d022af750b07bb7 /test
parentb5828ccf20a0e0c4365854ac19a05d5a4783e254 (diff)
parent1bbd5367ddddfac18ceaa4d010cfc39f1daaa3a3 (diff)
Merge branch 'master' into subs
Diffstat (limited to 'test')
-rw-r--r--test/test.cc128
-rw-r--r--test/test.mp4bin0 -> 9112 bytes
2 files changed, 125 insertions, 3 deletions
diff --git a/test/test.cc b/test/test.cc
index ebee50ac0..c801d538e 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -34,6 +34,8 @@
#include "dcp_video_frame.h"
#include "config.h"
#include "server.h"
+#include "cross.h"
+#include "job.h"
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE dvdomatic_test
#include <boost/test/unit_test.hpp>
@@ -304,6 +306,9 @@ BOOST_AUTO_TEST_CASE (client_server_test)
new thread (boost::bind (&Server::run, server, 2));
+ /* Let the server get itself ready */
+ dvdomatic_sleep (1);
+
ServerDescription description ("localhost", 2);
list<thread*> threads;
@@ -333,7 +338,7 @@ BOOST_AUTO_TEST_CASE (make_dcp_test)
film.make_dcp (true);
while (JobManager::instance()->work_to_do ()) {
- sleep (1);
+ dvdomatic_sleep (1);
}
BOOST_CHECK_EQUAL (JobManager::instance()->errors(), false);
@@ -356,9 +361,126 @@ BOOST_AUTO_TEST_CASE (make_dcp_with_range_test)
film.set_dcp_frames (42);
film.make_dcp (true);
- while (JobManager::instance()->work_to_do ()) {
- sleep (1);
+ while (JobManager::instance()->work_to_do() && !JobManager::instance()->errors()) {
+ dvdomatic_sleep (1);
}
BOOST_CHECK_EQUAL (JobManager::instance()->errors(), false);
}
+
+BOOST_AUTO_TEST_CASE (audio_sampling_rate_test)
+{
+ FilmState fs;
+ fs.frames_per_second = 24;
+
+ fs.audio_sample_rate = 48000;
+ BOOST_CHECK_EQUAL (fs.target_sample_rate(), 48000);
+
+ fs.audio_sample_rate = 44100;
+ BOOST_CHECK_EQUAL (fs.target_sample_rate(), 48000);
+
+ fs.audio_sample_rate = 80000;
+ BOOST_CHECK_EQUAL (fs.target_sample_rate(), 96000);
+
+ fs.frames_per_second = 23.976;
+ fs.audio_sample_rate = 48000;
+ BOOST_CHECK_EQUAL (fs.target_sample_rate(), 47952);
+
+ fs.frames_per_second = 29.97;
+ fs.audio_sample_rate = 48000;
+ BOOST_CHECK_EQUAL (fs.target_sample_rate(), 47952);
+}
+
+class TestJob : public Job
+{
+public:
+ TestJob (shared_ptr<const FilmState> s, shared_ptr<const Options> o, Log* l, shared_ptr<Job> req)
+ : Job (s, o, l, req)
+ {
+
+ }
+
+ void set_finished_ok () {
+ set_state (FINISHED_OK);
+ }
+
+ void set_finished_error () {
+ set_state (FINISHED_ERROR);
+ }
+
+ void run ()
+ {
+ while (1) {
+ if (finished ()) {
+ return;
+ }
+ }
+ }
+
+ string name () const {
+ return "";
+ }
+};
+
+BOOST_AUTO_TEST_CASE (job_manager_test)
+{
+ shared_ptr<const FilmState> s;
+ shared_ptr<const Options> o;
+ FileLog log ("build/test/job_manager_test.log");
+
+ /* Single job, no dependency */
+ shared_ptr<TestJob> a (new TestJob (s, o, &log, shared_ptr<Job> ()));
+
+ JobManager::instance()->add (a);
+ dvdomatic_sleep (1);
+ BOOST_CHECK_EQUAL (a->running (), true);
+ a->set_finished_ok ();
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->finished_ok(), true);
+
+ /* Two jobs, no dependency */
+ a.reset (new TestJob (s, o, &log, shared_ptr<Job> ()));
+ shared_ptr<TestJob> b (new TestJob (s, o, &log, shared_ptr<Job> ()));
+
+ JobManager::instance()->add (a);
+ JobManager::instance()->add (b);
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->running (), true);
+ BOOST_CHECK_EQUAL (b->running (), true);
+ a->set_finished_ok ();
+ b->set_finished_ok ();
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->finished_ok (), true);
+ BOOST_CHECK_EQUAL (b->finished_ok (), true);
+
+ /* Two jobs, dependency */
+ a.reset (new TestJob (s, o, &log, shared_ptr<Job> ()));
+ b.reset (new TestJob (s, o, &log, a));
+
+ JobManager::instance()->add (a);
+ JobManager::instance()->add (b);
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->running(), true);
+ BOOST_CHECK_EQUAL (b->running(), false);
+ a->set_finished_ok ();
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->finished_ok(), true);
+ BOOST_CHECK_EQUAL (b->running(), true);
+ b->set_finished_ok ();
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (b->finished_ok(), true);
+
+ /* Two jobs, dependency, first fails */
+ a.reset (new TestJob (s, o, &log, shared_ptr<Job> ()));
+ b.reset (new TestJob (s, o, &log, a));
+
+ JobManager::instance()->add (a);
+ JobManager::instance()->add (b);
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->running(), true);
+ BOOST_CHECK_EQUAL (b->running(), false);
+ a->set_finished_error ();
+ dvdomatic_sleep (2);
+ BOOST_CHECK_EQUAL (a->finished_in_error(), true);
+ BOOST_CHECK_EQUAL (b->running(), false);
+}
diff --git a/test/test.mp4 b/test/test.mp4
new file mode 100644
index 000000000..811e397f6
--- /dev/null
+++ b/test/test.mp4
Binary files differ