def _sync_artifact_as_coverage(self, jobstep, artifact): resp = self.fetch_artifact(jobstep, artifact) # TODO(dcramer): requests doesnt seem to provide a non-binary file-like # API, so we're stuffing it into StringIO handler = CoverageHandler(jobstep) handler.process(StringIO(resp.content))
def _sync_artifact_as_coverage(self, jobstep, job_name, build_no, artifact): url = '{base}/job/{job}/{build}/artifact/{artifact}'.format( base=self.base_url, job=job_name, build=build_no, artifact=artifact['relativePath'], ) resp = requests.get(url, stream=True, timeout=15) # TODO(dcramer): requests doesnt seem to provide a non-binary file-like # API, so we're stuffing it into StringIO handler = CoverageHandler(jobstep) handler.process(StringIO(resp.content))
def _sync_artifact_as_coverage(self, jobstep, artifact): resp = self.fetch_artifact(jobstep, artifact) # TODO(dcramer): requests doesnt seem to provide a non-binary file-like # API, so we're stuffing it into StringIO try: handler = CoverageHandler(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_simple(self, process_diff, get_coverage): project = self.create_project() build = self.create_build(project) job = self.create_job(build) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase) handler = CoverageHandler(jobstep) process_diff.return_value = { 'setup.py': set([1, 2, 3, 4, 5]), } # now try with some duplicate coverage get_coverage.return_value = [FileCoverage( job_id=job.id, step_id=jobstep.id, project_id=project.id, filename='setup.py', data='CUNNNNCCNNNUNNNUUUUUU' )] fp = StringIO() handler.process(fp) get_coverage.assert_called_once_with(fp) get_coverage.reset_mock() get_coverage.return_value = [FileCoverage( job_id=job.id, step_id=jobstep.id, project_id=project.id, filename='setup.py', data='NUUNNNNNNNNUCCNU' )] fp = StringIO() handler.process(fp) get_coverage.assert_called_once_with(fp) file_cov = list(FileCoverage.query.filter( FileCoverage.job_id == job.id, )) assert len(file_cov) == 1 assert file_cov[0].filename == 'setup.py' assert file_cov[0].data == 'CUUNNNCCNNNUCCNUUUUUU' assert file_cov[0].lines_covered == 5 assert file_cov[0].lines_uncovered == 9 assert file_cov[0].diff_lines_covered == 1 assert file_cov[0].diff_lines_uncovered == 2
def test_result_generation(): jobstep = JobStep(id=uuid.uuid4(), job=Job(id=uuid.uuid4(), project_id=uuid.uuid4())) fp = StringIO(SAMPLE_COVERAGE) handler = CoverageHandler(jobstep) results = handler.get_coverage(fp) assert len(results) == 2 r1 = results[0] assert type(r1) == FileCoverage assert r1.job_id == jobstep.job.id assert r1.project_id == jobstep.job.project_id assert r1.filename == 'setup.py' assert r1.data == 'NUNNNNNNNNNUCCNU' r2 = results[1] assert type(r2) == FileCoverage assert r2.job_id == jobstep.job.id assert r2.project_id == jobstep.job.project_id assert r2.data == 'CCCNNNU'
def test_result_generation(): jobstep = JobStep( id=uuid.uuid4(), job=Job(id=uuid.uuid4(), project_id=uuid.uuid4()) ) fp = StringIO(SAMPLE_COVERAGE) handler = CoverageHandler(jobstep) results = handler.get_coverage(fp) assert len(results) == 2 r1 = results[0] assert type(r1) == FileCoverage assert r1.job_id == jobstep.job.id assert r1.project_id == jobstep.job.project_id assert r1.filename == 'setup.py' assert r1.data == 'NUNNNNNNNNNUCCNU' r2 = results[1] assert type(r2) == FileCoverage assert r2.job_id == jobstep.job.id assert r2.project_id == jobstep.job.project_id assert r2.data == 'CCCNNNU'