def test_get_inhibitor_list_PENDING_DEP(self): # verify that jobs that depend on another job or wait (via after) for # another that hasn't been invoked yet produce the PENDING_DEP # inhibitor j1 = JobDefinition({ 'id': 'j1', 'depends': 'j2', 'after': 'j3', }) j2 = JobDefinition({'id': 'j2'}) j3 = JobDefinition({'id': 'j3'}) session_state = mock.MagicMock(spec=SessionState) session_state.job_state_map = { 'j1': mock.Mock(spec_set=JobState), 'j2': mock.Mock(spec_set=JobState), 'j3': mock.Mock(spec_set=JobState), } jsm_j2 = session_state.job_state_map['j2'] jsm_j2.job = j2 jsm_j2.result.outcome = IJobResult.OUTCOME_NONE jsm_j3 = session_state.job_state_map['j3'] jsm_j3.job = j3 jsm_j3.result.outcome = IJobResult.OUTCOME_NONE self.assertEqual(self.ctrl.get_inhibitor_list(session_state, j1), [ JobReadinessInhibitor(InhibitionCause.PENDING_DEP, j2, None), JobReadinessInhibitor(InhibitionCause.PENDING_DEP, j3, None), ])
def test_get_inhibitor_list_FAILED_DEP(self): # verify that jobs that depend on another job that ran but # didn't result in OUTCOME_PASS produce the FAILED_DEP # inhibitor. j1 = JobDefinition({ 'id': 'j1', 'depends': 'j2', 'after': 'j3', }) j2 = JobDefinition({'id': 'j2'}) j3 = JobDefinition({'id': 'j3'}) session_state = mock.MagicMock(spec=SessionState) session_state.job_state_map = { 'j1': mock.Mock(spec_set=JobState), 'j2': mock.Mock(spec_set=JobState), 'j3': mock.Mock(spec_set=JobState), } jsm_j2 = session_state.job_state_map['j2'] jsm_j2.job = j2 jsm_j2.result.outcome = IJobResult.OUTCOME_FAIL jsm_j3 = session_state.job_state_map['j3'] jsm_j3.job = j3 jsm_j3.result.outcome = IJobResult.OUTCOME_FAIL self.assertEqual( self.ctrl.get_inhibitor_list(session_state, j1), [JobReadinessInhibitor(InhibitionCause.FAILED_DEP, j2, None)])
def test_unknown(self): obj = JobReadinessInhibitor(JobReadinessInhibitor.UNDESIRED) self.assertEqual( repr(obj), ( "<JobReadinessInhibitor cause:UNDESIRED" " related_job:None" " related_expression:None>")) self.assertEqual(str(obj), "undesired")
def test_failed_dep(self): job = make_job("A") obj = JobReadinessInhibitor(JobReadinessInhibitor.FAILED_DEP, related_job=job) self.assertEqual( repr(obj), ("<JobReadinessInhibitor cause:FAILED_DEP" " related_job:<JobDefinition name:'A' plugin:'dummy'>" " related_expression:None>")) self.assertEqual(str(obj), "required dependency 'A' has failed")
def test_pending_dep(self): job = make_job("A") obj = JobReadinessInhibitor(JobReadinessInhibitor.PENDING_DEP, related_job=job) self.assertEqual( repr(obj), ("<JobReadinessInhibitor cause:PENDING_DEP" " related_job:<JobDefinition name:'A' plugin:'dummy'>" " related_expression:None>")) self.assertEqual(str(obj), "required dependency 'A' did not run yet")
def test_get_inhibitor_list_PENDING_RESOURCE(self): # verify that jobs that require a resource that hasn't been # invoked yet produce the PENDING_RESOURCE inhibitor j1 = JobDefinition({'id': 'j1', 'requires': 'j2.attr == "ok"'}) j2 = JobDefinition({'id': 'j2'}) session_state = mock.MagicMock(spec=SessionState) session_state.job_state_map['j2'].job = j2 session_state.resource_map = {} self.assertEqual(self.ctrl.get_inhibitor_list(session_state, j1), [ JobReadinessInhibitor(JobReadinessInhibitor.PENDING_RESOURCE, j2, ResourceExpression('j2.attr == "ok"')) ])
def test_get_inhibitor_list_PENDING_DEP(self): # verify that jobs that depend on another job that hasn't # been invoked yet produce the PENDING_DEP inhibitor j1 = JobDefinition({'id': 'j1', 'depends': 'j2'}) j2 = JobDefinition({'id': 'j2'}) session_state = mock.MagicMock(spec=SessionState) jsm_j2 = session_state.job_state_map['j2'] jsm_j2.job = j2 jsm_j2.result.outcome = IJobResult.OUTCOME_NONE self.assertEqual(self.ctrl.get_inhibitor_list(session_state, j1), [ JobReadinessInhibitor(JobReadinessInhibitor.PENDING_DEP, j2, None) ])
def test_get_inhibitor_list_FAILED_RESOURCE(self): # verify that jobs that require a resource that has been # invoked and produced resources but the expression dones't # evaluate to True produce the FAILED_RESOURCE inhibitor j1 = JobDefinition({'id': 'j1', 'requires': 'j2.attr == "ok"'}) j2 = JobDefinition({'id': 'j2'}) session_state = mock.MagicMock(spec=SessionState) session_state.job_state_map['j2'].job = j2 session_state.resource_map = {'j2': [Resource({'attr': 'not-ok'})]} self.assertEqual(self.ctrl.get_inhibitor_list(session_state, j1), [ JobReadinessInhibitor(JobReadinessInhibitor.FAILED_RESOURCE, j2, ResourceExpression('j2.attr == "ok"')) ])
def test_failed_resource(self): job = make_job("A", requires="resource.attr == 'value'") expr = job.get_resource_program().expression_list[0] obj = JobReadinessInhibitor(JobReadinessInhibitor.FAILED_RESOURCE, related_job=job, related_expression=expr) self.assertEqual( repr(obj), ("<JobReadinessInhibitor cause:FAILED_RESOURCE" " related_job:<JobDefinition name:'A' plugin:'dummy'>" " related_expression:" "<ResourceExpression text:\"resource.attr == 'value'\">>")) self.assertEqual(str(obj), ("resource expression \"resource.attr == 'value'\"" " evaluates to false"))
def test_pending_resource(self): job = make_job("A", requires="resource.attr == 'value'") expr = job.get_resource_program().expression_list[0] obj = JobReadinessInhibitor(JobReadinessInhibitor.PENDING_RESOURCE, related_job=job, related_expression=expr) self.assertEqual( repr(obj), ("<JobReadinessInhibitor cause:PENDING_RESOURCE" " related_job:<JobDefinition name:'A' plugin:'dummy'>" " related_expression:" "<ResourceExpression text:\"resource.attr == 'value'\">>")) self.assertEqual( str(obj), ("resource expression \"resource.attr == 'value'\" could not be" " evaluated because the resource it depends on did not run" " yet"))
def test_setting_readiness_inhibitor_list(self): inhibitor = JobReadinessInhibitor(JobReadinessInhibitor.UNDESIRED) self.job_state.readiness_inhibitor_list = [inhibitor] self.assertEqual(self.job_state.readiness_inhibitor_list, [inhibitor])