Exemple #1
0
    def test_enumfields(self):
        """Testing enum fields on releases."""
        client = Client(schema)
        release = Release(name='F22',
                          long_name='Fedora 22',
                          id_prefix='FEDORA',
                          version='22',
                          dist_tag='f22',
                          stable_tag='f22-updates',
                          testing_tag='f22-updates-testing',
                          candidate_tag='f22-updates-candidate',
                          pending_signing_tag='f22-updates-testing-signing',
                          pending_testing_tag='f22-updates-testing-pending',
                          pending_stable_tag='f22-updates-pending',
                          override_tag='f22-override',
                          branch='f22',
                          package_manager=PackageManager.dnf,
                          testing_repository='updates-testing')

        self.db.add(release)
        self.db.commit()

        executed = client.execute(
            """{  allReleases{  state    packageManager  }}""")
        assert executed == {
            'data': {
                'allReleases': [{
                    'packageManager': 'unspecified',
                    'state': 'current'
                }, {
                    'packageManager': 'dnf',
                    'state': 'disabled'
                }]
            }
        }
Exemple #2
0
    def test___init___uses_bz2_for_epel(self):
        """Assert that the __init__() method sets the comp_type attribute to cr.BZ2 for EPEL."""
        epel_7 = Release(id_prefix="FEDORA-EPEL", stable_tag='epel7')

        md = UpdateInfoMetadata(epel_7, UpdateRequest.stable, self.db, self.tempdir)

        self.assertEqual(md.comp_type, createrepo_c.BZ2)
Exemple #3
0
    def test_allReleases(self):
        """Testing allReleases."""
        client = Client(schema)
        release = Release(name='F22',
                          long_name='Fedora 22',
                          id_prefix='FEDORA',
                          version='22',
                          dist_tag='f22',
                          stable_tag='f22-updates',
                          testing_tag='f22-updates-testing',
                          candidate_tag='f22-updates-candidate',
                          pending_signing_tag='f22-updates-testing-signing',
                          pending_testing_tag='f22-updates-testing-pending',
                          pending_stable_tag='f22-updates-pending',
                          override_tag='f22-override',
                          branch='f22',
                          package_manager=PackageManager.dnf,
                          testing_repository='updates-testing')

        self.db.add(release)
        self.db.commit()

        executed = client.execute("""{  allReleases{  name  }}""")
        assert executed == {
            "data": {
                "allReleases": [{
                    "name": "F17"
                }, {
                    "name": "F22"
                }]
            }
        }
Exemple #4
0
def save_release(request):
    """
    Save a release.

    This entails either creating a new release, or editing an existing one. To
    edit an existing release, the release's original name must be specified in
    the ``edited`` parameter.

    Args:
        request (pyramid.request): The current request.
    Returns:
        bodhi.server.models.Request: The created or edited Request.
    """
    data = request.validated

    edited = data.pop("edited", None)

    # This has already been validated at this point, but we need to ditch
    # it since the models don't care about a csrf argument.
    data.pop('csrf_token', None)

    try:
        if edited is None:
            log.info("Creating a new release: %s" % data['name'])
            r = Release(**data)

        else:
            log.info("Editing release: %s" % edited)
            r = request.db.query(Release).filter(Release.name == edited).one()
            for k, v in data.items():
                # We have to change updates status to obsolete
                # if state of release changes to archived
                if k == "state" and v == ReleaseState.archived and \
                        r.state != ReleaseState.archived:
                    updates = request.db.query(Update).filter(Update.release_id == r.id).filter(
                        Update.status.notin_(
                            [UpdateStatus.obsolete, UpdateStatus.stable, UpdateStatus.unpushed]
                        )
                    ).all()
                    for u in updates:
                        u.status = UpdateStatus.obsolete
                        u.comment(
                            request.db,
                            'This update is marked obsolete because '
                            'the {} release is archived.'.format(u.release.name),
                            author='bodhi',
                        )
                setattr(r, k, v)

    except Exception as e:
        log.exception(e)
        request.errors.add('body', 'release',
                           'Unable to create/edit release: %s' % e)
        return

    request.db.add(r)
    request.db.flush()

    return r
