diff options
| author | Sushil Kumar <sushil.kumar3@hp.com> | 2015-06-08 07:13:36 +0000 |
|---|---|---|
| committer | Sushil Kumar <sushil.kumar3@hp.com> | 2015-06-08 10:51:40 +0000 |
| commit | 61a756a014eac7a9a479031d2d76187e668c158f (patch) | |
| tree | e8b00496069013d90a402517b6ce70fb7457f1e0 /troveclient/tests/utils.py | |
| parent | ad68fb2897f7fa376bfbcf04b2698a46f2186ac3 (diff) | |
| download | python-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.py | 81 |
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 |
