def test_build_containers_when_dependency_container_is_built(self, set_context, repo_urls, build_image):
        """
        Tests when dependency container is built, rebuild containers depend on it.
        """
        build_image.side_effect = [1, 2, 3]
        repo_urls.return_value = ["url"]
        e1 = models.Event.create(db.session, "test_msg_id", "RHSA-2018-001", events.TestingEvent)
        event = self.get_event_from_msg(get_fedmsg('brew_container_task_closed'))

        base_build = models.ArtifactBuild.create(db.session, e1, 'test-product-docker', ArtifactType.IMAGE, event.task_id)

        build_0 = models.ArtifactBuild.create(db.session, e1, 'docker-up-0', ArtifactType.IMAGE, 0,
                                              dep_on=base_build, state=ArtifactBuildState.PLANNED)
        build_1 = models.ArtifactBuild.create(db.session, e1, 'docker-up-1', ArtifactType.IMAGE, 0,
                                              dep_on=base_build, state=ArtifactBuildState.PLANNED)
        build_2 = models.ArtifactBuild.create(db.session, e1, 'docker-up-2', ArtifactType.IMAGE, 0,
                                              dep_on=base_build, state=ArtifactBuildState.PLANNED)

        self.handler.handle(event)
        self.assertEqual(base_build.state, ArtifactBuildState.DONE.value)
        build_image.assert_has_calls([
            mock.call(build_0, ['url']), mock.call(build_1, ['url']),
            mock.call(build_2, ['url']),
        ])

        set_context.assert_has_calls([
            mock.call(build_0), mock.call(build_1), mock.call(build_2)])

        self.assertEqual(build_0.build_id, 1)
        self.assertEqual(build_1.build_id, 2)
        self.assertEqual(build_2.build_id, 3)
    def test_not_build_containers_when_dependency_container_build_task_failed(
            self, repo_urls, build_image):
        """
        Tests when dependency container build task failed in brew, only update build state in db.
        """
        build_image.side_effect = [1, 2, 3, 4]
        repo_urls.return_value = ["url"]
        e1 = models.Event.create(db.session, "test_msg_id", "RHSA-2018-001", events.TestingEvent)
        event = self.get_event_from_msg(get_fedmsg('brew_container_task_failed'))

        base_build = models.ArtifactBuild.create(
            db.session, e1, 'test-product-docker', ArtifactType.IMAGE, event.task_id,
            original_nvr='foo-1-1')
        base_build.build_args = json.dumps({})

        models.ArtifactBuild.create(db.session, e1, 'docker-up', ArtifactType.IMAGE, 0,
                                    dep_on=base_build, state=ArtifactBuildState.PLANNED)
        self.handler.handle(event)
        self.assertEqual(base_build.state, ArtifactBuildState.BUILD.value)
        self.assertEqual(base_build.build_id, 1)
        event.task_id = 1
        self.handler.handle(event)
        self.assertEqual(base_build.state, ArtifactBuildState.BUILD.value)
        self.assertEqual(base_build.build_id, 2)
        event.task_id = 2
        self.handler.handle(event)
        self.assertEqual(base_build.state, ArtifactBuildState.FAILED.value)
        self.assertEqual(base_build.build_id, 2)
        build_image.assert_called()
コード例 #3
0
 def test_freshmaker_manage_mismatched_action(self):
     msg = get_fedmsg('freshmaker_manage_mismatched_action')
     with self.assertRaises(ValueError) as err:
         self.get_event_from_msg(msg)
     self.assertEqual(
         err.exception.args[0], 'Last part of \'Freshmaker manage\' message'
         ' topic must match the action defined within the message.')
    def test_mark_build_done_when_container_has_latest_rpms_from_advisory(self, get_binary_rpm_nvrs, KojiService):
        """
        Tests when dependency container build task failed in brew, only update build state in db.
        """
        get_binary_rpm_nvrs.return_value = set(['foo-1.2.1-22.el7'])

        koji_service = KojiService.return_value
        koji_service.get_build_rpms.return_value = [
            {'build_id': 634904, 'nvr': 'foo-debuginfo-1.2.1-22.el7', 'name': 'foo-debuginfo'},
            {'build_id': 634904, 'nvr': 'foo-1.2.1-22.el7', 'name': 'foo'},
            {'build_id': 634904, 'nvr': 'foo-debuginfo-1.1.1-22.el7', 'name': 'foo-debuginfo'},
            {'build_id': 634904, 'nvr': 'foo-1.1.1-22.el7', 'name': 'foo'},
        ]
        koji_service.get_rpms_in_container.return_value = set(
            ['foo-1.2.1-22.el7', 'bar-1.2.3-1.el7']
        )

        e1 = models.Event.create(db.session, "test_msg_id", "2018001", events.ErrataAdvisoryRPMsSignedEvent)
        event = self.get_event_from_msg(get_fedmsg('brew_container_task_closed'))
        build = models.ArtifactBuild.create(db.session, e1, 'test-product-docker', ArtifactType.IMAGE, event.task_id)

        self.handler.handle(event)

        self.assertEqual(build.state, ArtifactBuildState.DONE.value)
        self.assertEqual(build.state_reason, 'Built successfully.')
