From beefb2759591ce42a3ce9412a5f36515f92e8cb7 Mon Sep 17 00:00:00 2001 From: Evgeny Sikachev Date: Mon, 19 Oct 2015 17:39:52 +0300 Subject: [PATCH] Providing more information about fail job When job if failed, we can see only id. Is not good. In this patch added information about job(name, type) closes-bug: #1510611 Change-Id: I83d2f722259ff8e02071f8c74bed71756a856e17 --- sahara/tests/scenario/base.py | 52 ++++++++++++++++--------- sahara/tests/scenario/clients.py | 4 ++ sahara/tests/scenario_unit/test_base.py | 16 ++++++-- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/sahara/tests/scenario/base.py b/sahara/tests/scenario/base.py index 43a6db83..514d0cc5 100644 --- a/sahara/tests/scenario/base.py +++ b/sahara/tests/scenario/base.py @@ -178,14 +178,10 @@ class BaseTestCase(base.BaseTestCase): @track_result("Check EDP jobs", False) def check_run_jobs(self): - jobs = {} batching = self.testcase.get('edp_batching', len(self.testcase['edp_jobs_flow'])) batching_size = batching - if self.testcase['edp_jobs_flow']: - jobs = self.testcase['edp_jobs_flow'] - else: - jobs = [] + jobs = self.testcase.get('edp_jobs_flow', []) pre_exec = [] for job in jobs: @@ -283,20 +279,38 @@ class BaseTestCase(base.BaseTestCase): configs) def _poll_jobs_status(self, exec_ids): - with fixtures.Timeout( - timeouts.Defaults.instance.timeout_poll_jobs_status, - gentle=True): - success = False - while not success: - success = True - for exec_id in exec_ids: - status = self.sahara.get_job_status(exec_id) - if status in ['FAILED', 'KILLED', 'DONEWITHERROR']: - self.fail("Job %s in %s status" % (exec_id, status)) - if status != 'SUCCEEDED': - success = False - - time.sleep(5) + try: + with fixtures.Timeout( + timeouts.Defaults.instance.timeout_poll_jobs_status, + gentle=True): + success = False + polling_ids = list(exec_ids) + while not success: + current_ids = list(polling_ids) + success = True + for exec_id in polling_ids: + status = self.sahara.get_job_status(exec_id) + if status not in ['FAILED', 'KILLED', 'DONEWITHERROR', + "SUCCEEDED"]: + success = False + else: + current_ids.remove(exec_id) + polling_ids = list(current_ids) + time.sleep(5) + finally: + report = [] + for exec_id in exec_ids: + status = self.sahara.get_job_status(exec_id) + if status != "SUCCEEDED": + info = self.sahara.get_job_info(exec_id) + report.append("Job with id={id}, name={name}, " + "type={type} has status " + "{status}".format(id=exec_id, + name=info.name, + type=info.type, + status=status)) + if report: + self.fail("\n".join(report)) def _create_swift_data(self, source=None): container = self._get_swift_container() diff --git a/sahara/tests/scenario/clients.py b/sahara/tests/scenario/clients.py index 2507befe..a1e6e00c 100644 --- a/sahara/tests/scenario/clients.py +++ b/sahara/tests/scenario/clients.py @@ -151,6 +151,10 @@ class SaharaClient(Client): data = self.sahara_client.job_executions.get(exec_id) return str(data.info['status']) + def get_job_info(self, exec_id): + job_execution = self.sahara_client.job_executions.get(exec_id) + return self.sahara_client.jobs.get(job_execution.job_id) + def get_cluster_id(self, name): if uuidutils.is_uuid_like(name): return name diff --git a/sahara/tests/scenario_unit/test_base.py b/sahara/tests/scenario_unit/test_base.py index fff1abd9..76f0756f 100644 --- a/sahara/tests/scenario_unit/test_base.py +++ b/sahara/tests/scenario_unit/test_base.py @@ -55,10 +55,15 @@ class FakeCluster(object): class FakeResponse(object): - def __init__(self, set_id=None, set_status=None, node_groups=None): + def __init__(self, set_id=None, set_status=None, node_groups=None, + url=None, job_id=None, name=None, job_type=None): self.id = set_id self.status = set_status self.node_groups = node_groups + self.url = url + self.job_id = job_id + self.name = name + self.type = job_type class TestBase(testtools.TestCase): @@ -346,9 +351,11 @@ class TestBase(testtools.TestCase): @mock.patch('sahara.tests.scenario.base.BaseTestCase.check_cinder', return_value=None) @mock.patch('sahara.tests.scenario.clients.SaharaClient.get_job_status', - return_value='SUCCEEDED') + return_value='KILLED') @mock.patch('saharaclient.api.base.ResourceManager._get', - return_value=FakeResponse(set_id='id_for_run_job_get')) + return_value=FakeResponse(set_id='id_for_run_job_get', + job_type='Java', + name='test_job')) @mock.patch('saharaclient.api.base.ResourceManager._create', return_value=FakeResponse(set_id='id_for_run_job_create')) @mock.patch('sahara.tests.scenario.base.BaseTestCase.' @@ -398,6 +405,9 @@ class TestBase(testtools.TestCase): ] with mock.patch('time.sleep'): self.assertIsNone(self.base_scenario.check_run_jobs()) + self.assertIn("Job with id=id_for_run_job_create, name=test_job, " + "type=Java has status KILLED", + self.base_scenario._results[-1]['traceback'][-1]) @mock.patch('sahara.tests.scenario.base.BaseTestCase.' '_poll_cluster_status',