Ejemplo n.º 1
0
    def test_rebuild_if_not_exists_already_exists(self, advisories_from_event):
        handler = UpdateDBOnAdvisoryChange()

        db_event = Event.create(db.session, "msg124", "123",
                                ErrataAdvisoryRPMsSignedEvent)
        db.session.commit()

        for manual in [True, False]:
            for db_event_state in [
                    EventState.INITIALIZED, EventState.BUILDING,
                    EventState.COMPLETE, EventState.FAILED, EventState.SKIPPED
            ]:
                db_event.state = db_event_state
                db.session.commit()
                for state in [
                        "REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"
                ]:
                    advisories_from_event.return_value = [
                        ErrataAdvisory(123, "RHSA-2017", state, ["rpm"],
                                       "Critical")
                    ]
                    ev = ErrataAdvisoryStateChangedEvent(
                        "msg123",
                        ErrataAdvisory(123, 'RHSA-2017', state, ['rpm']))
                    ev.manual = manual
                    ev.dry_run = manual  # use also manual just for the sake of test.
                    ret = handler.handle(ev)

                    if db_event_state == EventState.FAILED or ev.manual:
                        self.assertEqual(len(ret), 1)
                        self.assertEqual(ret[0].manual, manual)
                        self.assertEqual(ret[0].dry_run, manual)
                    else:
                        self.assertEqual(len(ret), 0)
Ejemplo n.º 2
0
    def test_rebuild_if_errata_state_is_not_allowed_but_manual_is_true(
            self, rebuild_if_not_exists):
        rebuild_if_not_exists.return_value = [Mock()]

        Event.create(db.session, "msg-id-123", "123456",
                     ErrataAdvisoryRPMsSignedEvent, False)
        db.session.commit()

        event = ErrataAdvisoryStateChangedEvent(
            'msg-id-123',
            ErrataAdvisory(123456, "name", 'SHIPPED_LIVE', ['rpm']))
        event.manual = True
        handler = UpdateDBOnAdvisoryChange()
        msgs = handler.handle(event)

        self.assertEqual(len(msgs), 1)
Ejemplo n.º 3
0
 def test_advisories_from_event_errata_state_change_event(
         self, errata_http_get, errata_rest_get):
     MockedErrataAPI(errata_rest_get, errata_http_get)
     event = ErrataAdvisoryStateChangedEvent(
         "msgid", ErrataAdvisory(28484, "name", "SHIPPED_LIVE", ['rpm']))
     advisories = self.errata.advisories_from_event(event)
     self.assertEqual(len(advisories), 1)
     self.assertEqual(advisories[0].errata_id, 28484)
Ejemplo n.º 4
0
 def test_ensure_to_handle_rpm_and_module_adivsory(self):
     for content_type in ['rpm', 'module']:
         event = ErrataAdvisoryStateChangedEvent(
             'msg-id-1',
             ErrataAdvisory(123, 'name', 'REL_PREP',
                            [content_type, 'jar', 'pom']))
         handler = UpdateDBOnAdvisoryChange()
         self.assertTrue(handler.can_handle(event))
Ejemplo n.º 5
0
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))

        errata = Errata()
        return ErrataAdvisoryStateChangedEvent(
            msg_id, ErrataAdvisory.from_advisory_id(errata, errata_id))
Ejemplo n.º 6
0
    def test_rebuild_if_not_exists_unknown_errata_id(self,
                                                     advisories_from_event):
        advisories_from_event.return_value = []
        handler = UpdateDBOnAdvisoryChange()

        for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]:
            ev = ErrataAdvisoryStateChangedEvent(
                "msg123", ErrataAdvisory(123, 'RHSA-2017', state, ['rpm']))
            ret = handler.handle(ev)

            self.assertEqual(len(ret), 0)
Ejemplo n.º 7
0
    def test_rebuild_if_not_exists_unknown_states(self, advisories_from_event):
        handler = UpdateDBOnAdvisoryChange()

        for state in ["NEW_FILES", "QE", "UNKNOWN"]:
            advisories_from_event.return_value = [
                ErrataAdvisory(123, "RHSA-2017", state, ["rpm"], "Critical")
            ]
            ev = ErrataAdvisoryStateChangedEvent(
                "msg123", ErrataAdvisory(123, 'RHSA-2017', state, ['rpm']))
            ret = handler.handle(ev)

            self.assertEqual(len(ret), 0)
Ejemplo n.º 8
0
    def test_mark_as_released_wrong_advisory_status(self):
        db_event = Event.create(db.session, "msg124", "123",
                                ErrataAdvisoryRPMsSignedEvent, False)
        db.session.commit()

        for state in ["NEW_FILES", "QE", "REL_PREP", "PUSH_READY", "IN_PUSH"]:
            ev = ErrataAdvisoryStateChangedEvent(
                "msg123", ErrataAdvisory(123, "name", state, ['rpm']))

            handler = UpdateDBOnAdvisoryChange()
            handler.handle(ev)

            db.session.refresh(db_event)
            self.assertEqual(db_event.released, False)
