Пример #1
0
    def test_cannot_edit_override_build(self):
        release = Release.get('F17')

        old_nvr = 'bodhi-2.0-1.fc17'

        res = self.app.get('/overrides/%s' % old_nvr,
                           headers={'Accept': 'application/json'})
        o = res.json_body['override']
        expiration_date = o['expiration_date']
        old_build_id = o['build_id']

        build = RpmBuild(nvr='bodhi-2.0-2.fc17', release=release,
                         package=RpmPackage.query.filter_by(name='bodhi').one())
        self.db.add(build)
        self.db.flush()

        o.update({
            'nvr': build.nvr,
            'edited': old_nvr,
            'csrf_token': self.get_csrf_token(),
        })

        with fml_testing.mock_sends():
            res = self.app.post('/overrides/', o)

        override = res.json_body
        self.assertEqual(override['build_id'], old_build_id)
        self.assertEqual(override['notes'], 'blah blah blah')
        self.assertEqual(override['expiration_date'], expiration_date)
        self.assertEqual(override['expired_date'], None)
Пример #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)
Пример #3
0
    def test_cannot_edit_override_build(self, publish):
        release = Release.get(u'F17', self.db)

        old_nvr = u'bodhi-2.0-1.fc17'

        res = self.app.get('/overrides/%s' % old_nvr)
        o = res.json_body['override']
        expiration_date = o['expiration_date']
        old_build_id = o['build_id']

        build = RpmBuild(
            nvr=u'bodhi-2.0-2.fc17',
            release=release,
            package=RpmPackage.query.filter_by(name='bodhi').one())
        self.db.add(build)
        self.db.flush()

        o.update({
            'nvr': build.nvr,
            'edited': old_nvr,
            'csrf_token': self.get_csrf_token(),
        })
        res = self.app.post('/overrides/', o)

        override = res.json_body
        self.assertEquals(override['build_id'], old_build_id)
        self.assertEquals(override['notes'], 'blah blah blah')
        self.assertEquals(override['expiration_date'], expiration_date)
        self.assertEquals(override['expired_date'], None)
        self.assertEquals(len(publish.call_args_list), 0)
