def test_ack_jobxml(self): _response_type = u'ack' with session.begin(): rs = self.job.recipesets[0] rs.nacked = RecipeSetResponse(type=_response_type) jobxml = XmlJob(xmltramp.parse(self.job.to_xml(clone=False).toprettyxml())) for xmlrecipeSet in jobxml.iter_recipeSets(): response = xmlrecipeSet.get_xml_attr('response',unicode,None) self.assertEqual(response,_response_type)
def test_ack_jobxml(self): _response_type = u'ack' with session.begin(): rs = self.job.recipesets[0] rs.nacked = RecipeSetResponse(type=_response_type) jobxml = XmlJob( xmltramp.parse(self.job.to_xml(clone=False).toprettyxml())) for xmlrecipeSet in jobxml.iter_recipeSets(): response = xmlrecipeSet.get_xml_attr('response', unicode, None) self.assertEqual(response, _response_type)
def test_ack_jobxml_clone(self): """ Unline test_ack_jobxml, we do _not_ want to see our response in here """ _response_type = u'ack' with session.begin(): rs = self.job.recipesets[0] rs.nacked = RecipeSetResponse(type=_response_type) jobxml = XmlJob(xmltramp.parse(self.job.to_xml(clone=True).toprettyxml())) for xmlrecipeSet in jobxml.iter_recipeSets(): response = xmlrecipeSet.get_xml_attr('response',unicode,None) self.assertEqual(response,None)
def test_ack_jobxml_clone(self): """ Unline test_ack_jobxml, we do _not_ want to see our response in here """ _response_type = u'ack' with session.begin(): rs = self.job.recipesets[0] rs.nacked = RecipeSetResponse(type=_response_type) jobxml = XmlJob( xmltramp.parse(self.job.to_xml(clone=True).toprettyxml())) for xmlrecipeSet in jobxml.iter_recipeSets(): response = xmlrecipeSet.get_xml_attr('response', unicode, None) self.assertEqual(response, None)
def test_update_status_can_be_roundtripped_40214(self): complete_job_xml = pkg_resources.resource_string( 'bkr.inttest', 'job_40214.xml') xmljob = XmlJob(xmltramp.parse(complete_job_xml)) data_setup.create_tasks(xmljob) session.flush() # Import the job xml job = self.controller.process_xmljob(xmljob, self.user) session.flush() # Mark job waiting data_setup.mark_job_waiting(job) session.flush() # watchdog's should exist self.assertNotEqual(len(watchdogs_for_job(job)), 0) # Play back the original jobs results and status data_setup.playback_job_results(job, xmljob) session.flush() # Verify that the original status and results match self.assertEquals(TaskStatus.from_string(xmljob.wrappedEl('status')), job.status) self.assertEquals(TaskResult.from_string(xmljob.wrappedEl('result')), job.result) for i, recipeset in enumerate(xmljob.iter_recipeSets()): for j, recipe in enumerate(recipeset.iter_recipes()): self.assertEquals( TaskStatus.from_string(recipe.wrappedEl('status')), job.recipesets[i].recipes[j].status) self.assertEquals( TaskResult.from_string(recipe.wrappedEl('result')), job.recipesets[i].recipes[j].result) for k, task in enumerate(recipe.iter_tasks()): self.assertEquals( TaskStatus.from_string(task.status), job.recipesets[i].recipes[j].tasks[k].status) self.assertEquals( TaskResult.from_string(task.result), job.recipesets[i].recipes[j].tasks[k].result) # No watchdog's should exist when the job is complete self.assertEquals(len(watchdogs_for_job(job)), 0)
def test_update_status_can_be_roundtripped_40214(self): complete_job_xml = pkg_resources.resource_string('bkr.inttest', 'job_40214.xml') xmljob = XmlJob(xmltramp.parse(complete_job_xml)) data_setup.create_tasks(xmljob) session.flush() # Import the job xml job = self.controller.process_xmljob(xmljob, self.user) session.flush() # Mark job waiting data_setup.mark_job_waiting(job) session.flush() # watchdog's should exist self.assertNotEqual(len(watchdogs_for_job(job)), 0) # Play back the original jobs results and status data_setup.playback_job_results(job, xmljob) session.flush() # Verify that the original status and results match self.assertEquals(TaskStatus.from_string(xmljob.wrappedEl('status')), job.status) self.assertEquals(TaskResult.from_string(xmljob.wrappedEl('result')), job.result) for i, recipeset in enumerate(xmljob.iter_recipeSets()): for j, recipe in enumerate(recipeset.iter_recipes()): self.assertEquals(TaskStatus.from_string(recipe.wrappedEl('status')), job.recipesets[i].recipes[j].status) self.assertEquals(TaskResult.from_string(recipe.wrappedEl('result')), job.recipesets[i].recipes[j].result) for k, task in enumerate(recipe.iter_tasks()): self.assertEquals(TaskStatus.from_string(task.status), job.recipesets[i].recipes[j].tasks[k].status) self.assertEquals(TaskResult.from_string(task.result), job.recipesets[i].recipes[j].tasks[k].result) # No watchdog's should exist when the job is complete self.assertEquals(len(watchdogs_for_job(job)), 0)
job = Job(whiteboard=unicode(xmljob.whiteboard), ttasks=0, owner=owner, group=group, submitter=submitter) job.product = product job.retention_tag = tag email_validator = validators.Email(not_empty=True) for addr in set(xmljob.iter_cc()): try: job.cc.append(email_validator.to_python(addr)) except Invalid, e: raise BX( _('Invalid e-mail address %r in <cc/>: %s') % (addr, str(e))) for xmlrecipeSet in xmljob.iter_recipeSets(): recipe_set = self._handle_recipe_set( xmlrecipeSet, owner, ignore_missing_tasks=ignore_missing_tasks) job.recipesets.append(recipe_set) job.ttasks += recipe_set.ttasks if not job.recipesets: raise BX( _('No RecipeSets! You can not have a Job with no recipeSets!')) session.add(job) metrics.measure('counters.recipes_submitted', len(list(job.all_recipes))) return job def _jobs(self, job, **kw): return_dict = {}
if group not in owner.groups: raise BX(_(u'User %s is not a member of group %s' % (owner.user_name, group.group_name))) job_retention = xmljob.get_xml_attr('retention_tag',unicode,None) job_product = xmljob.get_xml_attr('product',unicode,None) tag, product = self._process_job_tag_product(retention_tag=job_retention, product=job_product) job = Job(whiteboard=unicode(xmljob.whiteboard), ttasks=0, owner=owner, group=group, submitter=submitter) job.product = product job.retention_tag = tag email_validator = validators.Email(not_empty=True) for addr in set(xmljob.iter_cc()): try: job.cc.append(email_validator.to_python(addr)) except Invalid, e: raise BX(_('Invalid e-mail address %r in <cc/>: %s') % (addr, str(e))) for xmlrecipeSet in xmljob.iter_recipeSets(): recipe_set = self._handle_recipe_set(xmlrecipeSet, owner, ignore_missing_tasks=ignore_missing_tasks) job.recipesets.append(recipe_set) job.ttasks += recipe_set.ttasks if not job.recipesets: raise BX(_('No RecipeSets! You can not have a Job with no recipeSets!')) session.add(job) metrics.measure('counters.recipes_submitted', len(list(job.all_recipes))) return job def _jobs(self,job,**kw): return_dict = {} # We can do a quick search, or a regular simple search. If we have done neither of these, # it will fall back to an advanced search and look in the 'jobsearch'