示例#1
0
    def test_create_duplicate_override(self, publish):
        release = Release.get(u"F17", self.db)
        package = Package(name=u"not-bodhi")
        self.db.add(package)
        build = Build(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
        )
示例#2
0
文件: releases.py 项目: yarda/bodhi
def get_release_json(request):
    id = request.matchdict.get('name')
    release = Release.get(id, request.db)
    if not release:
        request.errors.add('body', 'name', 'No such release')
        request.errors.status = HTTPNotFound.code
    return release
示例#3
0
    def test_cannot_edit_override_build(self, publish):
        session = DBSession()

        release = Release.get(u'F17', session)

        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 = Build(nvr=u'bodhi-2.0-2.fc17', release=release)
        session.add(build)
        session.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_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 = Build(nvr=u'bodhi-2.0-2.fc17', release=release)
        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)
示例#5
0
    def test_create_override(self, publish):
        session = DBSession()

        release = Release.get(u'F17', session)

        package = Package(name=u'not-bodhi')
        session.add(package)
        build = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package,
                      release=release)
        session.add(build)
        session.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)
示例#6
0
    def test_create_override(self, publish):
        release = Release.get(u'F17', self.db)

        package = Package(name=u'not-bodhi')
        self.db.add(package)
        build = Build(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)
示例#7
0
    def test_create_override_too_long(self, publish):
        release = Release.get(u'F17', self.db)

        package = Package(name=u'not-bodhi')
        self.db.add(package)
        build = Build(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=60)

        data = {'nvr': build.nvr, 'notes': u'blah blah blah',
                'expiration_date': expiration_date,
                'csrf_token': self.get_csrf_token()}
        self.app.post('/overrides/', data, status=400)
示例#8
0
    def test_create_override_multiple_nvr(self, publish):
        session = DBSession()

        release = Release.get(u'F17', session)
        package = Package(name=u'not-bodhi')
        session.add(package)
        build1 = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package,
                      release=release)
        session.add(build1)
        session.flush()

        package = Package(name=u'another-not-bodhi')
        session.add(package)
        build2 = Build(nvr=u'another-not-bodhi-2.0-2.fc17', package=package,
                      release=release)
        session.add(build2)
        session.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)
示例#9
0
    def test_create_override_multiple_nvr(self, publish):
        release = Release.get(u'F17', self.db)
        package = Package(name=u'not-bodhi')
        self.db.add(package)
        build1 = Build(nvr=u'not-bodhi-2.0-2.fc17',
                       package=package,
                       release=release)
        self.db.add(build1)
        self.db.flush()

        package = Package(name=u'another-not-bodhi')
        self.db.add(package)
        build2 = Build(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)
示例#10
0
    def test_create_override_too_long(self, publish):
        release = Release.get(u"F17", self.db)

        package = Package(name=u"not-bodhi")
        self.db.add(package)
        build = Build(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=60)

        data = {
            "nvr": build.nvr,
            "notes": u"blah blah blah",
            "expiration_date": expiration_date,
            "csrf_token": self.get_csrf_token(),
        }
        self.app.post("/overrides/", data, status=400)
示例#11
0
    def test_create_override_too_long(self, publish):
        release = Release.get(u'F17', self.db)

        package = Package(name=u'not-bodhi')
        self.db.add(package)
        build = Build(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=60)

        data = {
            'nvr': build.nvr,
            'notes': u'blah blah blah',
            'expiration_date': expiration_date,
            'csrf_token': self.get_csrf_token()
        }
        self.app.post('/overrides/', data, status=400)
示例#12
0
    def test_edit_unexisting_override(self):
        release = Release.get(u"F17", self.db)

        build = Build(nvr=u"bodhi-2.0-2.fc17", release=release)
        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")
