summaryrefslogtreecommitdiff
path: root/glanceclient/tests/unit/test_utils.py
diff options
context:
space:
mode:
authorStuart McLaren <stuart.mclaren@hp.com>2015-04-17 14:02:33 +0000
committerStuart McLaren <stuart.mclaren@hp.com>2015-04-18 17:42:20 +0000
commitf2a8a520e76a129039b3c4043aeb8db75582b8c8 (patch)
tree1bdef9cffd95d747c515d16e6ea0bcea90cf8b54 /glanceclient/tests/unit/test_utils.py
parent825c4a5df2e32a2d7c1665f0924cc5b9fa675673 (diff)
downloadpython-glanceclient-f2a8a520e76a129039b3c4043aeb8db75582b8c8.tar.gz
Move unit tests to standard directory
This patch moves the glanceclient unit tests to the standard directory (xxxclient/tests/unit) in preparation for adding functional gate tests 'check-glanceclient-dsvm-functional' in the same vein as existing client tests for other projects, eg: * check-novaclient-dsvm-functional * check-keystoneclient-dsvm-functional * check-neutronclient-dsvm-functional Change-Id: I29d4b9e3a428c851575ee9afde40d6df583456c4
Diffstat (limited to 'glanceclient/tests/unit/test_utils.py')
-rw-r--r--glanceclient/tests/unit/test_utils.py165
1 files changed, 165 insertions, 0 deletions
diff --git a/glanceclient/tests/unit/test_utils.py b/glanceclient/tests/unit/test_utils.py
new file mode 100644
index 0000000..564d7f6
--- /dev/null
+++ b/glanceclient/tests/unit/test_utils.py
@@ -0,0 +1,165 @@
+# Copyright 2012 OpenStack Foundation
+# 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.
+
+import sys
+
+import six
+# NOTE(jokke): simplified transition to py3, behaves like py2 xrange
+from six.moves import range
+import testtools
+
+from glanceclient.common import utils
+
+
+class TestUtils(testtools.TestCase):
+
+ def test_make_size_human_readable(self):
+ self.assertEqual("106B", utils.make_size_human_readable(106))
+ self.assertEqual("1000kB", utils.make_size_human_readable(1024000))
+ self.assertEqual("1MB", utils.make_size_human_readable(1048576))
+ self.assertEqual("1.4GB", utils.make_size_human_readable(1476395008))
+ self.assertEqual("9.3MB", utils.make_size_human_readable(9761280))
+
+ def test_get_new_file_size(self):
+ size = 98304
+ file_obj = six.StringIO('X' * size)
+ try:
+ self.assertEqual(size, utils.get_file_size(file_obj))
+ # Check that get_file_size didn't change original file position.
+ self.assertEqual(0, file_obj.tell())
+ finally:
+ file_obj.close()
+
+ def test_get_consumed_file_size(self):
+ size, consumed = 98304, 304
+ file_obj = six.StringIO('X' * size)
+ file_obj.seek(consumed)
+ try:
+ self.assertEqual(size, utils.get_file_size(file_obj))
+ # Check that get_file_size didn't change original file position.
+ self.assertEqual(consumed, file_obj.tell())
+ finally:
+ file_obj.close()
+
+ def test_prettytable(self):
+ class Struct:
+ def __init__(self, **entries):
+ self.__dict__.update(entries)
+
+ # test that the prettytable output is wellformatted (left-aligned)
+ columns = ['ID', 'Name']
+ val = ['Name1', 'another', 'veeeery long']
+ images = [Struct(**{'id': i ** 16, 'name': val[i]})
+ for i in range(len(val))]
+
+ saved_stdout = sys.stdout
+ try:
+ sys.stdout = output_list = six.StringIO()
+ utils.print_list(images, columns)
+
+ sys.stdout = output_dict = six.StringIO()
+ utils.print_dict({'K': 'k', 'Key': 'veeeeeeeeeeeeeeeeeeeeeeee'
+ 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
+ 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
+ 'eeeeeeeeeeeery long value'},
+ max_column_width=60)
+
+ finally:
+ sys.stdout = saved_stdout
+
+ self.assertEqual('''\
++-------+--------------+
+| ID | Name |
++-------+--------------+
+| | Name1 |
+| 1 | another |
+| 65536 | veeeery long |
++-------+--------------+
+''',
+ output_list.getvalue())
+
+ self.assertEqual('''\
++----------+--------------------------------------------------------------+
+| Property | Value |
++----------+--------------------------------------------------------------+
+| K | k |
+| Key | veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee |
+| | eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee |
+| | ery long value |
++----------+--------------------------------------------------------------+
+''',
+ output_dict.getvalue())
+
+ def test_exception_to_str(self):
+ class FakeException(Exception):
+ def __str__(self):
+ raise UnicodeError()
+
+ ret = utils.exception_to_str(Exception('error message'))
+ self.assertEqual('error message', ret)
+
+ ret = utils.exception_to_str(Exception('\xa5 error message'))
+ if six.PY2:
+ self.assertEqual(' error message', ret)
+ else:
+ self.assertEqual('\xa5 error message', ret)
+
+ ret = utils.exception_to_str(FakeException('\xa5 error message'))
+ self.assertEqual("Caught '%(exception)s' exception." %
+ {'exception': 'FakeException'}, ret)
+
+ def test_schema_args_with_list_types(self):
+ # NOTE(flaper87): Regression for bug
+ # https://bugs.launchpad.net/python-glanceclient/+bug/1401032
+
+ def schema_getter(_type='string', enum=False):
+ prop = {
+ 'type': ['null', _type],
+ 'description': 'Test schema (READ-ONLY)',
+ }
+
+ if enum:
+ prop['enum'] = [None, 'opt-1', 'opt-2']
+
+ def actual_getter():
+ return {
+ 'additionalProperties': False,
+ 'required': ['name'],
+ 'name': 'test_schema',
+ 'properties': {
+ 'test': prop,
+ }
+ }
+
+ return actual_getter
+
+ def dummy_func():
+ pass
+
+ decorated = utils.schema_args(schema_getter())(dummy_func)
+ arg, opts = decorated.__dict__['arguments'][0]
+ self.assertIn('--test', arg)
+ self.assertEqual(str, opts['type'])
+
+ decorated = utils.schema_args(schema_getter('integer'))(dummy_func)
+ arg, opts = decorated.__dict__['arguments'][0]
+ self.assertIn('--test', arg)
+ self.assertEqual(int, opts['type'])
+
+ decorated = utils.schema_args(schema_getter(enum=True))(dummy_func)
+ arg, opts = decorated.__dict__['arguments'][0]
+ self.assertIn('--test', arg)
+ self.assertEqual(str, opts['type'])
+ self.assertIn('None, opt-1, opt-2', opts['help'])