예제 #1
0
    def merge_flm_files(self, new_flm, task, output):
        computer = LocalComputer(task, self.root_path, self.__verify_flm_ready,
                                 self.__verify_flm_failure,
                                 lambda: self.query_extra_data_for_advanced_verification(new_flm),
                                 use_task_resources=False,
                                 additional_resources=[self.test_flm, new_flm])
        computer.run()
        if computer.tt is not None:
            computer.tt.join()
        else:
            return False
        if self.verification_error:
            return False
        commonprefix = common_dir(computer.tt.result['data'])
        flm = find_file_with_ext(commonprefix, [".flm"])
        stderr = filter(lambda x: os.path.basename(x) == "stderr.log", computer.tt.result['data'])
        if flm is None or len(stderr) == 0:
            return False
        else:
            try:
                with open(stderr[0]) as f:
                    stderr_in = f.read()
                if "ERROR" in stderr_in:
                    return False
            except (IOError, OSError):
                return False

            shutil.copy(flm, os.path.join(self.tmp_dir, "test_result.flm"))
            return True
예제 #2
0
 def _run_docker_local_comp_task(self, render_task, timeout=60 * 5):
     render_task.deadline = timeout_to_deadline(timeout)
     local_computer = LocalComputer(
         render_task, self.tempdir, Mock(), Mock(),
         render_task.query_extra_data_for_test_task)
     local_computer.run()
     local_computer.tt.join(60)
     return local_computer.tt
예제 #3
0
    def test_dummy_real_task(self, mock_dtt):
        mock_dtt.return_value = 1.0

        task = self._get_test_task()
        ctd = task.query_extra_data(1.0).ctd

        print(ctd)
        print(type(ctd))

        from twisted.internet import reactor

        d = Deferred()

        computer = LocalComputer(
            root_path=self.tempdir,
            success_callback=Mock(),
            error_callback=Mock(),
            compute_task_def=ctd,
            resources=task.task_resources,
        )

        computer.run()
        computer.tt.join()

        output = self._extract_results(computer, ctd['subtask_id'])

        task.create_reference_data_for_task_validation()

        def success(*args, **kwargs):
            # pylint: disable=unused-argument
            is_subtask_verified = task.verify_subtask(ctd['subtask_id'])
            self.assertTrue(is_subtask_verified)
            self.assertEqual(task.num_tasks_received, 1)
            d.callback(True)

        # assert good results - should pass
        self.assertEqual(task.num_tasks_received, 0)
        task.computation_finished(ctd['subtask_id'], [str(output)],
                                  verification_finished=success)

        reactor.iterate()
        sync_wait(d, 40)

        b = Deferred()

        def failure(*args, **kwargs):
            # pylint: disable=unused-argument
            self.assertFalse(task.verify_subtask(ctd['subtask_id']))
            self.assertEqual(task.num_tasks_received, 1)
            b.callback(True)

        # assert bad results - should fail
        bad_output = output.parent / "badfile.result"
        ctd = task.query_extra_data(10000.).ctd
        task.computation_finished(ctd['subtask_id'], [str(bad_output)],
                                  verification_finished=failure)
        reactor.iterate()
        sync_wait(b, 40)
예제 #4
0
    def test_computer(self):

        dm = DockerTaskThread.docker_manager = DockerManager.install()
        dm.update_config(
            status_callback=mock.Mock(),
            done_callback=mock.Mock(),
            work_dir=self.new_path,
            in_background=True)
        files = self.additional_dir_content([1])
        lc = LocalComputer(root_path=self.path,
                           success_callback=self._success_callback,
                           error_callback=self._failure_callback,
                           get_compute_task_def=self._get_bad_task_def)
        self.assertIsInstance(lc, LocalComputer)
        lc.run()
        assert self.last_error is not None
        assert self.last_result is None
        assert self.error_counter == 1
        assert self.success_counter == 0

        lc = LocalComputer(root_path=self.path,
                           success_callback=self._success_callback,
                           error_callback=self._failure_callback,
                           get_compute_task_def=self._get_better_task_def,
                           resources=[],
                           additional_resources=files)
        lc.run()
        lc.tt.join(60.0)
        path_ = os.path.join(lc.test_task_res_path, os.path.basename(files[0]))
        assert os.path.isfile(path_)
        assert self.error_counter == 1
        assert self.success_counter == 1

        tt = self.TestTaskThread({'data': "some data"}, "some error")
        lc.task_computed(tt)
        assert self.last_result == {"data": "some data"}
        assert self.last_result != "some error"
        assert self.error_counter == 1
        assert self.success_counter == 2

        tt = self.TestTaskThread({}, "some error")
        lc.task_computed(tt)
        assert self.last_error == "some error"
        assert self.error_counter == 2
        assert self.success_counter == 2

        tt = self.TestTaskThread({}, None)
        lc.task_computed(tt)
        assert self.last_error is None
        assert self.error_counter == 3
        assert self.success_counter == 2

        tt = self.TestTaskThread({'data': "some data"}, None)
        tt.error = True
        lc.task_computed(tt)
        assert self.last_error is None
        assert self.error_counter == 4
        assert self.success_counter == 2
