diff --git a/orm/cmd/db_sync.py b/orm/cmd/db_sync.py index 5ba38f1b..a744d0c4 100644 --- a/orm/cmd/db_sync.py +++ b/orm/cmd/db_sync.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # Copyright (c) 2018 OpenStack Foundation # All Rights Reserved. # diff --git a/orm/common/client/audit/tox.ini b/orm/common/client/audit/tox.ini deleted file mode 100644 index 6eec9c02..00000000 --- a/orm/common/client/audit/tox.ini +++ /dev/null @@ -1,22 +0,0 @@ -[tox] -envlist = py27, cover, pep8 - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt -install_command = pip install -U {opts} {packages} - -commands = python setup.py testr - -[testenv:cover] -#omitting rds/api/app.py and rds/examples/api/functional_test.py -#since they have no need for unit test -commands = - python setup.py testr --slowest --coverage --omit=audit_client/examples/* - coverage report --omit=audit_client/examples/* - -[testenv:pep8] -#cannot handle and 'H102 Apache 2.0 license header not found' and -#'H202 assertRaises Exception too broad' -#since it requires business code changes -commands = flake8 diff --git a/orm/common/client/keystone/tox.ini b/orm/common/client/keystone/tox.ini deleted file mode 100644 index 8bdf31df..00000000 --- a/orm/common/client/keystone/tox.ini +++ /dev/null @@ -1,24 +0,0 @@ -[tox] -envlist = py27,cover -skipsdist = True - -[testenv] -install_command = -# constraints: {[testenv:common-constraints]install_command} - pip install -U --force-reinstall {opts} {packages} -setenv = VIRTUAL_ENV={envdir} - OS_TEST_PATH=./keystone_utils/tests/unit - PYTHONPATH = {toxinidir}/mock_keystone/:/usr/local/lib/python2.7/dist-packages/ -deps = -r{toxinidir}/test-requirements.txt - -r{toxinidir}/requirements.txt - -[testenv:cover] -commands = - coverage erase - python setup.py testr --coverage - coverage report --omit="keystone_utils/tests/*" - coverage html --omit="keystone_utils/tests/*" - -[testenv:pep8] -commands= - py.test --pep8 -m pep8 diff --git a/orm/common/orm_common/hooks/api_error_hook.py b/orm/common/orm_common/hooks/api_error_hook.py index b578dc30..201ad308 100755 --- a/orm/common/orm_common/hooks/api_error_hook.py +++ b/orm/common/orm_common/hooks/api_error_hook.py @@ -27,15 +27,15 @@ class APIErrorHook(PecanHook): result_json = err_utils.get_error_dict(401, transaction_id, None) - else: dict_body = None try: logger.debug('error: {}'.format(state.response)) dict_body = json.loads(state.response.body) + result_json = dict_body + if 'line' in str(state.response.body) and 'column' in str( state.response.body): - result_json = dict_body status_code = 400 if 'faultstring' in dict_body: result_json = err_utils.get_error_dict(status_code, @@ -43,14 +43,17 @@ class APIErrorHook(PecanHook): dict_body['faultstring'], "") else: - result_json = json.loads(dict_body['faultstring']) - logger.debug('Received faultstring: {}'.format(result_json)) + logger.info('Received faultstring: {}'.format(dict_body['faultstring'])) # make sure status code in header and in body are the same if 'code' in result_json: status_code = result_json['code'] logger.info('Received status code: {}, transaction_id: {}, tracking_id: {}'. format(status_code, transaction_id, tracking_id)) + result_json = err_utils.get_error_dict(status_code, + transaction_id, + dict_body['faultstring'], + "") except ValueError: msg = 'Could not read faultstring from response body!' @@ -64,7 +67,6 @@ class APIErrorHook(PecanHook): transaction_id, msg, "") - - setattr(state.response, 'body', json.dumps(result_json)) - state.response.status_code = status_code - state.response.headers.add('X-RANGER-Request-Id', tracking_id) + state.response.text = json.dumps(result_json) + state.response.status_code = status_code + state.response.headers.add('X-RANGER-Request-Id', tracking_id) diff --git a/orm/orm_client/flavorgen/flavorator.py b/orm/orm_client/flavorgen/flavorator.py index bdc256eb..298636a0 100644 --- a/orm/orm_client/flavorgen/flavorator.py +++ b/orm/orm_client/flavorgen/flavorator.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import argparse import json import os diff --git a/orm/orm_client/flavorgen/make_flav.py b/orm/orm_client/flavorgen/make_flav.py index f085fe3b..863acdd5 100644 --- a/orm/orm_client/flavorgen/make_flav.py +++ b/orm/orm_client/flavorgen/make_flav.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import json import sys diff --git a/orm/orm_client/flavorgen/make_flavor.py b/orm/orm_client/flavorgen/make_flavor.py index b469cc40..05cc8ef1 100644 --- a/orm/orm_client/flavorgen/make_flavor.py +++ b/orm/orm_client/flavorgen/make_flavor.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import json import re import sys diff --git a/orm/orm_client/flavorgen/regionator.py b/orm/orm_client/flavorgen/regionator.py index 0c8df471..f388ec2d 100644 --- a/orm/orm_client/flavorgen/regionator.py +++ b/orm/orm_client/flavorgen/regionator.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import argparse import ast import json diff --git a/orm/orm_client/imagegen/imageator.py b/orm/orm_client/imagegen/imageator.py index 441413ad..7ea81b67 100644 --- a/orm/orm_client/imagegen/imageator.py +++ b/orm/orm_client/imagegen/imageator.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import argparse import json import os diff --git a/orm/orm_client/imagegen/regionator.py b/orm/orm_client/imagegen/regionator.py index 0b10ef7b..854bd7df 100644 --- a/orm/orm_client/imagegen/regionator.py +++ b/orm/orm_client/imagegen/regionator.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import argparse import ast import json diff --git a/orm/orm_client/ormcli/imscli.py b/orm/orm_client/ormcli/imscli.py index 5f01942b..4b37357c 100644 --- a/orm/orm_client/ormcli/imscli.py +++ b/orm/orm_client/ormcli/imscli.py @@ -1,4 +1,3 @@ -#!/usr/bin/python import argparse import orm.base_config as base_config import os diff --git a/orm/orm_client/ormcli/orm b/orm/orm_client/ormcli/orm index 67087452..45193ba8 100755 --- a/orm/orm_client/ormcli/orm +++ b/orm/orm_client/ormcli/orm @@ -1,5 +1,4 @@ -#!/usr/bin/env python - +#! /usr/bin/python3 import sys import ormcli diff --git a/orm/orm_client/ormcli/ormcli.py b/orm/orm_client/ormcli/ormcli.py index bd3b3f48..006ef841 100644 --- a/orm/orm_client/ormcli/ormcli.py +++ b/orm/orm_client/ormcli/ormcli.py @@ -1,4 +1,3 @@ -#!/usr/bin/python import argparse from orm.orm_client.ormcli import cmscli from orm.orm_client.ormcli import fmscli diff --git a/orm/orm_client/ormcli/rmscli.py b/orm/orm_client/ormcli/rmscli.py index c85b7a16..ba6abb8b 100644 --- a/orm/orm_client/ormcli/rmscli.py +++ b/orm/orm_client/ormcli/rmscli.py @@ -1,4 +1,3 @@ -#!/usr/bin/python import argparse import orm.base_config as base_config import os diff --git a/orm/services/audit_trail_manager/tox.ini b/orm/services/audit_trail_manager/tox.ini deleted file mode 100644 index 0fe24ecf..00000000 --- a/orm/services/audit_trail_manager/tox.ini +++ /dev/null @@ -1,19 +0,0 @@ -[tox] -#envlist = py27, cover -envlist = py27, cover, pep8 - -[testenv] -setenv= PYTHONPATH={toxinidir}:{toxinidir}/audit_server/external_mock/ -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt -install_command = pip install -U {opts} {packages} - -commands = python setup.py testr - -[testenv:cover] -commands = python setup.py testr --slowest --coverage - coverage report --omit=audit_server/tests/* - -[testenv:pep8] -#commands = flake8 --ignore=D100,D101,D102,D103,D104,D105 -commands = flake8 diff --git a/orm/services/customer_manager/tox.ini b/orm/services/customer_manager/tox.ini deleted file mode 100755 index 4f3fc0e5..00000000 --- a/orm/services/customer_manager/tox.ini +++ /dev/null @@ -1,19 +0,0 @@ -[tox] -envlist=py27, pep8, cover - -[testenv] -setenv= CMS_ENV=mock - PYTHONPATH={toxinidir}:{toxinidir}/cms_rest/extenal_mock/ -deps= -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:pep8] -commands = - py.test --pep8 -m pep8 - -[testenv:cover] -commands= - coverage run setup.py test - coverage report - coverage html -#commands={envpython} setup.py test -v {posargs} diff --git a/orm/services/db_setup.py b/orm/services/db_setup.py index 9ef8e5ac..4c3c6224 100644 --- a/orm/services/db_setup.py +++ b/orm/services/db_setup.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # Copyright (c) 2012 OpenStack Foundation # All Rights Reserved. # diff --git a/orm/services/flavor_manager/fms_rest/utils/utils.py b/orm/services/flavor_manager/fms_rest/utils/utils.py index 975e2917..c0681dbe 100755 --- a/orm/services/flavor_manager/fms_rest/utils/utils.py +++ b/orm/services/flavor_manager/fms_rest/utils/utils.py @@ -1,3 +1,4 @@ +import requests import time from orm.common.orm_common.injector import injector @@ -10,13 +11,11 @@ logger = get_logger(__name__) di = injector.get_di() -@di.dependsOn('requests') def make_uuid(): """ function to request new uuid from uuid_generator rest service returns uuid string """ - requests = di.resolver.unpack(make_uuid) url = conf.api.uuid_server.base + conf.api.uuid_server.uuids try: @@ -36,13 +35,11 @@ def make_uuid(): return resp['uuid'] -@di.dependsOn('requests') def create_existing_uuid(uuid): """ function to request new uuid from uuid_generator rest service returns uuid string """ - requests = di.resolver.unpack(make_uuid) url = conf.api.uuid_server.base + conf.api.uuid_server.uuids try: @@ -65,13 +62,11 @@ def create_existing_uuid(uuid): return resp['uuid'] -@di.dependsOn('requests') def make_transid(): """ function to request new uuid of transaction type from uuid_generator rest service returns uuid string """ url = conf.api.uuid_server.base + conf.api.uuid_server.uuids - requests = di.resolver.unpack(make_uuid) try: resp = requests.post(url, data={'uuid_type': 'transaction'}, diff --git a/orm/services/flavor_manager/tox.ini b/orm/services/flavor_manager/tox.ini deleted file mode 100755 index 8e9d9942..00000000 --- a/orm/services/flavor_manager/tox.ini +++ /dev/null @@ -1,19 +0,0 @@ -[tox] -envlist=py27,cover - -[testenv] -setenv= FMS_ENV=mock - PYTHONPATH={toxinidir}:{toxinidir}/fms_rest/external_mock/ -deps= -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - - -[testenv:pep8] -commands = - py.test --pep8 -m pep8 - -[testenv:cover] -commands= - coverage run setup.py test - coverage report - coverage html --omit=fms_rest/data/sql_alchemy/*,fms_rest/utils/utils.py,.tox/* diff --git a/orm/services/id_generator/tox.ini b/orm/services/id_generator/tox.ini deleted file mode 100755 index a6706fbe..00000000 --- a/orm/services/id_generator/tox.ini +++ /dev/null @@ -1,18 +0,0 @@ -[tox] -envlist=py27,cover - -[testenv] -setenv= PYTHONPATH={toxinidir}:{toxinidir}/uuidgen/external_mock/ -deps= -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:pep8] -commands= - py.test --pep8 -m pep8 - -[testenv:cover] -commands= - coverage run setup.py test - coverage report --omit=uuidgen/tests/* - coverage html --omit=uuidgen/tests/* -#commands={envpython} setup.py test -v {posargs} diff --git a/orm/services/id_generator/uuidgen/db/db_manager.py b/orm/services/id_generator/uuidgen/db/db_manager.py index b4c67ebc..af93b819 100755 --- a/orm/services/id_generator/uuidgen/db/db_manager.py +++ b/orm/services/id_generator/uuidgen/db/db_manager.py @@ -13,7 +13,7 @@ class DBManager(object): if not connection_string: connection_string = conf.database.connection_string - self._engine_facade = db_session.EngineFacade(connection_string, autocommit=False) + self._engine_facade = db_session.enginefacade(connection_string, autocommit=False) self._session = None def get_session(self): diff --git a/orm/services/image_manager/tox.ini b/orm/services/image_manager/tox.ini deleted file mode 100755 index 04ce4ec0..00000000 --- a/orm/services/image_manager/tox.ini +++ /dev/null @@ -1,17 +0,0 @@ -[tox] -envlist=py27,pep8,cover - -[testenv] -setenv= PYTHONPATH={toxinidir}:{toxinidir}/ims/external_mock/ -deps= -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:pep8] -commands= - py.test --pep8 -m pep8 - -[testenv:cover] -commands= - coverage run setup.py test - coverage report - coverage html diff --git a/orm/services/region_manager/tox.ini b/orm/services/region_manager/tox.ini deleted file mode 100755 index d1ea4254..00000000 --- a/orm/services/region_manager/tox.ini +++ /dev/null @@ -1,27 +0,0 @@ -[tox] -envlist = py27 - -[testenv] -setenv = PYTHONPATH = {toxinidir}:{toxinidir}/rms/external_mock/ -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -commands = - python setup.py testr --coverage --slowest --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - coverage report --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - coverage html --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - -[testenv:cover] -setenv = PYTHONPATH = {toxinidir}:{toxinidir}/rms/external_mock/ -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -commands = - python setup.py testr --coverage --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - coverage report --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - coverage html --omit=rms/storage/my_sql/data_models.py,rms/tests/*,.tox/*,external_mock/*,setup.py,rms/logger/*,rms/app.py - -[testenv:pep8] -commands = - - py.test --pep8 -m pep8 diff --git a/orm/services/resource_distributor/rds/sot/git_sot/git_native.py b/orm/services/resource_distributor/rds/sot/git_sot/git_native.py index 95f40890..a7306a56 100644 --- a/orm/services/resource_distributor/rds/sot/git_sot/git_native.py +++ b/orm/services/resource_distributor/rds/sot/git_sot/git_native.py @@ -2,7 +2,7 @@ import logging import shlex import subprocess -from threading import Timer +from subprocess import TimeoutExpired as ProcessTimeout import time from pecan import conf @@ -187,21 +187,17 @@ class GitNative(object): error = "" proc = subprocess.Popen(shlex.split(cmd), cwd=repo_dir, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - timeout = conf.git.git_cmd_timeout - timer = Timer(timeout, on_subprocess_timeout, [cmd, proc]) + stderr=subprocess.PIPE, + universal_newlines=True) try: - timer.start() - (out, error) = proc.communicate() + (out, error) = proc.communicate(timeout=conf.git.git_cmd_timeout) logger.debug("Cmd proc id: {}".format(proc.pid)) proc.wait() - finally: - if not timer.is_alive(): - msg = "Git command '{}' timed out.".format(cmd) - logger.error(msg) - # the word error must be in message - error = "error:" + msg - timer.cancel() + except ProcessTimeout: + msg = "Git command '{}' timed out.".format(cmd) + logger.error(msg) + # the word error must be in message + error = "error:" + msg if self._is_error(error): raise GitNativeError("Git error: [{}]".format(error)) @@ -214,21 +210,17 @@ class GitNative(object): start_time = time.time() proc = subprocess.Popen(shlex.split(cmd), cwd=repo_dir, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - timeout = conf.git.git_cmd_timeout - timer = Timer(timeout, on_subprocess_timeout, [cmd, proc]) + stderr=subprocess.PIPE, + universal_newlines=True) try: - timer.start() - (out, error) = proc.communicate() + (out, error) = proc.communicate(timeout=conf.git.git_cmd_timeout) logger.debug("Cmd proc id: {}".format(proc.pid)) proc.wait() - finally: - if not timer.is_alive(): + except TimeoutError: msg = "Git command '{}' timed out.".format(cmd) logger.error(msg) # the word error must be in message error = "error:" + msg - timer.cancel() # Special case for pull caller method will check the output if not self._is_error(error): diff --git a/orm/services/resource_distributor/rds/sot/git_sot/git_sot.py b/orm/services/resource_distributor/rds/sot/git_sot/git_sot.py index f6388520..69a1f8c9 100755 --- a/orm/services/resource_distributor/rds/sot/git_sot/git_sot.py +++ b/orm/services/resource_distributor/rds/sot/git_sot/git_sot.py @@ -55,11 +55,11 @@ def update_sot(git_impl, my_lock, tracking_id, transaction_id, resource_list, commit_id = "" result = False logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - logger.info("Acquire Git lock...") + logger.info("Acquiring Git lock...") # Lock the entire git operations, so that no other threads change local # files. my_lock.acquire() - logger.info("Git lock acquired !!!!") + logger.info("Git lock acquired.") try: init_git(git_impl) @@ -67,12 +67,12 @@ def update_sot(git_impl, my_lock, tracking_id, transaction_id, resource_list, commit_id = update_git(git_impl) - logger.info("All files were successfully updated in Git server :-)\n") + logger.info("All files were successfully updated in Git server") result = True except SoTError as exc: - logger.error("Save resource to SoT Git repository failed. " + logger.error("Saving resource to SoT Git repository failed. " "Reason: {}.". format(str(exc))) except GitInitError as init_exc: @@ -83,9 +83,9 @@ def update_sot(git_impl, my_lock, tracking_id, transaction_id, resource_list, format(str(upload_exc))) cleanup(git_impl) finally: - logger.info("Release Git lock...") + logger.info("Releasing Git lock...") my_lock.release() - logger.info("Git lock released !!!!") + logger.info("Git lock released.") logger.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") # This method is called also in case exception raised. @@ -108,7 +108,7 @@ def update_sot(git_impl, my_lock, tracking_id, transaction_id, resource_list, not result, headers) except Exception as e: - logger.error("Error in updating ORD! Error: {}".format( + logger.error("Error in updating ORD. Error: {}".format( str(e) )) @@ -130,7 +130,7 @@ def handle_file_operations(resource_list): logger.error(msg) raise SoTError(msg) else: - logger.info("File does not exist, nothing to delete..") + logger.info("File does not exist, nothing to delete.") else: # for all other operations "modify", "create" logger.info("Adding file: {}".format(file_path)) @@ -152,7 +152,7 @@ def create_file_in_path(file_path, file_data): logger.info("Creating file : {}".format(file_path)) create_dir(file_path) - logger.debug("Directory path created..") + logger.debug("Directory path created.") write_data_to_file(file_path, file_data) logger.info("Data written to file.") @@ -207,25 +207,25 @@ def update_git(git_impl): def validate_git(git_impl, my_lock): logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - logger.info("Acquire Git lock...") + logger.info("Acquiring Git lock...") my_lock.acquire() - logger.info("Git lock acquired !!!!") + logger.info("Git lock acquired.") try: git_impl.validate_git() except GitValidateError as exc: logger.error("Git validation error. Reason: {}.". format(str(exc))) finally: - logger.info("Release Git lock...") + logger.info("Releasing Git lock...") my_lock.release() - logger.info("Git lock released !!!!") + logger.info("Git lock released.") logger.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") def cleanup(git_impl): logger.info("Cleanup started...") try: - git_impl.git_reset_changes("Clean up changes due to upload error.") + git_impl.git_reset_changes("Cleaning up changes due to an upload error.") except GitResetError as exc: logger.error(str(exc)) raise SoTError(str(exc)) diff --git a/orm/services/resource_distributor/tox.ini b/orm/services/resource_distributor/tox.ini deleted file mode 100755 index 9891056a..00000000 --- a/orm/services/resource_distributor/tox.ini +++ /dev/null @@ -1,21 +0,0 @@ -[tox] -envlist = py27, cover - -[testenv:cover] - -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -install_command = pip install -U {opts} {packages} - -setenv = PYTHONPATH = {toxinidir}:{toxinidir}/rds/utils/module_mocks/ - -commands = - python setup.py testr --slowest --coverage - coverage report --omit=rds/storage/factory.py,rds/api/app.py,rds/tests/*,rds/utils/authentication.py,rds/sot/sot_utils.py,rds/utils/module_mocks/* - coverage html --omit=rds/storage/factory.py,rds/api/app.py,rds/tests/*,rds/utils/authentication.py,rds/sot/sot_utils.py,rds/utils/module_mocks/* - -[testenv:pep8] -whitelist_externals=true -commands=true - diff --git a/orm/tests/unit/common/test_api_error_hook.py b/orm/tests/unit/common/test_api_error_hook.py index 3eabe613..eaf712ff 100755 --- a/orm/tests/unit/common/test_api_error_hook.py +++ b/orm/tests/unit/common/test_api_error_hook.py @@ -20,22 +20,24 @@ class TestAPIErrorHook(TestCase): mock_json.dumps = json.dumps state.response.status_code = 401 a.after(state) - self.assertEqual(state.response.body, + self.assertEqual(state.response.text, json.dumps(mock_err_utils.get_error_dict.return_value)) @mock.patch.object(api_error_hook, 'err_utils') - def test_after_not_an_error(self, mock_err_utils): + @mock.patch.object(api_error_hook, 'json') + def test_after_not_an_error(self, mock_json, mock_err_utils): a = api_error_hook.APIErrorHook() state = mock.MagicMock() - + mock_json.loads = json.loads + mock_json.dumps = json.dumps mock_err_utils.get_error_dict.return_value = 'B' state.response.body = 'AAAA' - temp = state.response.body # A successful status code state.response.status_code = 201 + temp = state.response.status_code a.after(state) # Assert that the response body hasn't changed - self.assertEqual(state.response.body, temp) + self.assertEqual(state.response.text, json.dumps({})) @mock.patch.object(api_error_hook, 'err_utils') @mock.patch.object(api_error_hook.json, 'loads', @@ -50,7 +52,7 @@ class TestAPIErrorHook(TestCase): mock_json.loads = mock.MagicMock(side_effect=ValueError('sd')) state.response.status_code = 402 a.after(state) - self.assertEqual(state.response.body, + self.assertEqual(state.response.text, json.dumps(mock_err_utils.get_error_dict.return_value)) @mock.patch.object(api_error_hook, 'err_utils') @@ -58,12 +60,9 @@ class TestAPIErrorHook(TestCase): def test_after_success(self, mock_json, mock_err_utils): a = api_error_hook.APIErrorHook() state = mock.MagicMock() - - mock_err_utils.get_error_dict.return_value = 'B' - mock_json.loads = json.loads mock_json.dumps = json.dumps - mock_json.loads = json.loads - state.response.body = '{"debuginfo": null, "faultcode": "Client", "faultstring": "{\\"code\\": 404, \\"created\\": \\"1475768730.95\\", \\"details\\": \\"\\", \\"message\\": \\"customer: q not found\\", \\"type\\": \\"Not Found\\", \\"transaction_id\\": \\"mock_json5efa7416fb4d408cc0e30e4373cf00\\"}"}' + mock_err_utils.get_error_dict.return_value = {"code": 404, "type": "Not Found", "created": "1475768730.95", "transaction_id": "mock_json5efa7416fb4d408cc0e30e4373cf00", "details": ""} + state.response.body = '{"debuginfo": null, "faultcode": "Client", "faultstring": "{\\"type\\": \\"Not Found\\", \\"created\\": \\"1475768730.95\\", \\"message\\": \\"customer: q not found\\"}"}' state.response.status_code = 400 a.after(state) - self.assertEqual(json.loads(state.response.body), json.loads('{"message": "customer: q not found", "created": "1475768730.95", "type": "Not Found", "details": "", "code": 404, "transaction_id": "mock_json5efa7416fb4d408cc0e30e4373cf00"}')) + self.assertEqual(state.response.text, json.dumps(mock_err_utils.get_error_dict.return_value))