Add unit test for utils 39/1139/2
authorKristian Hunt <kristian.hunt@gmail.com>
Mon, 10 Aug 2015 11:52:13 +0000 (13:52 +0200)
committerJörgen Karlsson <jorgen.w.karlsson@ericsson.com>
Tue, 25 Aug 2015 14:18:27 +0000 (14:18 +0000)
Unit test case for utility function itersubclasses is from rally.
A separate test case is created for each utility function.

Running of unittest from run_test.sh is NOT enabled.

Change-Id: I47a8020a05b19eb3f1edcebde1042c732bff5561
Signed-off-by: Kristian Hunt <kristian.hunt@gmail.com>
tests/unit/common/test_utils.py [new file with mode: 0644]

diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py
new file mode 100644 (file)
index 0000000..002d049
--- /dev/null
@@ -0,0 +1,90 @@
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Unittest for yardstick.common.utils
+
+import os
+import mock
+import unittest
+
+from yardstick.common import utils
+
+
+class IterSubclassesTestCase(unittest.TestCase):
+# Disclaimer: this class is a modified copy from
+# rally/tests/unit/common/plugin/test_discover.py
+# Copyright 2015: Mirantis Inc.
+    def test_itersubclasses(self):
+        class A(object):
+            pass
+
+        class B(A):
+            pass
+
+        class C(A):
+            pass
+
+        class D(C):
+            pass
+
+        self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
+
+
+class TryAppendModuleTestCase(unittest.TestCase):
+
+    @mock.patch('yardstick.common.utils.importutils')
+    def test_try_append_module_not_in_modules(self, mock_importutils):
+
+        modules = {}
+        name = 'foo'
+        utils.try_append_module(name, modules)
+        mock_importutils.import_module.assert_called_with(name)
+
+    @mock.patch('yardstick.common.utils.importutils')
+    def test_try_append_module_already_in_modules(self, mock_importutils):
+
+        modules = {'foo'}
+        name = 'foo'
+        utils.try_append_module(name, modules)
+        self.assertFalse(mock_importutils.import_module.called)
+
+
+class ImportModulesFromPackageTestCase(unittest.TestCase):
+
+    @mock.patch('yardstick.common.utils.os.walk')
+    @mock.patch('yardstick.common.utils.try_append_module')
+    def test_import_modules_from_package_no_mod(self, mock_append, mock_walk):
+
+        sep = os.sep
+        mock_walk.return_value = ([
+            ('..' + sep + 'foo', ['bar'], ['__init__.py']),
+            ('..' + sep + 'foo' + sep + 'bar', [], ['baz.txt', 'qux.rst'])
+        ])
+
+        utils.import_modules_from_package('foo.bar')
+        self.assertFalse(mock_append.called)
+
+    @mock.patch('yardstick.common.utils.os.walk')
+    @mock.patch('yardstick.common.utils.importutils')
+    def test_import_modules_from_package(self, mock_importutils, mock_walk):
+
+        sep = os.sep
+        mock_walk.return_value = ([
+            ('foo' + sep + '..' + sep + 'bar', [], ['baz.py'])
+        ])
+
+        utils.import_modules_from_package('foo.bar')
+        mock_importutils.import_module.assert_called_with('bar.baz')
+
+
+def main():
+    unittest.main()
+
+if __name__ == '__main__':
+    main()