Exemple #5
0
def populate(db):
    """
    Create some data for tests to use.

    Args:
        db (sqlalchemy.orm.session.Session): The database session.
    """
    user = User(name='guest')
    db.add(user)
    anonymous = User(name='anonymous')
    db.add(anonymous)
    provenpackager = Group(name='provenpackager')
    db.add(provenpackager)
    packager = Group(name='packager')
    db.add(packager)
    user.groups.append(packager)
    release = Release(name='F17',
                      long_name='Fedora 17',
                      id_prefix='FEDORA',
                      version='17',
                      dist_tag='f17',
                      stable_tag='f17-updates',
                      testing_tag='f17-updates-testing',
                      candidate_tag='f17-updates-candidate',
                      pending_signing_tag='f17-updates-signing-pending',
                      pending_testing_tag='f17-updates-testing-pending',
                      pending_stable_tag='f17-updates-pending',
                      override_tag='f17-override',
                      branch='f17',
                      state=ReleaseState.current,
                      create_automatic_updates=True,
                      package_manager=PackageManager.unspecified,
                      testing_repository=None)
    db.add(release)
    db.flush()
    # This mock will help us generate a consistent update alias.
    with mock.patch(target='uuid.uuid4', return_value='wat'):
        update = create_update(db, ['bodhi-2.0-1.fc17'])
    update.type = UpdateType.bugfix
    update.severity = UpdateSeverity.medium
    bug = Bug(bug_id=12345)
    db.add(bug)
    update.bugs.append(bug)

    comment = Comment(karma=1, text="wow. amaze.")
    db.add(comment)
    comment.user = user
    update.comments.append(comment)

    comment = Comment(karma=0, text="srsly.  pretty good.")
    comment.user = anonymous
    db.add(comment)
    update.comments.append(comment)

    db.add(update)

    db.commit()
Exemple #6
0
def populate(db):
    """
    Create some data for tests to use.

    Args:
        db (sqlalchemy.orm.session.Session): The database session.
    """
    user = User(name=u'guest')
    db.add(user)
    anonymous = User(name=u'anonymous')
    db.add(anonymous)
    provenpackager = Group(name=u'provenpackager')
    db.add(provenpackager)
    packager = Group(name=u'packager')
    db.add(packager)
    user.groups.append(packager)
    release = Release(name=u'F17',
                      long_name=u'Fedora 17',
                      id_prefix=u'FEDORA',
                      version=u'17',
                      dist_tag=u'f17',
                      stable_tag=u'f17-updates',
                      testing_tag=u'f17-updates-testing',
                      candidate_tag=u'f17-updates-candidate',
                      pending_signing_tag=u'f17-updates-testing-signing',
                      pending_testing_tag=u'f17-updates-testing-pending',
                      pending_stable_tag=u'f17-updates-pending',
                      override_tag=u'f17-override',
                      branch=u'f17',
                      state=ReleaseState.current)
    db.add(release)
    db.flush()
    update = create_update(db, [u'bodhi-2.0-1.fc17'])
    update.type = UpdateType.bugfix
    update.severity = UpdateSeverity.medium
    bug = Bug(bug_id=12345)
    db.add(bug)
    update.bugs.append(bug)
    cve = CVE(cve_id=u"CVE-1985-0110")
    db.add(cve)
    update.cves.append(cve)

    comment = Comment(karma=1, text=u"wow. amaze.")
    db.add(comment)
    comment.user = user
    update.comments.append(comment)

    comment = Comment(karma=0, text=u"srsly.  pretty good.", anonymous=True)
    comment.user = anonymous
    db.add(comment)
    update.comments.append(comment)

    with mock.patch(target='uuid.uuid4', return_value='wat'):
        update.assign_alias()
    db.add(update)

    db.commit()
Exemple #7
0
    def test_list_overrides_by_releases_without_override(self):
        self.db.add(Release(name='F42', long_name='Fedora 42',
                            id_prefix='FEDORA', version='42',
                            dist_tag='f42', stable_tag='f42-updates',
                            testing_tag='f42-updates-testing',
                            candidate_tag='f42-updates-candidate',
                            pending_signing_tag='f42-updates-testing-signing',
                            pending_testing_tag='f42-updates-testing-pending',
                            pending_stable_tag='f42-updates-pending',
                            override_tag='f42-override',
                            branch='f42'))
        self.db.flush()

        res = self.app.get('/overrides/', {'releases': 'F42'})

        body = res.json_body
        self.assertEqual(len(body['overrides']), 0)
Exemple #8
0
    def setUp(self):
        super(TestReleasesService, self).setUp()

        release = Release(
            name=u'F22', long_name=u'Fedora 22',
            id_prefix=u'FEDORA', version=u'22',
            dist_tag=u'f22', stable_tag=u'f22-updates',
            testing_tag=u'f22-updates-testing',
            candidate_tag=u'f22-updates-candidate',
            pending_signing_tag=u'f22-updates-testing-signing',
            pending_testing_tag=u'f22-updates-testing-pending',
            pending_stable_tag=u'f22-updates-pending',
            override_tag=u'f22-override',
            branch=u'f22')

        self.db.add(release)
        self.db.flush()
