Exemplo n.º 1
0
    def test_failed_build(self, post_fn):
        URL = "https://analytics.example.com/report?source=changes"
        self._set_config_url(URL)
        project = self.create_project(name='test', slug='project-slug')
        self.assertEquals(post_fn.call_count, 0)
        duration = 1234
        created = 1424998888
        started = created + 10
        finished = started + duration

        build = self.create_build(project,
                                  result=Result.failed,
                                  target='D1',
                                  label='Some sweet diff',
                                  duration=duration,
                                  date_created=ts_to_datetime(created),
                                  date_started=ts_to_datetime(started),
                                  date_finished=ts_to_datetime(finished))

        job = self.create_job(build=build, result=Result.failed)
        jobphase = self.create_jobphase(job)
        jobstep = self.create_jobstep(jobphase,
                                      status=Status.finished,
                                      result=Result.failed)
        db.session.add(
            FailureReason(step_id=jobstep.id,
                          job_id=job.id,
                          build_id=build.id,
                          project_id=project.id,
                          reason='missing_tests'))
        db.session.commit()

        with mock.patch(
                'changes.listeners.analytics_notifier._get_phabricator_revision_url'
        ) as mock_get_phab:
            mock_get_phab.return_value = 'https://example.com/D1'
            with mock.patch(
                    'changes.listeners.analytics_notifier._get_build_failure_reasons'
            ) as mock_get_failures:
                mock_get_failures.return_value = ['aborted', 'missing_tests']
                build_finished_handler(build_id=build.id.hex)

        expected_data = {
            'build_id': build.id.hex,
            'number': 1,
            'target': 'D1',
            'project_slug': 'project-slug',
            'result': 'Failed',
            'label': 'Some sweet diff',
            'is_commit': True,
            'duration': 1234,
            'date_created': created,
            'date_started': started,
            'date_finished': finished,
            'phab_revision_url': 'https://example.com/D1',
            'failure_reasons': ['aborted', 'missing_tests'],
        }
        post_fn.assert_called_once_with(URL, [expected_data])
Exemplo n.º 2
0
    def test_failed_build(self, post_fn):
        URL = "https://analytics.example.com/report?source=changes"
        self._set_config_url(URL)
        project = self.create_project(name='test', slug='project-slug')
        self.assertEquals(post_fn.call_count, 0)
        duration = 1234
        created = 1424998888
        started = created + 10
        finished = started + duration
        decided = finished + 10

        build = self.create_build(project, result=Result.failed, target='D1',
                                  label='Some sweet diff', duration=duration, tags=['commit', 'angry'],
                                  date_created=ts_to_datetime(created), date_started=ts_to_datetime(started),
                                  date_finished=ts_to_datetime(finished), date_decided=ts_to_datetime(decided))
        build.source.revision.patch_hash = 'a' * 40

        job = self.create_job(build=build, result=Result.failed)
        jobphase = self.create_jobphase(job)
        jobstep = self.create_jobstep(jobphase, status=Status.finished, result=Result.failed)
        self.create_jobstep(jobphase, status=Status.finished,
                            result=Result.infra_failed, replacement_id=jobstep.id)
        db.session.add(FailureReason(step_id=jobstep.id, job_id=job.id, build_id=build.id, project_id=project.id,
                                     reason='missing_tests'))
        db.session.commit()

        self.create_itemstat(item_id=build.id, name='names', value=99)
        self.create_itemstat(item_id=build.id, name='faces', value=0)

        with mock.patch('changes.listeners.analytics_notifier._get_phabricator_revision_url') as mock_get_phab:
            mock_get_phab.return_value = 'https://example.com/D1'
            with mock.patch('changes.listeners.analytics_notifier._get_build_failure_reasons') as mock_get_failures:
                mock_get_failures.return_value = ['aborted', 'missing_tests']
                build_finished_handler(build_id=build.id.hex)

        expected_data = {
            'build_id': build.id.hex,
            'number': 1,
            'target': 'D1',
            'project_slug': 'project-slug',
            'result': 'Failed',
            'label': 'Some sweet diff',
            'is_commit': True,
            'duration': 1234,
            'jobsteps_replaced': 1,
            'date_created': created,
            'date_started': started,
            'date_finished': finished,
            'date_decided': decided,
            'phab_revision_url': 'https://example.com/D1',
            'failure_reasons': ['aborted', 'missing_tests'],
            'tags': {'tags': ['angry', 'commit']},
            'tags_string': 'angry,commit',
            'item_stats': {'names': 99, 'faces': 0},
            'patch_hash': 'a' * 40,
        }
        post_fn.assert_called_once_with(URL, [expected_data])
