From 1215f5d5327c39663a9f6cb64249d5c4b65415a2 Mon Sep 17 00:00:00 2001 From: Nickolai Novik Date: Thu, 2 Jun 2016 14:28:56 -0700 Subject: [PATCH] add make_mocked_request to test_utils --- aiohttp/test_utils.py | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/aiohttp/test_utils.py b/aiohttp/test_utils.py index 240154c9820..a54f6b4914e 100644 --- a/aiohttp/test_utils.py +++ b/aiohttp/test_utils.py @@ -18,8 +18,15 @@ import asyncio import aiohttp + from aiohttp import server from aiohttp import helpers +from multidict import CIMultiDict +from unittest import mock + +from aiohttp.protocol import HttpVersion +from aiohttp.protocol import RawRequestMessage +from aiohttp.signals import Signal def run_briefly(loop): @@ -304,3 +311,69 @@ def _response(self, response, body=None, # keep-alive if response.keep_alive(): self._srv.keep_alive(True) + + +def _create_app_mock(): + app = mock.Mock() + app._debug = False + app.on_response_prepare = Signal(app) + return app + + +def _create_transport(sslcontext=None): + transport = mock.Mock() + + def get_extra_info(key): + if key == 'sslcontext': + return sslcontext + else: + return None + + transport.get_extra_info.side_effect = get_extra_info + return transport + + +_not_set = object() + + +def make_mocked_request(method, path, headers=CIMultiDict(), *, + version=HttpVersion(1, 1), closing=False, + app=None, + reader=_not_set, + writer=_not_set, + transport=_not_set, + payload=_not_set, + sslcontext=None, + secure_proxy_ssl_header=None): + + if version < HttpVersion(1, 1): + closing = True + message = RawRequestMessage(method, path, version, headers, + [(k.encode('utf-8'), v.encode('utf-8')) + for k, v in headers.items()], + closing, False) + if app is None: + app = _create_app_mock() + + if reader is _not_set: + reader = mock.Mock() + + if writer is _not_set: + writer = mock.Mock() + + if transport is _not_set: + transport = _create_transport(sslcontext) + + if payload is _not_set: + payload = mock.Mock() + + from .web import Request + req = Request(app, message, payload, + transport, reader, writer, + secure_proxy_ssl_header=secure_proxy_ssl_header) + + assert req.app is app + assert req.content is payload + assert req.transport is transport + + return req