Supporters update.
[dcpomatic.git] / test / job_manager_test.cc
index 1baa5767e25a6b678b57426843443e79d5119641..4a2f8bde5f97e8849dfb0347d273c6a0edba63c8 100644 (file)
@@ -59,20 +59,21 @@ public:
                set_state (FINISHED_ERROR);
        }
 
-       void run ()
+       void run () override
        {
                while (true) {
                        if (finished ()) {
                                return;
                        }
+                       boost::this_thread::interruption_point();
                }
        }
 
-       string name () const {
+       string name () const override {
                return "";
        }
 
-       string json_name () const {
+       string json_name () const override {
                return "";
        }
 };
@@ -123,8 +124,40 @@ BOOST_AUTO_TEST_CASE (job_manager_test2)
                BOOST_CHECK (i == 5 ? jobs[i]->running() : !jobs[i]->running());
        }
 
-       for (auto job: jobs) {
-               job->set_finished_ok();
+       /* Set any jobs that are started to be finished, until they're all finished */
+       while (true) {
+               if (std::find_if(jobs.begin(), jobs.end(), [](shared_ptr<Job> job) { return !job->finished_ok(); }) == jobs.end()) {
+                       break;
+               }
+
+               for (auto job: jobs) {
+                       if (job->running()) {
+                               job->set_finished_ok();
+                       }
+               }
        }
+
+       BOOST_REQUIRE (!wait_for_jobs());
+}
+
+
+BOOST_AUTO_TEST_CASE(cancel_job_test)
+{
+       shared_ptr<Film> film;
+
+       vector<shared_ptr<TestJob>> jobs;
+       for (int i = 0; i < 2; ++i) {
+               auto job = make_shared<TestJob>(film);
+               jobs.push_back(job);
+               JobManager::instance()->add(job);
+       }
+
+       jobs[1]->cancel();
+       jobs[0]->cancel();
+
+       dcpomatic_sleep_seconds(1);
+
+       BOOST_CHECK(jobs[0]->finished_cancelled());
+       BOOST_CHECK(jobs[1]->finished_cancelled());
 }