Ejemplo n.º 9
0
    def test_rebuild_if_not_exists(self, advisories_from_event):
        handler = UpdateDBOnAdvisoryChange()

        for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]:
            advisories_from_event.return_value = [
                ErrataAdvisory(123, "RHSA-2017", state, ["rpm"], "Critical")
            ]
            ev = ErrataAdvisoryStateChangedEvent(
                "msg123", ErrataAdvisory(123, "RHSA-2017", state, ['rpm']))
            ret = handler.handle(ev)

            self.assertEqual(len(ret), 1)
            self.assertEqual(ret[0].advisory.errata_id, 123)
            self.assertEqual(ret[0].advisory.security_impact, "Critical")
            self.assertEqual(ret[0].advisory.name, "RHSA-2017")
Ejemplo n.º 10
0
    def test_mark_as_released(self):
        db_event = Event.create(db.session, "msg124", "123",
                                ErrataAdvisoryRPMsSignedEvent, False)
        db.session.commit()

        self.assertEqual(db_event.released, False)

        ev = ErrataAdvisoryStateChangedEvent(
            "msg123", ErrataAdvisory(123, "name", "SHIPPED_LIVE", ["rpm"]))

        handler = UpdateDBOnAdvisoryChange()
        handler.handle(ev)

        db.session.refresh(db_event)
        self.assertEqual(db_event.released, True)
Ejemplo n.º 11
0
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))

        errata = Errata()
        advisory = ErrataAdvisory.from_advisory_id(errata, errata_id)
        # If advisory created by BOTAS and it's shipped,
        # then return BotasErrataShippedEvent event
        if advisory.state == "SHIPPED_LIVE" and \
           advisory.reporter.startswith('botas'):
            event = BotasErrataShippedEvent(msg_id, advisory)
        else:
            event = ErrataAdvisoryStateChangedEvent(msg_id, advisory)
        return event
Ejemplo n.º 12
0
    def setUp(self):
        super(RebuildImagesOnImageAdvisoryChangeTest, self).setUp()

        self.event = ErrataAdvisoryStateChangedEvent(
            "123",
            ErrataAdvisory(123,
                           "RHBA-2017",
                           "SHIPPED_LIVE", [],
                           security_impact="",
                           product_short_name="product"))
        self.handler = RebuildImagesOnImageAdvisoryChange()
        self.db_event = models.Event.get_or_create(db.session,
                                                   self.event.msg_id,
                                                   self.event.search_key,
                                                   self.event.__class__)
Ejemplo n.º 13
0
    def test_passing_dry_run(self):
        ev = ErrataAdvisoryStateChangedEvent("msg123",
                                             ErrataAdvisory(
                                                 123, "name", "SHIPPED_LIVE",
                                                 ["rpm"]),
                                             dry_run=True)
        self.assertEqual(ev.dry_run, True)

        ev = ErrataAdvisoryRPMsSignedEvent("123",
                                           ErrataAdvisory(
                                               123,
                                               "RHBA-2017",
                                               "REL_PREP", [],
                                               security_impact="",
                                               product_short_name="product"),
                                           dry_run=True)
        self.assertEqual(ev.dry_run, True)
Ejemplo n.º 14
0
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))
        new_state = inner_msg.get('to')

        errata = Errata()
        advisory = ErrataAdvisory.from_advisory_id(errata, errata_id)
        # When there is message delay, state change messages can arrive after
        # advisory has been changed to a different state other than the one
        # in message, so we override advisory state with the state in message
        advisory.state = new_state

        # If advisory created by BOTAS and it's shipped,
        # then return BotasErrataShippedEvent event
        if advisory.state == "SHIPPED_LIVE" and advisory.reporter.startswith(
                'botas'):
            event = BotasErrataShippedEvent(msg_id, advisory)
        else:
            event = ErrataAdvisoryStateChangedEvent(msg_id, advisory)
        return event
Ejemplo n.º 15
0
 def test_not_handle_non_rpm_advisory(self):
     event = ErrataAdvisoryStateChangedEvent(
         'msg-id-1', ErrataAdvisory(123, 'name', 'REL_PREP', ['docker']))
     handler = UpdateDBOnAdvisoryChange()
     self.assertFalse(handler.can_handle(event))
Ejemplo n.º 16
0
    def test_mark_as_released_unknown_event(self, advisories_from_event):
        ev = ErrataAdvisoryStateChangedEvent(
            "msg123", ErrataAdvisory(123, "name", "SHIPPED_LIVE", ["rpm"]))

        handler = UpdateDBOnAdvisoryChange()
        handler.handle(ev)