Пример #4
0
    def test_create_duplicate_override(self):
        release = Release.get('F17')
        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {'nvr': build.nvr, 'notes': 'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}

        with fml_testing.mock_sends(override_schemas.BuildrootOverrideTagV1):
            res = self.app.post('/overrides/', data)

        o = res.json_body
        self.assertEqual(o['build_id'], build.id)
        self.assertEqual(o['notes'], 'blah blah blah')
        self.assertEqual(o['expiration_date'],
                         expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEqual(o['expired_date'], None)

        # Submit it again
        data['notes'] = 'new blah blah'
        res = self.app.post('/overrides/', data)
        o = res.json_body
        new_notes = """blah blah blah

_@guest ({})_

_____________
new blah blah""".format(datetime.utcnow().strftime("%b %d, %Y"))
        self.assertEqual(o['notes'], new_notes)
Пример #5
0
    def test_list_overrides_by_multiple_usernames(self):
        release = Release.get('F17')

        package = RpmPackage(name='just-testing')
        self.db.add(package)
        build = RpmBuild(nvr='just-testing-1.0-2.fc17', package=package, release=release)
        self.db.add(build)
        another_user = User(name='aUser')
        self.db.add(another_user)

        expiration_date = datetime.utcnow() + timedelta(days=1)

        override = BuildrootOverride(build=build, submitter=another_user,
                                     notes='Crazy! 😱',
                                     expiration_date=expiration_date)
        self.db.add(override)
        self.db.flush()

        res = self.app.get('/overrides/', {"user": "******"})
        body = res.json_body
        self.assertEqual(len(body['overrides']), 2)

        override_fake = body['overrides'][0]
        self.assertEqual(override_fake['build']['nvr'], 'just-testing-1.0-2.fc17')
        self.assertEqual(override_fake['submitter']['name'], 'aUser')
        self.assertEqual(override_fake['notes'], 'Crazy! 😱')

        override_orig = body['overrides'][1]
        self.assertEqual(override_orig['build']['nvr'], 'bodhi-2.0-1.fc17')
        self.assertEqual(override_orig['submitter']['name'], 'guest')
        self.assertEqual(override_orig['notes'], 'blah blah blah')
Пример #6
0
    def get_update_counts(releaseid):
        """
        Return counts for the various states and types of updates in the given release.

        This function returns a dictionary that tabulates the counts of the various
        types of Bodhi updates at the various states they can appear in. The
        dictionary has the following keys, with pretty self-explanatory names:

            pending_updates_total
            testing_updates_total
            stable_updates_total

        Args:
            releaseid (str): The id of the Release object you would like the counts performed on
        Returns:
            dict: A dictionary expressing the counts, as described above.
        """
        release = Release.get(releaseid)
        basequery = Update.query.filter(Update.release == release)
        counts = {}
        counts.update(_get_status_counts(basequery, UpdateStatus.pending))
        counts.update(_get_status_counts(basequery, UpdateStatus.testing))
        counts.update(_get_status_counts(basequery, UpdateStatus.stable))

        return counts
Пример #7
0
    def test_create_override(self):
        release = Release.get('F17')

        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17',
                         package=package,
                         release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {
            'nvr': build.nvr,
            'notes': 'blah blah blah',
            'expiration_date': expiration_date,
            'csrf_token': self.get_csrf_token()
        }

        with fml_testing.mock_sends(override_schemas.BuildrootOverrideTagV1):
            res = self.app.post('/overrides/', data)

        o = res.json_body
        assert o['build_id'] == build.id
        assert o['notes'] == 'blah blah blah'
        assert o['expiration_date'] == expiration_date.strftime(
            "%Y-%m-%d %H:%M:%S")
        assert o['expired_date'] is None
Пример #8
0
    def test_create_override(self, publish):
        release = Release.get('F17')

        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {'nvr': build.nvr, 'notes': 'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}
        res = self.app.post('/overrides/', data)

        publish.assert_called_once_with(
            topic='buildroot_override.tag', msg=mock.ANY)
        self.assertEqual(len(publish.call_args_list), 1)

        o = res.json_body
        self.assertEqual(o['build_id'], build.id)
        self.assertEqual(o['notes'], 'blah blah blah')
        self.assertEqual(o['expiration_date'],
                         expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEqual(o['expired_date'], None)
Пример #9
0
    def test_create_override_for_build_with_test_gating_status_failed(self):
        """
        Test that Override is not created when the test gating status is failed.
        """
        release = Release.get('F17')
        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        update = Update.query.first()
        update.builds.append(build)
        update.test_gating_status = TestGatingStatus.failed
        self.db.add(build)
        self.db.flush()
        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {'nvr': build.nvr, 'notes': 'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}

        with fml_testing.mock_sends():
            res = self.app.post('/overrides/', data, status=400)

        errors = res.json_body['errors']
        self.assertEqual(len(errors), 1)
        self.assertEqual(errors[0]['name'], 'nvr')
        self.assertEqual(errors[0]['description'],
                         "Cannot create a buildroot override if "
                         "build's test gating status is failed.")
Пример #10
0
    def test_create_duplicate_override_notes_too_long(self):
        """When notes are too long, truncate the older."""
        release = Release.get('F17')
        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {'nvr': build.nvr, 'notes': 'blah' * 500,
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}

        with fml_testing.mock_sends(override_schemas.BuildrootOverrideTagV1):
            res = self.app.post('/overrides/', data)

        o = res.json_body
        assert o['build_id'] == build.id
        assert o['notes'] == 'blah' * 500
        assert o['expiration_date'] == expiration_date.strftime("%Y-%m-%d %H:%M:%S")
        assert o['expired_date'] is None

        # Submit it again
        data['notes'] = 'new blah blah'
        res = self.app.post('/overrides/', data)
        o = res.json_body
        assert o['notes'].endswith('(...)\n___Notes truncated___')
        assert len(o['notes']) <= 2000
Пример #11
0
    def test_edit_unexisting_override(self):
        release = Release.get(u'F17', self.db)

        build = RpmBuild(
            nvr=u'bodhi-2.0-2.fc17',
            release=release,
            package=RpmPackage.query.filter_by(name='bodhi').one())
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        o = {
            'nvr': build.nvr,
            'notes': 'blah blah blah',
            'expiration_date': expiration_date,
            'edited': build.nvr,
            'csrf_token': self.get_csrf_token(),
        }
        res = self.app.post('/overrides/', o, status=400)

        errors = res.json_body['errors']
        self.assertEquals(len(errors), 1)
        self.assertEquals(errors[0]['name'], 'edited')
        self.assertEquals(errors[0]['description'],
                          'No buildroot override for this build')
Пример #12
0
    def test_create_duplicate_override(self):
        """When creating a duplicate override, old notes are appended."""
        release = Release.get('F17')
        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {'nvr': build.nvr, 'notes': 'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}

        with fml_testing.mock_sends(override_schemas.BuildrootOverrideTagV1):
            res = self.app.post('/overrides/', data)

        o = res.json_body
        assert o['build_id'] == build.id
        assert o['notes'] == 'blah blah blah'
        assert o['expiration_date'] == expiration_date.strftime("%Y-%m-%d %H:%M:%S")
        assert o['expired_date'] is None

        # Submit it again
        data['notes'] = 'new blah blah'
        res = self.app.post('/overrides/', data)
        o = res.json_body
        new_notes = f"""new blah blah
_____________
_@guest ({datetime.utcnow().strftime('%b %d, %Y')})_
blah blah blah"""
        assert o['notes'] == new_notes
Пример #13
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'
                }]
            }
        }
Пример #14
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"
                }]
            }
        }
