Mock log only after app creation

The unit test that is getting fixed fails with error:

AttributeError: None does not have the attribute 'info'

It happens because _LOG.info is being patched at the moment when _LOG
is None. For a reason, this doesn't happen always. For example,
the problem was gone after a recheck in
https://review.openstack.org/#/c/391130/.

Patch log only after app creation. This seems to be a common pattern
across all other tests involving mock, for example, in
test_conf_middleware_log_and_default_as_messaging.

Change-Id: Ia48520d6835c5712d77e182cffbf50cc6b56b9ce
This commit is contained in:
Boris Bobrov 2016-11-01 16:33:39 +03:00
parent 8a5762fbca
commit b736936e51
1 changed files with 11 additions and 10 deletions

View File

@ -25,15 +25,16 @@ class TestLoggingNotifier(base.BaseAuditMiddlewareTest):
super(TestLoggingNotifier, self).setUp()
@mock.patch('keystonemiddleware.audit._LOG.info')
def test_api_request_no_messaging(self, log):
self.create_simple_app().get('/foo/bar',
extra_environ=self.get_environ_header())
def test_api_request_no_messaging(self):
app = self.create_simple_app()
# Check first notification with only 'request'
call_args = log.call_args_list[0][0]
self.assertEqual('audit.http.request', call_args[1]['event_type'])
with mock.patch('keystonemiddleware.audit._LOG.info') as log:
app.get('/foo/bar', extra_environ=self.get_environ_header())
# Check second notification with request + response
call_args = log.call_args_list[1][0]
self.assertEqual('audit.http.response', call_args[1]['event_type'])
# Check first notification with only 'request'
call_args = log.call_args_list[0][0]
self.assertEqual('audit.http.request', call_args[1]['event_type'])
# Check second notification with request + response
call_args = log.call_args_list[1][0]
self.assertEqual('audit.http.response', call_args[1]['event_type'])