Exemple #9
0
    def setUp(self):
        super(TestReleasesService, self).setUp()

        release = Release(
            name='F22', long_name='Fedora 22',
            id_prefix='FEDORA', version='22',
            dist_tag='f22', stable_tag='f22-updates',
            testing_tag='f22-updates-testing',
            candidate_tag='f22-updates-candidate',
            pending_signing_tag='f22-updates-testing-signing',
            pending_testing_tag='f22-updates-testing-pending',
            pending_stable_tag='f22-updates-pending',
            override_tag='f22-override',
            branch='f22',
            package_manager=PackageManager.dnf,
            testing_repository='updates-testing')

        self.db.add(release)
        self.db.commit()
Exemple #10
0
def save_release(request):
    """
    Save a release.

    This entails either creating a new release, or editing an existing one. To
    edit an existing release, the release's original name must be specified in
    the ``edited`` parameter.

    Args:
        request (pyramid.request): The current request.
    Returns:
        bodhi.server.models.Request: The created or edited Request.
    """
    data = request.validated

    edited = data.pop("edited", None)

    # This has already been validated at this point, but we need to ditch
    # it since the models don't care about a csrf argument.
    data.pop('csrf_token', None)

    try:
        if edited is None:
            log.info("Creating a new release: %s" % data['name'])
            r = Release(**data)

        else:
            log.info("Editing release: %s" % edited)
            r = request.db.query(Release).filter(Release.name == edited).one()
            for k, v in data.items():
                setattr(r, k, v)

    except Exception as e:
        log.exception(e)
        request.errors.add('body', 'release',
                           'Unable to create update: %s' % e)
        return

    request.db.add(r)
    request.db.flush()

    return r
Exemple #11
0
    def setup_method(self, method):
        super().setup_method(method)

        release = Release(name='F22',
                          long_name='Fedora 22',
                          id_prefix='FEDORA',
                          version='22',
                          dist_tag='f22',
                          stable_tag='f22-updates',
                          testing_tag='f22-updates-testing',
                          candidate_tag='f22-updates-candidate',
                          pending_signing_tag='f22-updates-testing-signing',
                          pending_testing_tag='f22-updates-testing-pending',
                          pending_stable_tag='f22-updates-pending',
                          override_tag='f22-override',
                          branch='f22',
                          package_manager=PackageManager.dnf,
                          testing_repository='updates-testing',
                          eol=date(2016, 6, 14))

        self.db.add(release)
        self.db.commit()
Exemple #12
0
    def setUp(self, *args, **kwargs):
        super(TestReleasesHTML, self).setUp(*args, **kwargs)

        def _add_updates(updateslist, user, release, packagesuffix):
            """Private method that adds updates to the database for testing

            """
            count = 0
            for i in updateslist:
                for j in i[1]:
                    for k in range(0, j[1]):
                        update = Update(
                            user=user,
                            status=i[0],
                            type=j[0],
                            notes='Useful details!',
                            release=release,
                            date_submitted=datetime(1984, 11, 2),
                            requirements='rpmlint',
                            stable_karma=3,
                            unstable_karma=-3,
                        )
                        self.db.add(update)
                        self.db.commit()
                        count = count + 1

        user2 = User(name='dudemcpants')
        self.db.flush()
        self.db.add(user2)

        release = Release(name='F18',
                          long_name='Fedora 18',
                          id_prefix='FEDORA',
                          version='18',
                          dist_tag='f18',
                          stable_tag='f18-updates',
                          testing_tag='f18-updates-testing',
                          candidate_tag='f18-updates-candidate',
                          pending_signing_tag='f18-updates-testing-signing',
                          pending_testing_tag='f18-updates-testing-pending',
                          pending_stable_tag='f18-updates-pending',
                          override_tag='f18-override',
                          branch='f18',
                          state=ReleaseState.pending)
        self.db.add(release)

        currentrelease = self.db.query(Release).filter_by(name='F17').one()
        addedupdates = [[
            UpdateStatus.pending,
            [[UpdateType.security, 5], [UpdateType.bugfix, 4],
             [UpdateType.enhancement, 3], [UpdateType.newpackage, 2]]
        ],
                        [
                            UpdateStatus.testing,
                            [[UpdateType.security, 15],
                             [UpdateType.bugfix, 14],
                             [UpdateType.enhancement, 13],
                             [UpdateType.newpackage, 12]]
                        ],
                        [
                            UpdateStatus.stable,
                            [[UpdateType.security, 25],
                             [UpdateType.bugfix, 24],
                             [UpdateType.enhancement, 23],
                             [UpdateType.newpackage, 22]]
                        ]]

        with fml_testing.mock_sends(*[api.Message] * 54):
            _add_updates(addedupdates, user2, currentrelease, "fc17")

        pendingrelease = self.db.query(Release).filter_by(name='F18').one()
        addedupdates2 = [[
            UpdateStatus.pending,
            [[UpdateType.security, 2], [UpdateType.bugfix, 2],
             [UpdateType.enhancement, 2], [UpdateType.newpackage, 2]]
        ],
                         [
                             UpdateStatus.testing,
                             [[UpdateType.security, 3], [UpdateType.bugfix, 3],
                              [UpdateType.enhancement, 3],
                              [UpdateType.newpackage, 3]]
                         ],
                         [
                             UpdateStatus.stable,
                             [[UpdateType.security, 4], [UpdateType.bugfix, 4],
                              [UpdateType.enhancement, 4],
                              [UpdateType.newpackage, 4]]
                         ]]
        with fml_testing.mock_sends(*[api.Message] * 12):
            _add_updates(addedupdates2, user2, pendingrelease, "fc18")
        self.db.flush()
        # Clear the caches
        Release._tag_cache = None
        generic._generate_home_page_stats.invalidate()
