From 4e76fec09d426e55692bcfca0dbc273a2bb54882 Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Wed, 8 Apr 2015 14:40:02 +0000 Subject: [PATCH 1/5] Require a special permission for clobbering. --- relengapi/blueprints/clobberer/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/relengapi/blueprints/clobberer/__init__.py b/relengapi/blueprints/clobberer/__init__.py index d5f43ff..c130e32 100644 --- a/relengapi/blueprints/clobberer/__init__.py +++ b/relengapi/blueprints/clobberer/__init__.py @@ -29,6 +29,7 @@ from relengapi import apimethod from relengapi.lib import angular from relengapi.lib import api +from relengapi import p logger = logging.getLogger(__name__) @@ -39,6 +40,8 @@ static_folder='static' ) +p.clobberer.clobber.doc('Submit clobber requests') + bp.root_widget_template('clobberer_root_widget.html', priority=100) # prefix which denotes release builddirs @@ -85,6 +88,7 @@ def _add_clobber(session, branch, builddir, slave=None): @bp.route('/clobber', methods=['POST']) @apimethod(None, body=[rest.ClobberRequest]) +@p.clobberer.clobber.require() def clobber(body): "Request clobbers for particular branches and builddirs." session = g.db.session(DB_DECLARATIVE_BASE) @@ -101,6 +105,7 @@ def clobber(body): @bp.route('/clobber/by-builder', methods=['POST']) @apimethod(None, body=[rest.ClobberRequestByBuilder]) +@p.clobberer.clobber.require() def clobber_by_builder(body): """ Request clobbers for app builddirs associated with a particular buildername. From a50e6779a3c18a06854ab3743029e85c9d3f7524 Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Wed, 8 Apr 2015 17:59:20 +0000 Subject: [PATCH 2/5] Fix tests to handle authentication --- relengapi/blueprints/clobberer/test_api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/relengapi/blueprints/clobberer/test_api.py b/relengapi/blueprints/clobberer/test_api.py index c2dd425..43c2c45 100644 --- a/relengapi/blueprints/clobberer/test_api.py +++ b/relengapi/blueprints/clobberer/test_api.py @@ -10,6 +10,8 @@ from nose.tools import eq_ from relengapi.lib.testing.context import TestContext +from relengapi.lib import auth +from relengapi import p from . import BUILDDIR_REL_PREFIX from . import BUILDER_REL_PREFIX @@ -29,7 +31,9 @@ 'slave': 'specific_slave', } -test_context = TestContext(databases=[DB_DECLARATIVE_BASE], reuse_app=True) +auth_user = auth.HumanUser('winter2718@gmail.com') +auth_user._permissions = set([p.clobberer.clobber]) +test_context = TestContext(databases=[DB_DECLARATIVE_BASE], reuse_app=True, user=auth_user) _last_clobber_args = deepcopy(_clobber_args) _last_clobber_args['buildername'] = 'buildername' @@ -103,7 +107,7 @@ def test_lastclobber(client): eq_(lastclobber_data[0], _last_clobber_args['builddir']) eq_(lastclobber_data[1].isdigit(), True, 'lastclobber did not return a valid timestamp => {}'.format(lastclobber_data[1])) - eq_(lastclobber_data[2], 'anonymous', + eq_(lastclobber_data[2], 'winter2718@gmail.com', 'lastclobber did not return a valid username') # Ensure a new build has been recorded matching the request args From 48955f6dc21203694272cc67d3b3308366df647a Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Thu, 9 Apr 2015 14:40:36 +0000 Subject: [PATCH 3/5] Re-order commits --- relengapi/blueprints/clobberer/__init__.py | 2 +- relengapi/blueprints/clobberer/test_api.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/relengapi/blueprints/clobberer/__init__.py b/relengapi/blueprints/clobberer/__init__.py index c130e32..bf27b21 100644 --- a/relengapi/blueprints/clobberer/__init__.py +++ b/relengapi/blueprints/clobberer/__init__.py @@ -27,9 +27,9 @@ from models import DB_DECLARATIVE_BASE from relengapi import apimethod +from relengapi import p from relengapi.lib import angular from relengapi.lib import api -from relengapi import p logger = logging.getLogger(__name__) diff --git a/relengapi/blueprints/clobberer/test_api.py b/relengapi/blueprints/clobberer/test_api.py index 43c2c45..517d497 100644 --- a/relengapi/blueprints/clobberer/test_api.py +++ b/relengapi/blueprints/clobberer/test_api.py @@ -9,9 +9,9 @@ from nose.tools import assert_greater from nose.tools import eq_ -from relengapi.lib.testing.context import TestContext -from relengapi.lib import auth from relengapi import p +from relengapi.lib import auth +from relengapi.lib.testing.context import TestContext from . import BUILDDIR_REL_PREFIX from . import BUILDER_REL_PREFIX From e6ee5fada42519e1df558b74a26a6f2060a887c9 Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Tue, 14 Apr 2015 18:57:16 +0000 Subject: [PATCH 4/5] Make permission name more specific (regarding what action it allows). --- relengapi/blueprints/clobberer/__init__.py | 6 +++--- relengapi/blueprints/clobberer/test_api.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/relengapi/blueprints/clobberer/__init__.py b/relengapi/blueprints/clobberer/__init__.py index bf27b21..9178c2d 100644 --- a/relengapi/blueprints/clobberer/__init__.py +++ b/relengapi/blueprints/clobberer/__init__.py @@ -40,7 +40,7 @@ static_folder='static' ) -p.clobberer.clobber.doc('Submit clobber requests') +p.clobberer.post.clobber.doc('Submit clobber requests') bp.root_widget_template('clobberer_root_widget.html', priority=100) @@ -88,7 +88,7 @@ def _add_clobber(session, branch, builddir, slave=None): @bp.route('/clobber', methods=['POST']) @apimethod(None, body=[rest.ClobberRequest]) -@p.clobberer.clobber.require() +@p.clobberer.post.clobber.require() def clobber(body): "Request clobbers for particular branches and builddirs." session = g.db.session(DB_DECLARATIVE_BASE) @@ -105,7 +105,7 @@ def clobber(body): @bp.route('/clobber/by-builder', methods=['POST']) @apimethod(None, body=[rest.ClobberRequestByBuilder]) -@p.clobberer.clobber.require() +@p.clobberer.post.clobber.require() def clobber_by_builder(body): """ Request clobbers for app builddirs associated with a particular buildername. diff --git a/relengapi/blueprints/clobberer/test_api.py b/relengapi/blueprints/clobberer/test_api.py index 517d497..8466b99 100644 --- a/relengapi/blueprints/clobberer/test_api.py +++ b/relengapi/blueprints/clobberer/test_api.py @@ -32,7 +32,7 @@ } auth_user = auth.HumanUser('winter2718@gmail.com') -auth_user._permissions = set([p.clobberer.clobber]) +auth_user._permissions = set([p.clobberer.post.clobber]) test_context = TestContext(databases=[DB_DECLARATIVE_BASE], reuse_app=True, user=auth_user) _last_clobber_args = deepcopy(_clobber_args) From 379c64c8149ed660d4f588d3d6d0acb7d096cde6 Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Wed, 15 Apr 2015 14:27:27 +0000 Subject: [PATCH 5/5] Change permission name in tests. --- relengapi/blueprints/clobberer/test_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/relengapi/blueprints/clobberer/test_api.py b/relengapi/blueprints/clobberer/test_api.py index 8466b99..95310a6 100644 --- a/relengapi/blueprints/clobberer/test_api.py +++ b/relengapi/blueprints/clobberer/test_api.py @@ -33,7 +33,7 @@ auth_user = auth.HumanUser('winter2718@gmail.com') auth_user._permissions = set([p.clobberer.post.clobber]) -test_context = TestContext(databases=[DB_DECLARATIVE_BASE], reuse_app=True, user=auth_user) +test_context = TestContext(databases=[DB_DECLARATIVE_BASE], user=auth_user, reuse_app=True) _last_clobber_args = deepcopy(_clobber_args) _last_clobber_args['buildername'] = 'buildername' @@ -54,7 +54,7 @@ def test_clobber_request(client): 'No new clobbers were detected, clobber request failed.') -@ test_context +@test_context def test_lastclobber_all(client): rv = client.get('/clobberer/lastclobber/all') eq_(rv.status_code, 200)