Policy in code[11]
Add policy for trigger Partially Implements: blueprint policy-in-code Change-Id: Ice7b634ecd62cac9f6a6a12b5d3aa91719a8860a
This commit is contained in:
parent
4047d4193e
commit
59c00c6adc
|
@ -21,6 +21,7 @@ from six.moves import urllib
|
||||||
|
|
||||||
from solum.api.handlers import app_handler
|
from solum.api.handlers import app_handler
|
||||||
from solum.common import exception
|
from solum.common import exception
|
||||||
|
from solum.common import policy
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
|
@ -75,6 +76,8 @@ class TriggerController(rest.RestController):
|
||||||
@pecan.expose()
|
@pecan.expose()
|
||||||
def post(self, trigger_id):
|
def post(self, trigger_id):
|
||||||
"""Trigger a new event on Solum."""
|
"""Trigger a new event on Solum."""
|
||||||
|
policy.check('create_trigger',
|
||||||
|
pecan.request.security_context)
|
||||||
commit_sha = ''
|
commit_sha = ''
|
||||||
status_url = None
|
status_url = None
|
||||||
collab_url = None
|
collab_url = None
|
||||||
|
|
|
@ -25,6 +25,7 @@ from solum.common.policies import pipeline
|
||||||
from solum.common.policies import plan
|
from solum.common.policies import plan
|
||||||
from solum.common.policies import sensor
|
from solum.common.policies import sensor
|
||||||
from solum.common.policies import service
|
from solum.common.policies import service
|
||||||
|
from solum.common.policies import trigger
|
||||||
|
|
||||||
|
|
||||||
def list_rules():
|
def list_rules():
|
||||||
|
@ -39,4 +40,5 @@ def list_rules():
|
||||||
plan.list_rules(),
|
plan.list_rules(),
|
||||||
sensor.list_rules(),
|
sensor.list_rules(),
|
||||||
service.list_rules(),
|
service.list_rules(),
|
||||||
|
trigger.list_rules(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Copyright 2018 ZTE Corporation.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from oslo_policy import policy
|
||||||
|
|
||||||
|
from solum.common.policies import base
|
||||||
|
|
||||||
|
trigger_policies = [
|
||||||
|
policy.DocumentedRuleDefault(
|
||||||
|
name='create_trigger',
|
||||||
|
check_str=base.RULE_DEFAULT,
|
||||||
|
description='Trigger a new event on Solum.',
|
||||||
|
operations=[{'path': '/v1/triggers',
|
||||||
|
'method': 'POST'}])
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def list_rules():
|
||||||
|
return trigger_policies
|
|
@ -102,6 +102,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_with_empty_body(self, assem_mock,
|
def test_trigger_post_with_empty_body(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
obj = trigger.TriggerController()
|
obj = trigger.TriggerController()
|
||||||
obj.post('test_id')
|
obj.post('test_id')
|
||||||
self.assertEqual(400, resp_mock.status)
|
self.assertEqual(400, resp_mock.status)
|
||||||
|
@ -110,6 +111,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_on_github_webhook(self, assem_mock,
|
def test_trigger_post_on_github_webhook(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
body_dict = {'sender': {'url': 'https://api.github.com'},
|
body_dict = {'sender': {'url': 'https://api.github.com'},
|
||||||
'action': 'opened',
|
'action': 'opened',
|
||||||
|
@ -127,6 +129,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
def test_trigger_post_on_github_comment_webhook(self,
|
def test_trigger_post_on_github_comment_webhook(self,
|
||||||
assem_mock, resp_mock,
|
assem_mock, resp_mock,
|
||||||
request_mock):
|
request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
collab_url = ('https://api.github.com/repos/u/r/' +
|
collab_url = ('https://api.github.com/repos/u/r/' +
|
||||||
|
@ -152,6 +155,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
def test_trigger_post_on_mismatch_comment_pub_repo(self, http_mock,
|
def test_trigger_post_on_mismatch_comment_pub_repo(self, http_mock,
|
||||||
assem_mock, resp_mock,
|
assem_mock, resp_mock,
|
||||||
request_mock):
|
request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
collab_url = ('https://api.github.com/repos/u/r/' +
|
collab_url = ('https://api.github.com/repos/u/r/' +
|
||||||
|
@ -176,6 +180,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
def test_trigger_post_on_valid_comment_pub_repo(self, http_mock,
|
def test_trigger_post_on_valid_comment_pub_repo(self, http_mock,
|
||||||
assem_mock, resp_mock,
|
assem_mock, resp_mock,
|
||||||
request_mock):
|
request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
collab_url = ('https://api.github.com/repos/u/r/' +
|
collab_url = ('https://api.github.com/repos/u/r/' +
|
||||||
|
@ -202,6 +207,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
def test_trigger_post_on_comment_missing_login(self,
|
def test_trigger_post_on_comment_missing_login(self,
|
||||||
assem_mock, resp_mock,
|
assem_mock, resp_mock,
|
||||||
request_mock):
|
request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
cfg.CONF.api.rebuild_phrase = "solum retry tests"
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
collab_url = ('https://api.github.com/repos/u/r/' +
|
collab_url = ('https://api.github.com/repos/u/r/' +
|
||||||
|
@ -222,6 +228,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_on_wrong_github_webhook(self, assem_mock,
|
def test_trigger_post_on_wrong_github_webhook(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
status_url = 'https://api.github.com/repos/u/r/statuses/{sha}'
|
||||||
body_dict = {'sender': {'url': 'https://api.github.com'},
|
body_dict = {'sender': {'url': 'https://api.github.com'},
|
||||||
'pull_request': {'head': {'sha': 'asdf'}},
|
'pull_request': {'head': {'sha': 'asdf'}},
|
||||||
|
@ -235,6 +242,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_on_unknown_git_webhook(self, assem_mock,
|
def test_trigger_post_on_unknown_git_webhook(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
body_dict = {"pull_request": {"head": {"sha": "asdf"}}}
|
body_dict = {"pull_request": {"head": {"sha": "asdf"}}}
|
||||||
request_mock.body = json.dumps(body_dict)
|
request_mock.body = json.dumps(body_dict)
|
||||||
obj = trigger.TriggerController()
|
obj = trigger.TriggerController()
|
||||||
|
@ -245,6 +253,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_on_non_github_webhook(self, assem_mock,
|
def test_trigger_post_on_non_github_webhook(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
body_dict = {"sender": {"url": "https://non-github.com"},
|
body_dict = {"sender": {"url": "https://non-github.com"},
|
||||||
"pull_request": {"head": {"sha": "asdf"}}}
|
"pull_request": {"head": {"sha": "asdf"}}}
|
||||||
request_mock.body = json.dumps(body_dict)
|
request_mock.body = json.dumps(body_dict)
|
||||||
|
@ -256,6 +265,7 @@ class TestTriggerController(base.BaseTestCase):
|
||||||
|
|
||||||
def test_trigger_post_on_github_ping_webhook(self, assem_mock,
|
def test_trigger_post_on_github_ping_webhook(self, assem_mock,
|
||||||
resp_mock, request_mock):
|
resp_mock, request_mock):
|
||||||
|
self.policy({'create_trigger': '@'})
|
||||||
body_dict = {"sender": {"url": "https://api.github.com"},
|
body_dict = {"sender": {"url": "https://api.github.com"},
|
||||||
"zen": "Keep it logically awesome."}
|
"zen": "Keep it logically awesome."}
|
||||||
request_mock.body = json.dumps(body_dict)
|
request_mock.body = json.dumps(body_dict)
|
||||||
|
|
Loading…
Reference in New Issue