示例#13
0
    def test_create_override_multiple_nvr(self, publish):
        release = Release.get(u"F17", self.db)
        package = Package(name=u"not-bodhi")
        self.db.add(package)
        build1 = Build(nvr=u"not-bodhi-2.0-2.fc17", package=package, release=release)
        self.db.add(build1)
        self.db.flush()

        package = Package(name=u"another-not-bodhi")
        self.db.add(package)
        build2 = Build(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)
示例#14
0
    def test_edit_unexisting_override(self):
        release = Release.get(u'F17', self.db)

        build = Build(nvr=u'bodhi-2.0-2.fc17', release=release)
        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')
示例#15
0
    def test_edit_unexisting_override(self):
        release = Release.get(u'F17', self.db)

        build = Build(nvr=u'bodhi-2.0-2.fc17', release=release)
        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')
示例#16
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 = Build(nvr=u"bodhi-2.0-2.fc17", release=release)
        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)
示例#17
0
文件: releases.py 项目: yarda/bodhi
def get_release_html(request):
    id = request.matchdict.get('name')
    release = Release.get(id, request.db)
    if not release:
        request.errors.add('body', 'name', 'No such release')
        request.errors.status = HTTPNotFound.code
    updates = request.db.query(Update).filter(
        Update.release==release).order_by(
            Update.date_submitted.desc())

    updates_count = request.db.query(Update.date_submitted, Update.type).filter(
        Update.release==release).order_by(
            Update.date_submitted.desc())

    date_commits = {}
    dates = set()

    for update in updates_count.all():
        d = update.date_submitted
        yearmonth = str(d.year) + '/' + str(d.month).zfill(2)
        dates.add(yearmonth)
        if not update.type.description in date_commits:
            date_commits[update.type.description] = {}
        if yearmonth in date_commits[update.type.description]:
            date_commits[update.type.description][yearmonth] += 1
        else:
            date_commits[update.type.description][yearmonth] = 0

    base_count_query = request.db.query(Update)\
        .filter(Update.release==release)

    num_updates_pending = base_count_query\
        .filter(Update.status==UpdateStatus.pending).count()
    num_updates_testing = base_count_query\
        .filter(Update.status==UpdateStatus.testing).count()
    num_updates_stable = base_count_query\
        .filter(Update.status==UpdateStatus.stable).count()
    num_updates_unpushed = base_count_query\
        .filter(Update.status==UpdateStatus.unpushed).count()
    num_updates_obsolete = base_count_query\
        .filter(Update.status==UpdateStatus.obsolete).count()

    num_updates_security = base_count_query\
        .filter(Update.type==UpdateType.security).count()
    num_updates_bugfix = base_count_query\
        .filter(Update.type==UpdateType.bugfix).count()
    num_updates_enhancement = base_count_query\
        .filter(Update.type==UpdateType.enhancement).count()
    num_updates_newpackage = base_count_query\
        .filter(Update.type==UpdateType.newpackage).count()

    num_active_overrides = request.db.query(
        BuildrootOverride
    ).filter(
        BuildrootOverride.expired_date==None
    ).join(
        BuildrootOverride.build
    ).join(
        Build.release
    ).filter(
        Build.release==release
    ).count()

    num_expired_overrides = request.db.query(
        BuildrootOverride
    ).filter(
        BuildrootOverride.expired_date!=None
    ).join(
        BuildrootOverride.build
    ).join(
        Build.release
    ).filter(
        Build.release==release
    ).count()

    return dict(release=release,
                latest_updates=updates.limit(25).all(),
                count=updates.count(),
                date_commits=date_commits,
                dates=sorted(dates),

                num_updates_pending=num_updates_pending,
                num_updates_testing=num_updates_testing,
                num_updates_stable=num_updates_stable,
                num_updates_unpushed=num_updates_unpushed,
                num_updates_obsolete=num_updates_obsolete,

                num_updates_security=num_updates_security,
                num_updates_bugfix=num_updates_bugfix,
                num_updates_enhancement=num_updates_enhancement,
                num_updates_newpackage=num_updates_newpackage,

                num_active_overrides=num_active_overrides,
                num_expired_overrides=num_expired_overrides,
                )