diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-10-10 13:04:59 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-10-10 13:04:59 +0100 |
| commit | d382f34db155ddaf4bb61538c18b87c7564e00b2 (patch) | |
| tree | 8c63943ad046240f9a307c640d022af750b07bb7 /test | |
| parent | b5828ccf20a0e0c4365854ac19a05d5a4783e254 (diff) | |
| parent | 1bbd5367ddddfac18ceaa4d010cfc39f1daaa3a3 (diff) | |
Merge branch 'master' into subs
Diffstat (limited to 'test')
| -rw-r--r-- | test/test.cc | 128 | ||||
| -rw-r--r-- | test/test.mp4 | bin | 0 -> 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 Binary files differnew file mode 100644 index 000000000..811e397f6 --- /dev/null +++ b/test/test.mp4 |
