def maker(method, path, headers=CIMultiDict(), *, version=HttpVersion(1, 1), closing=False, sslcontext=None, secure_proxy_ssl_header=None): if version < HttpVersion(1, 1): closing = True app = mock.Mock() app._debug = False app.on_response_prepare = Signal(app) message = RawRequestMessage(method, path, version, headers, [(k.encode('utf-8'), v.encode('utf-8')) for k, v in headers.items()], closing, False) payload = mock.Mock() 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 writer = mock.Mock() reader = mock.Mock() 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
def make_request(self, method, path, headers=CIMultiDict(), *, version=HttpVersion(1, 1), closing=False, sslcontext=None, secure_proxy_ssl_header=None): if version < HttpVersion(1, 1): closing = True self.app = mock.Mock() message = RawRequestMessage(method, path, version, headers, closing, False) self.payload = mock.Mock() self.transport = mock.Mock() def get_extra_info(key): if key == 'sslcontext': return sslcontext else: return None self.transport.get_extra_info.side_effect = get_extra_info self.writer = mock.Mock() self.reader = mock.Mock() req = Request(self.app, message, self.payload, self.transport, self.reader, self.writer, secure_proxy_ssl_header=secure_proxy_ssl_header) return req
def test_ctor(make_request): req = make_request('GET', '/path/to?a=1&b=2') assert 'GET' == req.method assert HttpVersion(1, 1) == req.version assert req.host is None assert '/path/to?a=1&b=2' == req.path_qs assert '/path/to' == req.path assert 'a=1&b=2' == req.query_string assert CIMultiDict() == req.headers assert () == req.raw_headers get = req.GET assert MultiDict([('a', '1'), ('b', '2')]) == get # second call should return the same object assert get is req.GET assert req.keep_alive # just make sure that all lines of make_mocked_request covered headers = CIMultiDict(FOO='bar') payload = mock.Mock() protocol = mock.Mock() app = mock.Mock() req = make_request('GET', '/path/to?a=1&b=2', headers=headers, protocol=protocol, payload=payload, app=app) assert req.app is app assert req.content is payload assert req.protocol is protocol assert req.transport is protocol.transport assert req.headers == headers assert req.raw_headers == ((b'Foo', b'bar'),)
def go(): headers = {'Connection': 'keep-alive'} # should be ignored _, _, url = yield from self.create_server('GET', '/', handler) resp = yield from request('GET', url, loop=self.loop, headers=headers, version=HttpVersion(0, 9)) self.assertNotIn('CONNECTION', resp.headers) resp.close()
def test_http09_keep_alive_default(loop, test_client): @asyncio.coroutine def handler(request): yield from request.read() return web.Response() app = web.Application(loop=loop) app.router.add_get('/', handler) client = yield from test_client(app) headers = {'Connection': 'keep-alive'} # should be ignored resp = yield from client.get('/', version=HttpVersion(0, 9), headers=headers) assert 200 == resp.status assert resp.version == HttpVersion(0, 9) assert 'Connection' not in resp.headers
def test_keep_alive_http09(): headers = CIMultiDict(Connection='keep-alive') message = RawRequestMessage('GET', '/', HttpVersion(0, 9), headers, [(b'Connection', b'keep-alive')], False, False) req = request_from_message(message) resp = StreamResponse() yield from resp.prepare(req) assert not resp.keep_alive
def test_keep_alive_http09(self): headers = CIMultiDict(Connection='keep-alive') message = RawRequestMessage('GET', '/', HttpVersion(0, 9), headers, False, False) req = self.request_from_message(message) resp = StreamResponse() resp.start(req) self.assertFalse(resp.keep_alive)
def make_request(self, method, path): self.app = mock.Mock() message = RawRequestMessage(method, path, HttpVersion(1, 1), MultiDict(), False, False) self.payload = mock.Mock() self.transport = mock.Mock() self.writer = mock.Mock() req = Request(self.app, message, self.payload, self.transport, self.writer, 15) return req
def make_request(self, method, path, headers=MultiDict(), *, version=HttpVersion(1, 1), closing=False, keep_alive_timeout=15): self.app = mock.Mock() message = RawRequestMessage(method, path, version, headers, closing, False) self.payload = mock.Mock() self.transport = mock.Mock() self.writer = mock.Mock() req = Request(self.app, message, self.payload, self.transport, self.writer, keep_alive_timeout) return req
def test_ctor(self): req = self.make_request('GET', '/path/to?a=1&b=2') self.assertIs(self.app, req.app) self.assertEqual('GET', req.method) self.assertEqual(HttpVersion(1, 1), req.version) self.assertEqual(None, req.host) self.assertEqual('/path/to?a=1&b=2', req.path_qs) self.assertEqual('/path/to', req.path) self.assertEqual('a=1&b=2', req.query_string) self.assertEqual(MultiDict([('a', '1'), ('b', '2')]), req.GET) self.assertIs(self.payload, req.payload) self.assertTrue(req.keep_alive)
def make_request(self, method, path, headers=MultiDict(), *, version=HttpVersion(1, 1), closing=False): self.app = mock.Mock() message = RawRequestMessage(method, path, version, headers, closing, False) self.payload = mock.Mock() self.writer = mock.Mock() req = Request(self.app, message, self.payload, self.writer) return req
def setUp(self): self.meta = {} run_args = argparse.ArgumentParser() run_args.add_argument("--tanner") run_args.add_argument("--page-dir") self.main_page_path = generate_unique_path() os.makedirs(self.main_page_path) self.page_dir = self.main_page_path.rsplit('/')[-1] self.args = run_args.parse_args(['--page-dir', self.page_dir]) snare.snare_uuid = ( '9c10172f-7ce2-4fb4-b1c6-abc70141db56').encode('utf-8') self.handler = HttpRequestHandler(self.meta, self.args) self.headers = { 'Host': 'test_host', 'status': 200, 'Cookie': 'sess_uuid=prev_test_uuid; test_cookie=test' } self.request = aiohttp.protocol.RawRequestMessage( method='POST', path='/', version=HttpVersion(major=1, minor=1), headers=self.headers, raw_headers=None, should_close=None, compression=None) self.response_status = "test_status" self.expected_data = { 'method': 'POST', 'path': '/', 'headers': { 'Host': 'test_host', 'status': 200, 'Cookie': 'sess_uuid=prev_test_uuid; test_cookie=test' }, 'uuid': '9c10172f-7ce2-4fb4-b1c6-abc70141db56', 'peer': { 'ip': 'test_ip', 'port': 'test_port' }, 'status': 'test_status', 'cookies': { 'sess_uuid': 'prev_test_uuid', ' test_cookie': 'test' } } asyncio.BaseTransport = Mock() self.handler.transport = asyncio.BaseTransport() self.handler.transport.get_extra_info = Mock( return_value=['test_ip', 'test_port'])
def test_ctor(self): req = self.make_request('GET', '/path/to?a=1&b=2') self.assertIs(self.app, req.app) self.assertEqual('GET', req.method) self.assertEqual(HttpVersion(1, 1), req.version) self.assertEqual(None, req.host) self.assertEqual('/path/to?a=1&b=2', req.path_qs) self.assertEqual('/path/to', req.path) self.assertEqual('a=1&b=2', req.query_string) get = req.GET self.assertEqual(MultiDict([('a', '1'), ('b', '2')]), get) # second call should return the same object self.assertIs(get, req.GET) self.assertIs(self.payload, req.payload) self.assertIs(self.transport, req.transport) self.assertTrue(req.keep_alive)
def test_ctor(make_request, warning): req = make_request('GET', '/path/to?a=1&b=2') assert 'GET' == req.method assert HttpVersion(1, 1) == req.version assert req.host is None assert '/path/to?a=1&b=2' == req.path_qs assert '/path/to' == req.path assert 'a=1&b=2' == req.query_string get = req.GET assert MultiDict([('a', '1'), ('b', '2')]) == get # second call should return the same object assert get is req.GET with warning(DeprecationWarning): req.payload assert req.keep_alive
def setUp(self): self.meta = {} run_args = argparse.ArgumentParser() run_args.add_argument("--tanner") run_args.add_argument("--page-dir") self.main_page_path = generate_unique_path() os.makedirs(self.main_page_path) self.page_dir = self.main_page_path.rsplit('/')[-1] self.args = run_args.parse_args(['--page-dir', self.page_dir]) self.loop = asyncio.new_event_loop() self.handler = HttpRequestHandler(self.meta, self.args) self.handler.run_args.server_header = "test_server" self.handler.run_args.slurp_enabled = True self.data = { 'method': 'GET', 'path': '/', 'headers': { 'Host': 'test_host', 'status': 200 }, 'cookies': { 'sess_uuid': 'prev_test_uuid' } } self.content = '<html><body></body></html>' self.content_type = 'test_type' self.event_result = dict(response=dict(message=dict(detection={'type': 1}, sess_uuid="test_uuid"))) self.request = aiohttp.protocol.RawRequestMessage( method='POST', path='/', version=HttpVersion(major=1, minor=1), headers=self.data['headers'], raw_headers=None, should_close=None, compression=None) self.handler.create_data = Mock(return_value=self.data) self.handler.submit_data = AsyncMock(return_value=self.event_result) self.handler.submit_slurp = AsyncMock() self.payload = aiohttp.streams.EmptyStreamReader() aiohttp.Response.add_header = Mock() aiohttp.Response.write = Mock() aiohttp.Response.send_headers = Mock() aiohttp.Response.write_eof = AsyncMock() aiohttp.streams.EmptyStreamReader.read = AsyncMock(return_value=b'con1=test1&con2=test2') self.handler.parse_tanner_response = AsyncMock( return_value=(self.content, self.content_type, self.data['headers'], self.data['headers']['status']))
def test_non_keepalive_on_http10(make_request): req = make_request('GET', '/', version=HttpVersion(1, 0)) assert not req.keep_alive
def test_keep_alive_http09(): headers = CIMultiDict(Connection='keep-alive') req = make_request('GET', '/', version=HttpVersion(0, 9), headers=headers) resp = StreamResponse() yield from resp.prepare(req) assert not resp.keep_alive
def test_non_keepalive_on_http10(self): req = self.make_request('GET', '/', version=HttpVersion(1, 0)) self.assertFalse(req.keep_alive)