Exemplo n.º 3
0
 def test_no_url(self, post_fn):
     self._set_config_url(None)
     project = self.create_project(name='test', slug='test')
     build = self.create_build(project, result=Result.failed)
     build_finished_handler(build_id=build.id.hex)
     self.assertEquals(post_fn.call_count, 0)
Exemplo n.º 4
0
    def test_failed_build(self, post_fn):
        URL = "https://analytics.example.com/report?source=changes"
        self._set_config_url(URL)
        project = self.create_project(name="test", slug="project-slug")
        self.assertEquals(post_fn.call_count, 0)
        duration = 1234
        created = 1424998888
        started = created + 10
        finished = started + duration
        decided = finished + 10

        build = self.create_build(
            project,
            result=Result.failed,
            target="D1",
            label="Some sweet diff",
            duration=duration,
            tags=["commit", "angry"],
            date_created=ts_to_datetime(created),
            date_started=ts_to_datetime(started),
            date_finished=ts_to_datetime(finished),
            date_decided=ts_to_datetime(decided),
        )

        job = self.create_job(build=build, result=Result.failed)
        jobphase = self.create_jobphase(job)
        jobstep = self.create_jobstep(jobphase, status=Status.finished, result=Result.failed)
        self.create_jobstep(jobphase, status=Status.finished, result=Result.infra_failed, replacement_id=jobstep.id)
        db.session.add(
            FailureReason(
                step_id=jobstep.id, job_id=job.id, build_id=build.id, project_id=project.id, reason="missing_tests"
            )
        )
        db.session.commit()

        self.create_itemstat(item_id=build.id, name="names", value=99)
        self.create_itemstat(item_id=build.id, name="faces", value=0)

        with mock.patch("changes.listeners.analytics_notifier._get_phabricator_revision_url") as mock_get_phab:
            mock_get_phab.return_value = "https://example.com/D1"
            with mock.patch("changes.listeners.analytics_notifier._get_build_failure_reasons") as mock_get_failures:
                mock_get_failures.return_value = ["aborted", "missing_tests"]
                build_finished_handler(build_id=build.id.hex)

        expected_data = {
            "build_id": build.id.hex,
            "number": 1,
            "target": "D1",
            "project_slug": "project-slug",
            "result": "Failed",
            "label": "Some sweet diff",
            "is_commit": True,
            "duration": 1234,
            "jobsteps_replaced": 1,
            "date_created": created,
            "date_started": started,
            "date_finished": finished,
            "date_decided": decided,
            "phab_revision_url": "https://example.com/D1",
            "failure_reasons": ["aborted", "missing_tests"],
            "tags": {"tags": ["angry", "commit"]},
            "item_stats": {"names": 99, "faces": 0},
        }
        post_fn.assert_called_once_with(URL, [expected_data])
Exemplo n.º 5
0
 def test_no_url(self, post_fn):
     self._set_config_url(None)
     project = self.create_project(name='test', slug='test')
     build = self.create_build(project, result=Result.failed)
     build_finished_handler(build_id=build.id.hex)
     self.assertEquals(post_fn.call_count, 0)