placement/placement/tests/unit/test_requestlog.py

76 lines
2.9 KiB
Python

# 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.
"""Tests for the placement request log middleware."""
from unittest import mock
import testtools
import webob
from placement import requestlog
class TestRequestLog(testtools.TestCase):
@staticmethod
@webob.dec.wsgify
def application(req):
req.response.status = 200
return req.response
def setUp(self):
super(TestRequestLog, self).setUp()
self.req = webob.Request.blank('/resource_providers?name=myrp')
self.environ = self.req.environ
# The blank does not include remote address, so add it.
self.environ['REMOTE_ADDR'] = '127.0.0.1'
# nor a microversion
self.environ['placement.microversion'] = '2.1'
def test_get_uri(self):
req_uri = requestlog.RequestLog._get_uri(self.environ)
self.assertEqual('/resource_providers?name=myrp', req_uri)
def test_get_uri_knows_prefix(self):
self.environ['SCRIPT_NAME'] = '/placement'
req_uri = requestlog.RequestLog._get_uri(self.environ)
self.assertEqual('/placement/resource_providers?name=myrp', req_uri)
@mock.patch("placement.requestlog.RequestLog.write_log")
@mock.patch("placement.requestlog.LOG")
def test_middleware_writes_logs(self, mocked_log, write_log):
mocked_log.isEnabledFor.return_value = True
start_response_mock = mock.MagicMock()
app = requestlog.RequestLog(self.application)
app(self.environ, start_response_mock)
write_log.assert_called_once_with(
self.environ, '/resource_providers?name=myrp', '200 OK', '0')
@mock.patch("placement.requestlog.LOG")
def test_middleware_sends_message(self, mocked_log):
start_response_mock = mock.MagicMock()
app = requestlog.RequestLog(self.application)
app(self.environ, start_response_mock)
mocked_log.debug.assert_called_once_with(
'Starting request: %s "%s %s"', '127.0.0.1', 'GET',
'/resource_providers?name=myrp')
mocked_log.info.assert_called_once_with(
'%(REMOTE_ADDR)s "%(REQUEST_METHOD)s %(REQUEST_URI)s" '
'status: %(status)s len: %(bytes)s microversion: %(microversion)s',
{'microversion': '2.1',
'status': '200',
'REQUEST_URI': '/resource_providers?name=myrp',
'REQUEST_METHOD': 'GET',
'REMOTE_ADDR': '127.0.0.1',
'bytes': '0'})