def test_manage_task_successful_exit_despite_faulty_driver(self): def assertions(driver, task_id, sandbox_directory): expected_statuses = [{ 'task_id': { 'value': task_id }, 'state': cook.TASK_STARTING }, { 'task_id': { 'value': task_id }, 'state': cook.TASK_RUNNING }, { 'task_id': { 'value': task_id }, 'state': cook.TASK_FINISHED }] tu.assert_statuses(self, expected_statuses, driver.statuses) expected_core_messages = [{ 'sandbox-directory': sandbox_directory, 'task-id': task_id, 'type': 'directory' }, { 'exit-code': 0, 'task-id': task_id }] expected_progress_messages = [ { 'progress-message': 'ninety percent', 'progress-percent': 90, 'progress-sequence': 1, 'task-id': task_id }, # retried because the previous send fails { 'progress-message': 'ninety percent', 'progress-percent': 90, 'progress-sequence': 1, 'task-id': task_id } ] tu.assert_messages(self, expected_core_messages, expected_progress_messages, driver.messages) test_file_name = tu.ensure_directory('build/file.' + tu.get_random_task_id()) command = ('echo "^^^^JOB-PROGRESS: 90 ninety percent"'.format( test_file_name)) socket_error = OSError( 'socket.error') # socket.error is an alias of OSError self.manage_task_runner( command, assertions, driver=tu.ErrorMesosExecutorDriver(socket_error))
def test_send_message_handles_generic_exception(self): exception_handler_calls = [] exception_handler = functools.partial(tu.store_exception_handler, exception_handler_calls) exception = Exception('Generic Exception') driver = tu.ErrorMesosExecutorDriver(exception) task_id = tu.get_random_task_id() message = {'task-id': task_id, 'message': 'test-message'} result = ce.send_message(driver, exception_handler, message) self.assertEqual([], exception_handler_calls) self.assertFalse(result) self.assertEqual(1, len(driver.messages))
def test_send_message_handles_os_error_non_memory(self): exception_handler_calls = [] exception_handler = functools.partial(tu.store_exception_handler, exception_handler_calls) exception = OSError(errno.EACCES, 'Permission denied') driver = tu.ErrorMesosExecutorDriver(exception) task_id = tu.get_random_task_id() message = {'task-id': task_id, 'message': 'test-message'} result = ce.send_message(driver, exception_handler, message) self.assertEqual([], exception_handler_calls) self.assertFalse(result) self.assertEqual(1, len(driver.messages))