summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-05-26 19:29:11 +0000
committerGerrit Code Review <review@openstack.org>2021-05-26 19:29:11 +0000
commit443c311fc288eefe1b9223b6b51a94121ab9d301 (patch)
tree801155f8e1346c03fb80b4b51917b17eb62e47f0 /openstackclient/tests
parent84a606be675902d75a60efaf46305f670f26548f (diff)
parentb26b7f3440d4f756c0b7906b93751d7e83a733f7 (diff)
downloadpython-openstackclient-443c311fc288eefe1b9223b6b51a94121ab9d301.tar.gz
Merge "Allow to send extra attributes in Neutron related commands"
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/unit/network/test_common.py139
-rw-r--r--openstackclient/tests/unit/network/test_utils.py59
2 files changed, 198 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/network/test_common.py b/openstackclient/tests/unit/network/test_common.py
index cde321aa..4dde1b2b 100644
--- a/openstackclient/tests/unit/network/test_common.py
+++ b/openstackclient/tests/unit/network/test_common.py
@@ -102,6 +102,27 @@ class FakeNetworkAndComputeShowOne(common.NetworkAndComputeShowOne):
return client.compute_action(parsed_args)
+class FakeCreateNeutronCommandWithExtraArgs(
+ common.NeutronCommandWithExtraArgs):
+
+ def get_parser(self, prog_name):
+ parser = super(FakeCreateNeutronCommandWithExtraArgs,
+ self).get_parser(prog_name)
+ parser.add_argument(
+ '--known-attribute',
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ attrs = {}
+ if 'known_attribute' in parsed_args:
+ attrs['known_attribute'] = parsed_args.known_attribute
+ attrs.update(
+ self._parse_extra_properties(parsed_args.extra_properties))
+ client.test_create_action(**attrs)
+
+
class TestNetworkAndCompute(utils.TestCommand):
def setUp(self):
@@ -187,3 +208,121 @@ class TestNetworkAndComputeShowOne(TestNetworkAndCompute):
m_action.side_effect = openstack.exceptions.HttpException("bar")
self.assertRaisesRegex(exceptions.CommandError, "bar",
self.cmd.take_action, mock.Mock())
+
+
+class TestNeutronCommandWithExtraArgs(utils.TestCommand):
+
+ def setUp(self):
+ super(TestNeutronCommandWithExtraArgs, self).setUp()
+
+ self.namespace = argparse.Namespace()
+
+ self.app.client_manager.network = mock.Mock()
+ self.network = self.app.client_manager.network
+ self.network.test_create_action = mock.Mock()
+
+ # Subclasses can override the command object to test.
+ self.cmd = FakeCreateNeutronCommandWithExtraArgs(
+ self.app, self.namespace)
+
+ def test_create_extra_attributes_default_type(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'name=extra_name,value=extra_value'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'value': 'extra_value'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value', extra_name='extra_value')
+
+ def test_create_extra_attributes_string(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'type=str,name=extra_name,value=extra_value'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'type': 'str',
+ 'value': 'extra_value'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value', extra_name='extra_value')
+
+ def test_create_extra_attributes_bool(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'type=bool,name=extra_name,value=TrUe'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'type': 'bool',
+ 'value': 'TrUe'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value', extra_name=True)
+
+ def test_create_extra_attributes_int(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'type=int,name=extra_name,value=8'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'type': 'int',
+ 'value': '8'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value', extra_name=8)
+
+ def test_create_extra_attributes_list(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'type=list,name=extra_name,value=v_1;v_2'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'type': 'list',
+ 'value': 'v_1;v_2'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value', extra_name=['v_1', 'v_2'])
+
+ def test_create_extra_attributes_dict(self):
+ arglist = [
+ '--known-attribute', 'known-value',
+ '--extra-property', 'type=dict,name=extra_name,value=n1:v1;n2:v2'
+ ]
+ verifylist = [
+ ('known_attribute', 'known-value'),
+ ('extra_properties', [{'name': 'extra_name',
+ 'type': 'dict',
+ 'value': 'n1:v1;n2:v2'}])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+ self.network.test_create_action.assert_called_with(
+ known_attribute='known-value',
+ extra_name={'n1': 'v1', 'n2': 'v2'})
diff --git a/openstackclient/tests/unit/network/test_utils.py b/openstackclient/tests/unit/network/test_utils.py
new file mode 100644
index 00000000..6252d7f7
--- /dev/null
+++ b/openstackclient/tests/unit/network/test_utils.py
@@ -0,0 +1,59 @@
+# 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 osc_lib import exceptions
+
+from openstackclient.network import utils
+from openstackclient.tests.unit import utils as tests_utils
+
+
+class TestUtils(tests_utils.TestCase):
+
+ def test_str2bool(self):
+ self.assertTrue(utils.str2bool("true"))
+ self.assertTrue(utils.str2bool("True"))
+ self.assertTrue(utils.str2bool("TRUE"))
+ self.assertTrue(utils.str2bool("TrUe"))
+
+ self.assertFalse(utils.str2bool("false"))
+ self.assertFalse(utils.str2bool("False"))
+ self.assertFalse(utils.str2bool("FALSE"))
+ self.assertFalse(utils.str2bool("FaLsE"))
+ self.assertFalse(utils.str2bool("Something else"))
+ self.assertFalse(utils.str2bool(""))
+
+ self.assertIsNone(utils.str2bool(None))
+
+ def test_str2list(self):
+ self.assertEqual(
+ ['a', 'b', 'c'], utils.str2list("a;b;c"))
+ self.assertEqual(
+ ['abc'], utils.str2list("abc"))
+
+ self.assertEqual([], utils.str2list(""))
+ self.assertEqual([], utils.str2list(None))
+
+ def test_str2dict(self):
+ self.assertEqual(
+ {'a': 'aaa', 'b': '2'},
+ utils.str2dict('a:aaa;b:2'))
+ self.assertEqual(
+ {'a': 'aaa;b;c', 'd': 'ddd'},
+ utils.str2dict('a:aaa;b;c;d:ddd'))
+
+ self.assertEqual({}, utils.str2dict(""))
+ self.assertEqual({}, utils.str2dict(None))
+
+ self.assertRaises(
+ exceptions.CommandError,
+ utils.str2dict, "aaa;b:2")