def _sync_artifact_as_xunit(self, artifact): jobstep = artifact.step resp = self.fetch_artifact(jobstep, artifact.data) # TODO(dcramer): requests doesnt seem to provide a non-binary file-like # API, so we're stuffing it into StringIO try: handler = XunitHandler(jobstep) handler.process(StringIO(resp.content)) except Exception: db.session.rollback() self.logger.exception( 'Failed to sync test results for job step %s', jobstep.id) else: db.session.commit()
def test_invalid_junit(self): project = self.create_project() build = self.create_build(project) job = self.create_job(build) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase) artifact = self.create_artifact(jobstep, 'junit.xml') missing_name = """<?xml version="1.0" encoding="utf-8"?> <testsuite errors="1" failures="0" name="" skips="0" tests="0" time="0.077"> <testcase classname="" time="0" owner="foo"> <failure message="collection failure">tests/test_report.py:1: in <module> > import mock E ImportError: No module named mock</failure> </testcase> <testcase classname="tests.test_report.ParseTestResultsTest" name="test_simple" time="0.001607" rerun="1"/> </testsuite>""" fp = StringIO(missing_name) handler = XunitHandler(jobstep) results = handler.process(fp, artifact) assert results == [] reason = FailureReason.query.filter( FailureReason.step_id == jobstep.id).first() assert reason is not None
def test_invalid_junit(self): project = self.create_project() build = self.create_build(project) job = self.create_job(build) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase) artifact = self.create_artifact(jobstep, 'junit.xml') missing_name = """<?xml version="1.0" encoding="utf-8"?> <testsuite errors="1" failures="0" name="" skips="0" tests="0" time="0.077"> <testcase classname="" time="0" owner="foo"> <failure message="collection failure">tests/test_report.py:1: in <module> > import mock E ImportError: No module named mock</failure> </testcase> <testcase classname="tests.test_report.ParseTestResultsTest" name="test_simple" time="0.001607" rerun="1"/> </testsuite>""" fp = StringIO(missing_name) handler = XunitHandler(jobstep) results = handler.process(fp, artifact) assert results == [] reason = FailureReason.query.filter( FailureReason.step_id == jobstep.id ).first() assert reason is not None