diff --git a/senlinclient/tests/unit/v1/test_receiver.py b/senlinclient/tests/unit/v1/test_receiver.py index a4592653..751f69e0 100644 --- a/senlinclient/tests/unit/v1/test_receiver.py +++ b/senlinclient/tests/unit/v1/test_receiver.py @@ -18,6 +18,7 @@ from openstack.cluster.v1 import receiver as sdk_receiver from openstack import exceptions as sdk_exc from osc_lib import exceptions as exc +from senlinclient.common.i18n import _ from senlinclient.tests.unit.v1 import fakes from senlinclient.v1 import receiver as osc_receiver @@ -233,7 +234,7 @@ class TestReceiverCreate(TestReceiver): self.mock_client.get_receiver = mock.Mock( return_value=sdk_receiver.Receiver(**self.response['receiver'])) - def test_receiver_create(self): + def test_receiver_create_webhook(self): arglist = ['my_receiver', '--action', 'CLUSTER_SCALE_OUT', '--cluster', 'my_cluster', '--params', 'count=1', '--type', 'webhook'] @@ -241,6 +242,26 @@ class TestReceiverCreate(TestReceiver): self.cmd.take_action(parsed_args) self.mock_client.create_receiver.assert_called_with(**self.args) + def test_receiver_create_webhook_failed(self): + arglist = ['my_receiver', '--action', 'CLUSTER_SCALE_OUT', + '--params', 'count=1', '--type', 'webhook'] + parsed_args = self.check_parser(self.cmd, arglist, []) + error = self.assertRaises(exc.CommandError, self.cmd.take_action, + parsed_args) + self.assertIn(_('cluster and action parameters are required to create ' + 'webhook type of receiver'), str(error)) + + def test_receiver_create_non_webhook(self): + arglist = ['my_receiver', '--params', 'count=1', + '--type', 'foo'] + parsed_args = self.check_parser(self.cmd, arglist, []) + self.cmd.take_action(parsed_args) + args = copy.deepcopy(self.args) + args['type'] = 'foo' + args['cluster_id'] = None + args['action'] = None + self.mock_client.create_receiver.assert_called_with(**args) + class TestReceiverDelete(TestReceiver): def setUp(self): diff --git a/senlinclient/tests/unit/v1/test_shell.py b/senlinclient/tests/unit/v1/test_shell.py index 79cfb0af..f4642082 100644 --- a/senlinclient/tests/unit/v1/test_shell.py +++ b/senlinclient/tests/unit/v1/test_shell.py @@ -468,7 +468,7 @@ class ShellTest(testtools.TestCase): receiver_id='receiver_id') @mock.patch.object(sh, '_show_receiver') - def test_do_receiver_create(self, mock_show): + def test_do_receiver_create_webhook(self, mock_show): service = mock.Mock() args = { 'name': 'receiver1', @@ -492,6 +492,47 @@ class ShellTest(testtools.TestCase): service.create_receiver.assert_called_once_with(**params) mock_show.assert_called_once_with(service, 'FAKE_ID') + def test_do_receiver_create_webhook_failed(self): + service = mock.Mock() + args = { + 'name': 'receiver1', + 'type': 'webhook', + 'cluster': None, + 'action': None, + 'params': {} + } + args = self._make_args(args) + ex = self.assertRaises(exc.CommandError, + sh.do_receiver_create, service, args) + msg = _("cluster and action parameters are required to create webhook" + " type of receiver.") + self.assertEqual(msg, six.text_type(ex)) + + @mock.patch.object(sh, '_show_receiver') + def test_do_receiver_create_non_webhook(self, mock_show): + service = mock.Mock() + args = { + 'name': 'receiver1', + 'type': 'foo', + 'cluster': None, + 'action': None, + 'params': {} + } + args = self._make_args(args) + params = { + 'name': 'receiver1', + 'type': 'foo', + 'cluster_id': None, + 'action': None, + 'params': {} + } + receiver = mock.Mock() + receiver.id = 'FAKE_ID' + service.create_receiver.return_value = receiver + sh.do_receiver_create(service, args) + service.create_receiver.assert_called_once_with(**params) + mock_show.assert_called_once_with(service, 'FAKE_ID') + def test_do_receiver_delete(self): service = mock.Mock() args = {'id': ['FAKE']} diff --git a/senlinclient/v1/receiver.py b/senlinclient/v1/receiver.py index 205c0dcf..6fa2aca1 100644 --- a/senlinclient/v1/receiver.py +++ b/senlinclient/v1/receiver.py @@ -168,14 +168,14 @@ class CreateReceiver(command.ShowOne): parser.add_argument( '--cluster', metavar='', - required=True, - help=_('Targeted cluster for this receiver') + help=_('Targeted cluster for this receiver. Required if ' + 'receiver type is webhook') ) parser.add_argument( '--action', metavar='', - required=True, - help=_('Name or ID of the targeted action to be triggered') + help=_('Name or ID of the targeted action to be triggered. ' + 'Required if receiver type is webhook') ) parser.add_argument( 'name', @@ -186,6 +186,11 @@ class CreateReceiver(command.ShowOne): def take_action(self, parsed_args): self.log.debug("take_action(%s)", parsed_args) + if parsed_args.type == 'webhook': + if (not parsed_args.cluster or not parsed_args.action): + msg = _('cluster and action parameters are required to create ' + 'webhook type of receiver.') + raise exc.CommandError(msg) senlin_client = self.app.client_manager.clustering params = { diff --git a/senlinclient/v1/shell.py b/senlinclient/v1/shell.py index 88b9f460..60a582df 100644 --- a/senlinclient/v1/shell.py +++ b/senlinclient/v1/shell.py @@ -1212,10 +1212,12 @@ def do_receiver_show(service, args): @utils.arg('-t', '--type', metavar='', default='webhook', help=_('Type of the receiver to create.')) -@utils.arg('-c', '--cluster', metavar='', required=True, - help=_('Targeted cluster for this receiver.')) -@utils.arg('-a', '--action', metavar='', required=True, - help=_('Name or ID of the targeted action to be triggered.')) +@utils.arg('-c', '--cluster', metavar='', + help=_('Targeted cluster for this receiver. Required if receiver ' + 'type is webhook.')) +@utils.arg('-a', '--action', metavar='', + help=_('Name or ID of the targeted action to be triggered. ' + 'Required if receiver type is webhook.')) @utils.arg('-P', '--params', metavar='', help=_('A dictionary of parameters that will be passed to target ' 'action when the receiver is triggered.'), @@ -1227,6 +1229,12 @@ def do_receiver_create(service, args): show_deprecated('senlin receiver-create', 'openstack cluster receiver create') + if args.type == 'webhook': + if (not args.cluster or not args.action): + msg = _('cluster and action parameters are required to create ' + 'webhook type of receiver.') + raise exc.CommandError(msg) + params = { 'name': args.name, 'type': args.type,