예제 #5
0
 def __generate_final_file(self, flm):
     computer = LocalComputer(self,
                              self.root_path,
                              self.__final_img_ready,
                              self.__final_img_error,
                              self.query_extra_data_for_merge,
                              additional_resources=[flm])
     computer.run()
     computer.tt.join()
예제 #6
0
 def _run_docker_local_comp_task(self, render_task, timeout=60 * 5):
     render_task.deadline = timeout_to_deadline(timeout)
     local_computer = LocalComputer(
         root_path=self.tempdir,
         success_callback=Mock(),
         error_callback=Mock(),
         get_compute_task_def=render_task.query_extra_data_for_test_task,
         resources=render_task.task_resources)
     local_computer.run()
     local_computer.tt.join(60)
     return local_computer.tt
예제 #7
0
    def test_computer(self):
        with self.assertRaises(TypeError):
            LocalComputer(None, self.path, self._success_callback,
                          self._failure_callback, self._get_bad_task_def)
        files = self.additional_dir_content([1])
        task = Task(Mock(), Mock())
        lc = LocalComputer(task, self.path, self._success_callback,
                           self._failure_callback, self._get_bad_task_def)
        self.assertIsInstance(lc, LocalComputer)
        lc.run()
        assert self.last_error is not None
        assert self.last_result is None
        assert self.error_counter == 1

        lc = LocalComputer(task,
                           self.path,
                           self._success_callback,
                           self._failure_callback,
                           self._get_better_task_def,
                           use_task_resources=False,
                           additional_resources=files)
        lc.run()
        lc.tt.join(60.0)
        path_ = path.join(lc.test_task_res_path, path.basename(files[0]))
        assert path.isfile(path_)
        assert self.error_counter == 1
        assert self.success_counter == 1

        tt = self.TestTaskThread({'data': "some data"}, "some error")
        lc.task_computed(tt)
        assert self.last_result == {"data": "some data"}
        assert self.last_result != "some error"
        assert self.error_counter == 1
        assert self.success_counter == 2

        tt = self.TestTaskThread({}, "some error")
        lc.task_computed(tt)
        assert self.last_error == "some error"
        assert self.error_counter == 2
        assert self.success_counter == 2

        tt = self.TestTaskThread({}, None)
        lc.task_computed(tt)
        assert self.last_error is None
        assert self.error_counter == 3
        assert self.success_counter == 2

        tt = self.TestTaskThread({'data': "some data"}, None)
        tt.error = True
        lc.task_computed(tt)
        assert self.last_error is None
        assert self.error_counter == 4
        assert self.success_counter == 2
예제 #8
0
 def __generate_final_flm(self):
     self.collected_file_names = OrderedDict(
         sorted(self.collected_file_names.items()))
     computer = LocalComputer(
         self,
         self.root_path,
         self.__final_flm_ready,
         self.__final_flm_failure,
         self.query_extra_data_for_final_flm,
         use_task_resources=False,
         additional_resources=self.collected_file_names.values())
     computer.run()
     computer.tt.join()
예제 #9
0
 def _run_task(self, extra_data, task):
     computer = LocalComputer(
         task,
         self.root_path,
         self.__box_rendered,
         self.__box_render_error,
         lambda: self.query_extra_data_for_advanced_verification(extra_data
                                                                 ),
         additional_resources=[])
     computer.run()
     results = None
     if computer.tt:
         computer.tt.join()
         results = computer.tt.result.get("data")
     if results:
         commonprefix = os.path.commonprefix(results)
         img = find_file_with_ext(commonprefix,
                                  ["." + extra_data['output_format']])
         if img is None:
             logger.error("No image file created")
         return img