コード例 #5
0
    def test_more_than_max_tries_on_freshmaker_manage_request(self):
        msg = get_fedmsg('freshmaker_manage_eventcancel')
        msg['body']['msg']['try'] = events.FreshmakerManageEvent._max_tries
        event = self.get_event_from_msg(msg)

        handler = CancelEventOnFreshmakerManageRequest()
        self.assertFalse(handler.can_handle(event))
コード例 #6
0
 def test_can_handle_brew_container_task_failed_event(self):
     """
     Tests handler can handle brew build container task failed event.
     """
     event = self.get_event_from_msg(
         get_fedmsg('brew_container_task_failed'))
     self.assertTrue(self.handler.can_handle(event))
コード例 #7
0
    def test_can_not_handle_other_action_than_eventcancel(self):
        msg = get_fedmsg('freshmaker_manage_eventcancel')
        msg['body']['topic'] = 'freshmaker.manage.someotheraction'
        msg['body']['msg']['action'] = 'someotheraction'
        event = self.get_event_from_msg(msg)

        handler = CancelEventOnFreshmakerManageRequest()
        self.assertFalse(handler.can_handle(event))
コード例 #8
0
    def test_retry_failed_cancel_event_with_success(self, mocked_cancel_build):
        msg = get_fedmsg('freshmaker_manage_eventcancel')
        event = self.get_event_from_msg(msg)

        handler = CancelEventOnFreshmakerManageRequest()
        new_event = handler.handle(event)
        self.assertTrue(isinstance(new_event, list) and len(new_event))
        retval = handler.handle(new_event[0])
        self.assertEqual(retval, [])

        self.assertEqual([b.state_reason for b in self.db_event.builds.all()
                          ].count("Build canceled in external build system."),
                         2)
コード例 #9
0
    def test_max_tries_reached_on_cancel_event(self, mocked_cancel_build):
        msg = get_fedmsg('freshmaker_manage_eventcancel')
        msg['body']['msg']['try'] = events.FreshmakerManageEvent._max_tries - 1
        event = self.get_event_from_msg(msg)

        handler = CancelEventOnFreshmakerManageRequest()
        retval = handler.handle(event)
        self.assertEqual(retval, [])

        self.assertEqual([
            b.state_reason for b in self.db_event.builds.all()
        ].count(
            "Build was NOT canceled in external build system. Max number of tries reached!"
        ), 2)
コード例 #10
0
    def test_cancel_event_on_freshmaker_manage_request(self,
                                                       mocked_cancel_build):
        msg = get_fedmsg('freshmaker_manage_eventcancel')
        event = self.get_event_from_msg(msg)

        handler = CancelEventOnFreshmakerManageRequest()
        self.assertTrue(handler.can_handle(event))
        retval = handler.handle(event)
        self.assertEqual(retval, [])

        mocked_cancel_build.assert_any_call(1237)
        mocked_cancel_build.assert_any_call(1238)
        self.assertEqual([b.state_reason for b in self.db_event.builds.all()
                          ].count("Build canceled in external build system."),
                         2)
コード例 #11
0
 def test_freshmaker_manage_missing_action(self):
     msg = get_fedmsg('freshmaker_manage_missing_action')
     with self.assertRaises(ValueError) as err:
         self.get_event_from_msg(msg)
     self.assertEqual(err.exception.args[0],
                      'Action is not defined within the message.')