summaryrefslogtreecommitdiff
path: root/openstackclient/tests/common
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-07-02 14:26:25 +0000
committerGerrit Code Review <review@openstack.org>2013-07-02 14:26:25 +0000
commitf18d674efa7be25bc448a4f8993cafa5c196cc1c (patch)
tree77fe0758799efc6c0e660e8e9d9006390ea7c7be /openstackclient/tests/common
parentb63e8d5241387b6e39690d18914f423c9c4b988a (diff)
parent196daf859b1557fba24dbcf9870d3a834da86916 (diff)
downloadpython-openstackclient-f18d674efa7be25bc448a4f8993cafa5c196cc1c.tar.gz
Merge "Move tests into project package."
Diffstat (limited to 'openstackclient/tests/common')
-rw-r--r--openstackclient/tests/common/test_clientmanager.py35
-rw-r--r--openstackclient/tests/common/test_commandmanager.py71
-rw-r--r--openstackclient/tests/common/test_parseractions.py104
3 files changed, 210 insertions, 0 deletions
diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py
new file mode 100644
index 00000000..395f6ec3
--- /dev/null
+++ b/openstackclient/tests/common/test_clientmanager.py
@@ -0,0 +1,35 @@
+# Copyright 2012-2013 OpenStack, LLC.
+#
+# 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 openstackclient.common import clientmanager
+from openstackclient.tests import utils
+
+
+class Container(object):
+ attr = clientmanager.ClientCache(lambda x: object())
+
+ def __init__(self):
+ pass
+
+
+class TestClientManager(utils.TestCase):
+ def setUp(self):
+ super(TestClientManager, self).setUp()
+
+ def test_singleton(self):
+ # NOTE(dtroyer): Verify that the ClientCache descriptor only invokes
+ # the factory one time and always returns the same value after that.
+ c = Container()
+ self.assertEqual(c.attr, c.attr)
diff --git a/openstackclient/tests/common/test_commandmanager.py b/openstackclient/tests/common/test_commandmanager.py
new file mode 100644
index 00000000..4953c297
--- /dev/null
+++ b/openstackclient/tests/common/test_commandmanager.py
@@ -0,0 +1,71 @@
+# Copyright 2012-2013 OpenStack, LLC.
+#
+# 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.
+#
+
+import mock
+
+from openstackclient.common import commandmanager
+from openstackclient.tests import utils
+
+
+class FakeCommand(object):
+ @classmethod
+ def load(cls):
+ return cls
+
+ def __init__(self):
+ return
+
+FAKE_CMD_ONE = FakeCommand
+FAKE_CMD_TWO = FakeCommand
+FAKE_CMD_ALPHA = FakeCommand
+FAKE_CMD_BETA = FakeCommand
+
+
+class FakeCommandManager(commandmanager.CommandManager):
+ commands = {}
+
+ def _load_commands(self, group=None):
+ if not group:
+ self.commands['one'] = FAKE_CMD_ONE
+ self.commands['two'] = FAKE_CMD_TWO
+ else:
+ self.commands['alpha'] = FAKE_CMD_ALPHA
+ self.commands['beta'] = FAKE_CMD_BETA
+
+
+class TestCommandManager(utils.TestCase):
+ def test_add_command_group(self):
+ mgr = FakeCommandManager('test')
+
+ # Make sure add_command() still functions
+ mock_cmd_one = mock.Mock()
+ mgr.add_command('mock', mock_cmd_one)
+ cmd_mock, name, args = mgr.find_command(['mock'])
+ self.assertEqual(cmd_mock, mock_cmd_one)
+
+ # Find a command added in initialization
+ cmd_one, name, args = mgr.find_command(['one'])
+ self.assertEqual(cmd_one, FAKE_CMD_ONE)
+
+ # Load another command group
+ mgr.add_command_group('latin')
+
+ # Find a new command
+ cmd_alpha, name, args = mgr.find_command(['alpha'])
+ self.assertEqual(cmd_alpha, FAKE_CMD_ALPHA)
+
+ # Ensure that the original commands were not overwritten
+ cmd_two, name, args = mgr.find_command(['two'])
+ self.assertEqual(cmd_two, FAKE_CMD_TWO)
diff --git a/openstackclient/tests/common/test_parseractions.py b/openstackclient/tests/common/test_parseractions.py
new file mode 100644
index 00000000..705e7e9c
--- /dev/null
+++ b/openstackclient/tests/common/test_parseractions.py
@@ -0,0 +1,104 @@
+# Copyright 2012-2013 OpenStack Foundation
+#
+# 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.
+#
+
+import argparse
+
+from openstackclient.common import parseractions
+from openstackclient.tests import utils
+
+
+class TestKeyValueAction(utils.TestCase):
+ def test_good_values(self):
+ parser = argparse.ArgumentParser()
+
+ # Set up our typical usage
+ parser.add_argument(
+ '--property',
+ metavar='<key=value>',
+ action=parseractions.KeyValueAction,
+ help='Property to store for this volume '
+ '(repeat option to set multiple properties)',
+ )
+
+ results = parser.parse_args([
+ '--property', 'red=',
+ '--property', 'green=100%',
+ '--property', 'blue=50%',
+ ])
+
+ actual = getattr(results, 'property', {})
+ # All should pass through unmolested
+ expect = {'red': '', 'green': '100%', 'blue': '50%'}
+ self.assertDictEqual(expect, actual)
+
+ def test_default_values(self):
+ parser = argparse.ArgumentParser()
+
+ # Set up our typical usage
+ parser.add_argument(
+ '--property',
+ metavar='<key=value>',
+ action=parseractions.KeyValueAction,
+ default={'green': '20%', 'format': '#rgb'},
+ help='Property to store for this volume '
+ '(repeat option to set multiple properties)',
+ )
+
+ results = parser.parse_args([
+ '--property', 'red=',
+ '--property', 'green=100%',
+ '--property', 'blue=50%',
+ ])
+
+ actual = getattr(results, 'property', {})
+ # Verify green default is changed, format default is unchanged
+ expect = {'red': '', 'green': '100%', 'blue': '50%', 'format': '#rgb'}
+ self.assertDictEqual(expect, actual)
+
+ def test_error_values(self):
+ parser = argparse.ArgumentParser()
+
+ # Set up our typical usage
+ parser.add_argument(
+ '--property',
+ metavar='<key=value>',
+ action=parseractions.KeyValueAction,
+ default={'green': '20%', 'blue': '40%'},
+ help='Property to store for this volume '
+ '(repeat option to set multiple properties)',
+ )
+
+ results = parser.parse_args([
+ '--property', 'red',
+ '--property', 'green=100%',
+ '--property', 'blue',
+ ])
+
+ failhere = None
+ actual = getattr(results, 'property', {})
+ # Verify non-existant red key
+ try:
+ failhere = actual['red']
+ except Exception as e:
+ self.assertTrue(type(e) == KeyError)
+ # Verify removal of blue key
+ try:
+ failhere = actual['blue']
+ except Exception as e:
+ self.assertTrue(type(e) == KeyError)
+ # There should be no red or blue
+ expect = {'green': '100%'}
+ self.assertDictEqual(expect, actual)
+ self.assertEqual(failhere, None)