Exemple #13
0
    def setUp(self, *args, **kwargs):
        super(TestFrontpageView, self).setUp(*args, **kwargs)

        def _add_updates(updateslist, user, release, packagesuffix):
            """Private method that adds updates to the database for testing

            """
            count = 0
            for i in updateslist:
                for j in i[1]:
                    for k in range(0, j[1]):
                        update = Update(
                            title=u'bodhi-2.0-1%s.%s' %
                            (str(count), packagesuffix),
                            user=user,
                            status=i[0],
                            type=j[0],
                            notes=u'Useful details!',
                            release=release,
                            date_submitted=datetime(1984, 11, 2),
                            requirements=u'rpmlint',
                            stable_karma=3,
                            unstable_karma=-3,
                        )
                        self.db.add(update)
                        self.db.flush()
                        count = count + 1

        user2 = User(name=u'dudemcpants')
        self.db.flush()
        self.db.add(user2)

        release = Release(name=u'F18',
                          long_name=u'Fedora 18',
                          id_prefix=u'FEDORA',
                          version=u'18',
                          dist_tag=u'f18',
                          stable_tag=u'f18-updates',
                          testing_tag=u'f18-updates-testing',
                          candidate_tag=u'f18-updates-candidate',
                          pending_signing_tag=u'f18-updates-testing-signing',
                          pending_testing_tag=u'f18-updates-testing-pending',
                          pending_stable_tag=u'f18-updates-pending',
                          override_tag=u'f18-override',
                          branch=u'f18',
                          state=ReleaseState.pending)
        self.db.add(release)

        currentrelease = self.db.query(Release).filter_by(name=u'F17').one()
        addedupdates = [[
            UpdateStatus.pending,
            [[UpdateType.security, 5], [UpdateType.bugfix, 4],
             [UpdateType.enhancement, 3], [UpdateType.newpackage, 2]]
        ],
                        [
                            UpdateStatus.testing,
                            [[UpdateType.security, 15],
                             [UpdateType.bugfix, 14],
                             [UpdateType.enhancement, 13],
                             [UpdateType.newpackage, 12]]
                        ],
                        [
                            UpdateStatus.stable,
                            [[UpdateType.security, 25],
                             [UpdateType.bugfix, 24],
                             [UpdateType.enhancement, 23],
                             [UpdateType.newpackage, 22]]
                        ]]
        _add_updates(addedupdates, user2, currentrelease, "fc17")

        pendingrelease = self.db.query(Release).filter_by(name=u'F18').one()
        addedupdates2 = [[
            UpdateStatus.pending,
            [[UpdateType.security, 2], [UpdateType.bugfix, 2],
             [UpdateType.enhancement, 2], [UpdateType.newpackage, 2]]
        ],
                         [
                             UpdateStatus.testing,
                             [[UpdateType.security, 3], [UpdateType.bugfix, 3],
                              [UpdateType.enhancement, 3],
                              [UpdateType.newpackage, 3]]
                         ],
                         [
                             UpdateStatus.stable,
                             [[UpdateType.security, 4], [UpdateType.bugfix, 4],
                              [UpdateType.enhancement, 4],
                              [UpdateType.newpackage, 4]]
                         ]]
        _add_updates(addedupdates2, user2, pendingrelease, "fc18")
        self.db.flush()
        Release._tag_cache = None