summaryrefslogtreecommitdiff
path: root/troveclient/tests/utils.py
diff options
context:
space:
mode:
authorSushil Kumar <sushil.kumar3@hp.com>2015-06-08 07:13:36 +0000
committerSushil Kumar <sushil.kumar3@hp.com>2015-06-08 10:51:40 +0000
commit61a756a014eac7a9a479031d2d76187e668c158f (patch)
treee8b00496069013d90a402517b6ce70fb7457f1e0 /troveclient/tests/utils.py
parentad68fb2897f7fa376bfbcf04b2698a46f2186ac3 (diff)
downloadpython-troveclient-61a756a014eac7a9a479031d2d76187e668c158f.tar.gz
Added more unit-tests to improve code coverage
Following files were too low on code coverage, so the coverage has been enhanced with addition of more unit-tests. - troveclient/client.py - troveclient/v1/shell.py The methodology to test shell.py has been motivated from the one used by python-novaclient to test novaclient/v2/shell.py Also, found an unmocked entry in test_secgroups.py, which was causing intermittent failure while writing the tests for shell.py. Closes-Bug: #1455856 Change-Id: I6a148fb5caad6a83b6ac23411b6458f231064ead
Diffstat (limited to 'troveclient/tests/utils.py')
-rw-r--r--troveclient/tests/utils.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/troveclient/tests/utils.py b/troveclient/tests/utils.py
new file mode 100644
index 0000000..c3e81ac
--- /dev/null
+++ b/troveclient/tests/utils.py
@@ -0,0 +1,81 @@
+# Copyright [2015] Hewlett-Packard Development Company, L.P.
+#
+# 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 os
+
+import fixtures
+import mock
+import requests
+import testtools
+
+AUTH_URL = "http://localhost:5002/auth_url"
+AUTH_URL_V1 = "http://localhost:5002/auth_url/v1.0"
+AUTH_URL_V2 = "http://localhost:5002/auth_url/v2.0"
+
+
+def _patch_mock_to_raise_for_invalid_assert_calls():
+ def raise_for_invalid_assert_calls(wrapped):
+ def wrapper(_self, name):
+ valid_asserts = [
+ 'assert_called_with',
+ 'assert_called_once_with',
+ 'assert_has_calls',
+ 'assert_any_calls']
+
+ if name.startswith('assert') and name not in valid_asserts:
+ raise AttributeError('%s is not a valid mock assert method'
+ % name)
+
+ return wrapped(_self, name)
+ return wrapper
+ mock.Mock.__getattr__ = raise_for_invalid_assert_calls(
+ mock.Mock.__getattr__)
+
+# NOTE(gibi): needs to be called only once at import time
+# to patch the mock lib
+_patch_mock_to_raise_for_invalid_assert_calls()
+
+
+class TestCase(testtools.TestCase):
+ TEST_REQUEST_BASE = {
+ 'verify': True,
+ }
+
+ def setUp(self):
+ super(TestCase, self).setUp()
+ if (os.environ.get('OS_STDOUT_CAPTURE') == 'True' or
+ os.environ.get('OS_STDOUT_CAPTURE') == '1'):
+ stdout = self.useFixture(fixtures.StringStream('stdout')).stream
+ self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout))
+ if (os.environ.get('OS_STDERR_CAPTURE') == 'True' or
+ os.environ.get('OS_STDERR_CAPTURE') == '1'):
+ stderr = self.useFixture(fixtures.StringStream('stderr')).stream
+ self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr))
+
+
+class TestResponse(requests.Response):
+ """Class used to wrap requests.Response and provide some
+ convenience to initialize with a dict
+ """
+
+ def __init__(self, data):
+ super(TestResponse, self).__init__()
+ self._text = None
+ if isinstance(data, dict):
+ self.status_code = data.get('status_code')
+ self.headers = data.get('headers')
+ # Fake the text attribute to streamline Response creation
+ self._text = data.get('text')
+ else:
+ self.status_code = data