def __init__(self, *args, **kwargs): super(WebhooksController, self).__init__(*args, **kwargs) self._hooks = {} self._base_url = '/webhooks/' self._trigger_types = WEBHOOK_TRIGGER_TYPES.keys() self._trigger_dispatcher = TriggerDispatcher(LOG) self._trigger_watcher = TriggerWatcher(create_handler=self._handle_create_trigger, update_handler=self._handle_update_trigger, delete_handler=self._handle_delete_trigger, trigger_types=self._trigger_types, queue_suffix='webhooks') self._trigger_watcher.start() self._register_webhook_trigger_types()
def __init__(self, *args, **kwargs): self._hooks = HooksHolder() self._base_url = '/webhooks/' self._trigger_types = list(WEBHOOK_TRIGGER_TYPES.keys()) self._trigger_dispatcher_service = TriggerDispatcherService(LOG) queue_suffix = self.__class__.__name__ self._trigger_watcher = TriggerWatcher(create_handler=self._handle_create_trigger, update_handler=self._handle_update_trigger, delete_handler=self._handle_delete_trigger, trigger_types=self._trigger_types, queue_suffix=queue_suffix, exclusive=True) self._trigger_watcher.start() self._register_webhook_trigger_types()
def __init__(self, *args, **kwargs): super(WebhooksController, self).__init__(*args, **kwargs) self._hooks = {} self._base_url = '/webhooks/' self._trigger_types = WEBHOOK_TRIGGER_TYPES.keys() self._trigger_dispatcher = TriggerDispatcher(LOG) self._trigger_watcher = TriggerWatcher( create_handler=self._handle_create_trigger, update_handler=self._handle_update_trigger, delete_handler=self._handle_delete_trigger, trigger_types=self._trigger_types, queue_suffix='webhooks') self._trigger_watcher.start() self._register_webhook_trigger_types()
def __init__(self, *args, **kwargs): self._hooks = HooksHolder() self._base_url = '/webhooks/' self._trigger_types = list(WEBHOOK_TRIGGER_TYPES.keys()) self._trigger_dispatcher = TriggerDispatcher(LOG) queue_suffix = self.__class__.__name__ self._trigger_watcher = TriggerWatcher(create_handler=self._handle_create_trigger, update_handler=self._handle_update_trigger, delete_handler=self._handle_delete_trigger, trigger_types=self._trigger_types, queue_suffix=queue_suffix, exclusive=True) self._trigger_watcher.start() self._register_webhook_trigger_types()
def __init__(self, *args, **kwargs): super(WebhooksController, self).__init__(*args, **kwargs) self._hooks = HooksHolder() self._base_url = "/webhooks/" self._trigger_types = WEBHOOK_TRIGGER_TYPES.keys() self._trigger_dispatcher = TriggerDispatcher(LOG) queue_suffix = self.__class__.__name__ self._trigger_watcher = TriggerWatcher( create_handler=self._handle_create_trigger, update_handler=self._handle_update_trigger, delete_handler=self._handle_delete_trigger, trigger_types=self._trigger_types, queue_suffix=queue_suffix, exclusive=True, ) self._trigger_watcher.start() self._register_webhook_trigger_types()
def _register_webhook_trigger_types(self): for trigger_type in WEBHOOK_TRIGGER_TYPES.values(): trigger_service.create_trigger_type_db(trigger_type)
def get_webhook_trigger(name, url): trigger = TriggerDB(name=name, pack='test') trigger.type = WEBHOOK_TRIGGER_TYPES.keys()[0] trigger.parameters = {'url': url} return trigger
http_client = six.moves.http_client WEBHOOK_1 = { 'action': 'closed', 'pull_request': { 'merged': True } } ST2_WEBHOOK = { 'trigger': 'foo.bar', 'payload': {'ponies': 'unicorns'} } DUMMY_TRIGGER = TriggerDB(name='pr-merged', pack='git') DUMMY_TRIGGER.type = WEBHOOK_TRIGGER_TYPES.keys()[0] class TestWebhooksController(FunctionalTest): @mock.patch.object(TriggerInstancePublisher, 'publish_trigger', mock.MagicMock( return_value=True)) @mock.patch.object(WebhooksController, '_is_valid_hook', mock.MagicMock( return_value=True)) @mock.patch.object(HooksHolder, 'get_triggers_for_hook', mock.MagicMock( return_value=[DUMMY_TRIGGER])) @mock.patch('st2common.transport.reactor.TriggerDispatcher.dispatch') def test_post(self, dispatch_mock): post_resp = self.__do_post('git', WEBHOOK_1, expect_errors=False) self.assertEqual(post_resp.status_int, http_client.ACCEPTED) self.assertTrue(dispatch_mock.call_args[1]['trace_context'].trace_tag)
def _register_webhook_trigger_types(self): for trigger_type in WEBHOOK_TRIGGER_TYPES.values(): trigger_service.create_trigger_type_db(trigger_type)
ST2_WEBHOOK = { 'trigger': 'git.pr-merged', 'payload': { 'value_str': 'string!', 'value_int': 12345 } } WEBHOOK_DATA = { 'value_str': 'test string 1', 'value_int': 987654, } # 1. Trigger which references a system webhook trigger type DUMMY_TRIGGER_DB = TriggerDB(name='pr-merged', pack='git') DUMMY_TRIGGER_DB.type = list(WEBHOOK_TRIGGER_TYPES.keys())[0] DUMMY_TRIGGER_API = TriggerAPI.from_model(DUMMY_TRIGGER_DB) DUMMY_TRIGGER_DICT = vars(DUMMY_TRIGGER_API) # 2. Custom TriggerType object DUMMY_TRIGGER_TYPE_DB = TriggerTypeDB(name='pr-merged', pack='git') DUMMY_TRIGGER_TYPE_DB.payload_schema = { 'type': 'object', 'properties': { 'body': { 'properties': { 'value_str': { 'type': 'string', 'required': True
from st2common.models.db.webhook import WebhookDB from st2common.constants.triggers import WEBHOOK_TRIGGER_TYPES from st2common.models.api.trigger import TriggerAPI from st2common.models.db.trigger import TriggerDB from st2tests.fixturesloader import FixturesLoader from tests.base import APIControllerWithRBACTestCase http_client = six.moves.http_client __all__ = ['WebhookControllerRBACTestCase'] # 1. Trigger which references a system webhook trigger type DUMMY_TRIGGER_DB = TriggerDB(name='pr-merged', pack='git') DUMMY_TRIGGER_DB.type = list(WEBHOOK_TRIGGER_TYPES.keys())[0] DUMMY_TRIGGER_API = TriggerAPI.from_model(DUMMY_TRIGGER_DB) DUMMY_TRIGGER_DICT = vars(DUMMY_TRIGGER_API) class WebhookControllerRBACTestCase(APIControllerWithRBACTestCase): fixtures_loader = FixturesLoader() def setUp(self): super(WebhookControllerRBACTestCase, self).setUp() # Insert mock users, roles and assignments # Users user_1_db = UserDB(name='webhook_list')
def get_webhook_trigger(name, url): trigger = TriggerDB(name=name, pack='test') trigger.type = list(WEBHOOK_TRIGGER_TYPES.keys())[0] trigger.parameters = {'url': url} return trigger
import six from tests import FunctionalTest from st2api.controllers.v1.webhooks import WebhooksController from st2common.constants.triggers import WEBHOOK_TRIGGER_TYPES from st2common.models.db.trigger import TriggerDB from st2common.transport.reactor import TriggerInstancePublisher http_client = six.moves.http_client WEBHOOK_1 = {'action': 'closed', 'pull_request': {'merged': True}} ST2_WEBHOOK = {'trigger': 'foo.bar', 'payload': {'ponies': 'unicorns'}} DUMMY_TRIGGER = TriggerDB(name='pr-merged', pack='git') DUMMY_TRIGGER.type = WEBHOOK_TRIGGER_TYPES.keys()[0] class TestTriggerTypeController(FunctionalTest): @mock.patch.object(TriggerInstancePublisher, 'publish_trigger', mock.MagicMock(return_value=True)) @mock.patch.object(WebhooksController, '_is_valid_hook', mock.MagicMock(return_value=True)) @mock.patch.object(WebhooksController, '_get_trigger_for_hook', mock.MagicMock(return_value=DUMMY_TRIGGER)) @mock.patch('st2common.transport.reactor.TriggerDispatcher.dispatch') def test_post(self, dispatch_mock): post_resp = self.__do_post('git', WEBHOOK_1, expect_errors=False) self.assertEqual(post_resp.status_int, http_client.ACCEPTED) self.assertTrue(dispatch_mock.call_args[1]['trace_context'].trace_tag)