Пример #15
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
Пример #16
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()
Пример #17
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()
Пример #18
0
def get_releases(request):
    """
    Return a defaultdict describing all Releases keyed by state.

    Args:
        request (pyramid.request.Request): The current web request. Unused.
    Returns:
        collections.defaultdict: A dictionary mapping release states to a list of JSON strings
            that describe the Releases that are in those states.
    """
    from bodhi.server.models import Release
    return Release.all_releases()
Пример #19
0
    def test_create_override_too_long(self):
        release = Release.get('F17')

        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr='not-bodhi-2.0-2.fc17', package=package, release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=60)

        data = {'nvr': build.nvr, 'notes': 'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}
        self.app.post('/overrides/', data, status=400)
Пример #20
0
def get_release_json(request):
    """
    Return JSON for a release given by name.

    Args:
        request (pyramid.json): The current request.
    Returns:
        bodhi.server.models.Release: The matched Release.
    """
    id = request.matchdict.get('name')
    release = Release.get(id)
    if not release:
        request.errors.add('body', 'name', 'No such release')
        request.errors.status = HTTPNotFound.code
    return release
Пример #21
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)
Пример #22
0
    def test_create_override_multiple_nvr(self):
        release = Release.get('F17')
        package = RpmPackage(name='not-bodhi')
        self.db.add(package)
        build1 = RpmBuild(nvr='not-bodhi-2.0-2.fc17',
                          package=package,
                          release=release)
        self.db.add(build1)
        self.db.flush()

        package = RpmPackage(name='another-not-bodhi')
        self.db.add(package)
        build2 = RpmBuild(nvr='another-not-bodhi-2.0-2.fc17',
                          package=package,
                          release=release)
        self.db.add(build2)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {
            'nvr': ','.join([build1.nvr, build2.nvr]),
            'notes': 'blah blah blah',
            'expiration_date': expiration_date,
            'csrf_token': self.get_csrf_token(),
        }

        with fml_testing.mock_sends(override_schemas.BuildrootOverrideTagV1,
                                    override_schemas.BuildrootOverrideTagV1):
            res = self.app.post('/overrides/', data)

        result = res.json_body
        self.assertEqual(result['caveats'][0]['description'],
                         'Your override submission was split into 2.')

        o1, o2 = result['overrides']
        self.assertEqual(o1['build_id'], build1.id)
        self.assertEqual(o1['notes'], 'blah blah blah')
        self.assertEqual(o1['expiration_date'],
                         expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEqual(o1['expired_date'], None)
        self.assertEqual(o2['build_id'], build2.id)
        self.assertEqual(o2['notes'], 'blah blah blah')
        self.assertEqual(o2['expiration_date'],
                         expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEqual(o2['expired_date'], None)
Пример #23
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()
Пример #24
0
    def test_create_override_multiple_nvr(self, publish):
        release = Release.get(u'F17', self.db)
        package = RpmPackage(name=u'not-bodhi')
        self.db.add(package)
        build1 = RpmBuild(nvr=u'not-bodhi-2.0-2.fc17',
                          package=package,
                          release=release)
        self.db.add(build1)
        self.db.flush()

        package = RpmPackage(name=u'another-not-bodhi')
        self.db.add(package)
        build2 = RpmBuild(nvr=u'another-not-bodhi-2.0-2.fc17',
                          package=package,
                          release=release)
        self.db.add(build2)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {
            'nvr': ','.join([build1.nvr, build2.nvr]),
            'notes': u'blah blah blah',
            'expiration_date': expiration_date,
            'csrf_token': self.get_csrf_token(),
        }
        res = self.app.post('/overrides/', data)

        self.assertEquals(len(publish.call_args_list), 2)

        result = res.json_body
        self.assertEquals(result['caveats'][0]['description'],
                          'Your override submission was split into 2.')

        o1, o2 = result['overrides']
        self.assertEquals(o1['build_id'], build1.id)
        self.assertEquals(o1['notes'], 'blah blah blah')
        self.assertEquals(o1['expiration_date'],
                          expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEquals(o1['expired_date'], None)
        self.assertEquals(o2['build_id'], build2.id)
        self.assertEquals(o2['notes'], 'blah blah blah')
        self.assertEquals(o2['expiration_date'],
                          expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEquals(o2['expired_date'], None)
Пример #25
0
    def test_new_release(self):
        attrs = {
            "name": "F42",
            "long_name": "Fedora 42",
            "version": "42",
            "id_prefix": "FEDORA",
            "branch": "f42",
            "dist_tag": "f42",
            "stable_tag": "f42-updates",
            "testing_tag": "f42-updates-testing",
            "candidate_tag": "f42-updates-candidate",
            "pending_stable_tag": "f42-updates-pending",
            "pending_signing_tag": "f42-updates-testing-signing",
            "pending_testing_tag": "f42-updates-testing-pending",
            "override_tag": "f42-override",
            "package_manager": "dnf",
            "testing_repository": "updates-testing",
            "eol": date(2016, 6, 14),
            "csrf_token": self.get_csrf_token(),
        }
        self.app.post("/releases/", attrs, status=200)

        attrs.pop('csrf_token')
        attrs.pop('eol')

        r = self.db.query(Release).filter(Release.name == attrs["name"]).one()

        for k, v in attrs.items():
            if k in ['state', 'package_manager']:
                assert getattr(r, k).value == v
            else:
                assert getattr(r, k) == v

        assert r.state == ReleaseState.disabled

        # Let's check Release cache content
        releases = Release.all_releases()
        disabled_releases = releases["disabled"]
        assert disabled_releases[0]["name"] == "F42"
        assert disabled_releases[1]["name"] == "F22"
        assert len(disabled_releases) == 2
        current_releases = releases["current"]
        assert current_releases[0]["name"] == "F17"
        assert len(current_releases) == 1
Пример #26
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()
Пример #27
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
Пример #28
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()
Пример #29
0
    def _determine_tag_actions(self):
        tag_types, tag_rels = Release.get_tags(self.db)
        # sync & async tagging batches
        for i, batch in enumerate(sorted_updates(self.updates)):
            for update in batch:
                add_tags = []
                move_tags = []

                if update.status is UpdateStatus.testing:
                    status = 'testing'
                else:
                    status = 'candidate'

                for build in update.builds:
                    from_tag = None
                    tags = build.get_tags()
                    for tag in tags:
                        if tag in tag_types[status]:
                            from_tag = tag
                            break
                    else:
                        reason = 'Cannot find relevant tag for %s.  None of %s are in %s.'
                        reason = reason % (build.nvr, tags, tag_types[status])
                        self.eject_from_mash(update, reason)
                        break

                    if self.skip_mash:
                        add_tags.append((update.requested_tag, build.nvr))
                    else:
                        move_tags.append((from_tag, update.requested_tag,
                                          build.nvr))
                else:
                    if i == 0:
                        self.add_tags_sync.extend(add_tags)
                        self.move_tags_sync.extend(move_tags)
                    else:
                        self.add_tags_async.extend(add_tags)
                        self.move_tags_async.extend(move_tags)
Пример #30
0
    def test_create_duplicate_override(self, publish):
        release = Release.get(u'F17', self.db)
        package = RpmPackage(name=u'not-bodhi')
        self.db.add(package)
        build = RpmBuild(nvr=u'not-bodhi-2.0-2.fc17',
                         package=package,
                         release=release)
        self.db.add(build)
        self.db.flush()

        expiration_date = datetime.utcnow() + timedelta(days=1)

        data = {
            'nvr': build.nvr,
            'notes': u'blah blah blah',
            'expiration_date': expiration_date,
            'csrf_token': self.get_csrf_token()
        }
        res = self.app.post('/overrides/', data)

        publish.assert_called_once_with(topic='buildroot_override.tag',
                                        msg=mock.ANY)
        self.assertEquals(len(publish.call_args_list), 1)

        o = res.json_body
        self.assertEquals(o['build_id'], build.id)
        self.assertEquals(o['notes'], 'blah blah blah')
        self.assertEquals(o['expiration_date'],
                          expiration_date.strftime("%Y-%m-%d %H:%M:%S"))
        self.assertEquals(o['expired_date'], None)

        # Submit it again
        res = self.app.post('/overrides/', data, status=400)
        self.assertEquals(
            res.json_body['errors'][0]['description'],
            'Buildroot override for %s already exists' % build.nvr)