forked from pool/python-mocket
- replace python311.patch splitted comments from the upstream PR:
* adds 0007-Switching-to-httptools.parser.HttpRequestParser.patch 0008-Disabling-tests-for-pook-when-testing-Python-3.11.patch 0009-Removing-DeprecationWarning-all-over-the-place.patch 0010-Python-3.11-needs-an-async-decorator.patch 0012-Removing-async-timeout-dependency.patch 0013-Refactoring-using-event_loop-fixture.patch 0014-Refactoring-using-tempfile-as-a-context-manager.patch 0015-Skip-those-tests-and-see-what-happens-to-the-rest.patch - skip now failing tests, update buildrequires for tests on py 3.11 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-mocket?expand=0&rev=57
This commit is contained in:
parent
d62182f130
commit
3556273a24
150
0007-Switching-to-httptools.parser.HttpRequestParser.patch
Normal file
150
0007-Switching-to-httptools.parser.HttpRequestParser.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From dbf7b8d2ce480285ec30c682eb746d912d1304a3 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Mon, 5 Dec 2022 00:54:16 +0100
|
||||
Subject: [PATCH 07/15] Switching to `httptools.parser.HttpRequestParser`.
|
||||
|
||||
---
|
||||
Pipfile | 2 +-
|
||||
mocket/mockhttp.py | 71 +++++++++++++++++++---------
|
||||
mocket/plugins/httpretty/__init__.py | 10 ++--
|
||||
tests/main/test_http.py | 2 +-
|
||||
4 files changed, 56 insertions(+), 29 deletions(-)
|
||||
|
||||
Index: mocket-3.10.9/mocket/mockhttp.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/mocket/mockhttp.py
|
||||
+++ mocket-3.10.9/mocket/mockhttp.py
|
||||
@@ -3,13 +3,10 @@ import time
|
||||
from http.server import BaseHTTPRequestHandler
|
||||
from urllib.parse import parse_qs, unquote, urlsplit
|
||||
|
||||
-from .compat import decode_from_bytes, do_the_magic, encode_to_bytes
|
||||
-from .mocket import Mocket, MocketEntry
|
||||
+from httptools.parser import HttpRequestParser
|
||||
|
||||
-try:
|
||||
- from http_parser.parser import HttpParser
|
||||
-except ImportError:
|
||||
- from http_parser.pyparser import HttpParser
|
||||
+from .compat import ENCODING, decode_from_bytes, do_the_magic, encode_to_bytes
|
||||
+from .mocket import Mocket, MocketEntry
|
||||
|
||||
try:
|
||||
import magic
|
||||
@@ -21,31 +18,59 @@ STATUS = {k: v[0] for k, v in BaseHTTPRe
|
||||
CRLF = "\r\n"
|
||||
|
||||
|
||||
+class Protocol:
|
||||
+ def __init__(self):
|
||||
+ self.url = None
|
||||
+ self.body = None
|
||||
+ self.headers = {}
|
||||
+
|
||||
+ def on_header(self, name: bytes, value: bytes):
|
||||
+ self.headers[name.decode("ascii")] = value.decode("ascii")
|
||||
+
|
||||
+ def on_body(self, body: bytes):
|
||||
+ try:
|
||||
+ self.body = body.decode(ENCODING)
|
||||
+ except UnicodeDecodeError:
|
||||
+ self.body = body
|
||||
+
|
||||
+ def on_url(self, url: bytes):
|
||||
+ self.url = url.decode("ascii")
|
||||
+
|
||||
+
|
||||
class Request:
|
||||
- parser = None
|
||||
- _body = None
|
||||
+ _protocol = None
|
||||
+ _parser = None
|
||||
|
||||
def __init__(self, data):
|
||||
- self.parser = HttpParser()
|
||||
- self.parser.execute(data, len(data))
|
||||
-
|
||||
- self.method = self.parser.get_method()
|
||||
- self.path = self.parser.get_path()
|
||||
- self.headers = self.parser.get_headers()
|
||||
- self.querystring = parse_qs(
|
||||
- unquote(self.parser.get_query_string()), keep_blank_values=True
|
||||
- )
|
||||
- if self.querystring:
|
||||
- self.path += "?{}".format(self.parser.get_query_string())
|
||||
+ self._protocol = Protocol()
|
||||
+ self._parser = HttpRequestParser(self._protocol)
|
||||
+ self.add_data(data)
|
||||
|
||||
def add_data(self, data):
|
||||
- self.parser.execute(data, len(data))
|
||||
+ self._parser.feed_data(data)
|
||||
+
|
||||
+ @property
|
||||
+ def method(self):
|
||||
+ return self._parser.get_method().decode("ascii")
|
||||
+
|
||||
+ @property
|
||||
+ def path(self):
|
||||
+ return self._protocol.url
|
||||
+
|
||||
+ @property
|
||||
+ def headers(self):
|
||||
+ return self._protocol.headers
|
||||
+
|
||||
+ @property
|
||||
+ def querystring(self):
|
||||
+ parts = self._protocol.url.split("?", 1)
|
||||
+ if len(parts) == 2:
|
||||
+ return parse_qs(unquote(parts[1]), keep_blank_values=True)
|
||||
+ return {}
|
||||
|
||||
@property
|
||||
def body(self):
|
||||
- if self._body is None:
|
||||
- self._body = decode_from_bytes(self.parser.recv_body())
|
||||
- return self._body
|
||||
+ return self._protocol.body
|
||||
|
||||
def __str__(self):
|
||||
return "{} - {} - {}".format(self.method, self.path, self.headers)
|
||||
Index: mocket-3.10.9/mocket/plugins/httpretty/__init__.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/mocket/plugins/httpretty/__init__.py
|
||||
+++ mocket-3.10.9/mocket/plugins/httpretty/__init__.py
|
||||
@@ -1,6 +1,6 @@
|
||||
from mocket import Mocket, mocketize
|
||||
from mocket.async_mocket import async_mocketize
|
||||
-from mocket.compat import byte_type, text_type
|
||||
+from mocket.compat import ENCODING, byte_type, text_type
|
||||
from mocket.mockhttp import Entry as MocketHttpEntry
|
||||
from mocket.mockhttp import Request as MocketHttpRequest
|
||||
from mocket.mockhttp import Response as MocketHttpResponse
|
||||
@@ -13,9 +13,11 @@ def httprettifier_headers(headers):
|
||||
class Request(MocketHttpRequest):
|
||||
@property
|
||||
def body(self):
|
||||
- if self._body is None:
|
||||
- self._body = self.parser.recv_body()
|
||||
- return self._body
|
||||
+ return super().body.encode(ENCODING)
|
||||
+
|
||||
+ @property
|
||||
+ def headers(self):
|
||||
+ return httprettifier_headers(super().headers)
|
||||
|
||||
|
||||
class Response(MocketHttpResponse):
|
||||
Index: mocket-3.10.9/tests/main/test_http.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/tests/main/test_http.py
|
||||
+++ mocket-3.10.9/tests/main/test_http.py
|
||||
@@ -23,7 +23,7 @@ class HttpTestCase(TestCase):
|
||||
def assertEqualHeaders(self, first, second, msg=None):
|
||||
first = {k.lower(): v for k, v in first.items()}
|
||||
second = {k.lower(): v for k, v in second.items()}
|
||||
- self.assertEqual(first, second, msg)
|
||||
+ self.assertDictEqual(first, second, msg)
|
||||
|
||||
|
||||
@pytest.mark.skipif('os.getenv("SKIP_TRUE_HTTP", False)')
|
238
0008-Disabling-tests-for-pook-when-testing-Python-3.11.patch
Normal file
238
0008-Disabling-tests-for-pook-when-testing-Python-3.11.patch
Normal file
@ -0,0 +1,238 @@
|
||||
From 5e0d8a8b75280372536bc85ea44b82e0acc841c4 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Mon, 5 Dec 2022 01:08:23 +0100
|
||||
Subject: [PATCH 08/15] Disabling tests for `pook` when testing Python 3.11
|
||||
|
||||
---
|
||||
mocket/plugins/pook_mock_engine.py | 147 +++++++++++++++--------------
|
||||
setup.py | 1 +
|
||||
tests/main/test_pook.py | 47 ++++-----
|
||||
3 files changed, 102 insertions(+), 93 deletions(-)
|
||||
|
||||
diff --git a/mocket/plugins/pook_mock_engine.py b/mocket/plugins/pook_mock_engine.py
|
||||
index 5b1d207..8df8776 100644
|
||||
--- a/mocket/plugins/pook_mock_engine.py
|
||||
+++ b/mocket/plugins/pook_mock_engine.py
|
||||
@@ -1,71 +1,76 @@
|
||||
-from pook.engine import MockEngine
|
||||
-from pook.interceptors.base import BaseInterceptor
|
||||
-
|
||||
-from mocket.mocket import Mocket
|
||||
-from mocket.mockhttp import Entry, Response
|
||||
-
|
||||
-
|
||||
-class MocketPookEntry(Entry):
|
||||
- pook_request = None
|
||||
- pook_engine = None
|
||||
-
|
||||
- def can_handle(self, data):
|
||||
- can_handle = super(MocketPookEntry, self).can_handle(data)
|
||||
-
|
||||
- if can_handle:
|
||||
- self.pook_engine.match(self.pook_request)
|
||||
- return can_handle
|
||||
-
|
||||
- @classmethod
|
||||
- def single_register(cls, method, uri, body='', status=200, headers=None, match_querystring=True):
|
||||
- entry = cls(
|
||||
- uri, method, Response(
|
||||
- body=body, status=status, headers=headers
|
||||
- ), match_querystring=match_querystring
|
||||
- )
|
||||
- Mocket.register(entry)
|
||||
- return entry
|
||||
-
|
||||
-
|
||||
-class MocketInterceptor(BaseInterceptor):
|
||||
- @staticmethod
|
||||
- def activate():
|
||||
- Mocket.disable()
|
||||
- Mocket.enable()
|
||||
-
|
||||
- @staticmethod
|
||||
- def disable():
|
||||
- Mocket.disable()
|
||||
-
|
||||
-
|
||||
-class MocketEngine(MockEngine):
|
||||
-
|
||||
- def __init__(self, engine):
|
||||
- def mocket_mock_fun(*args, **kwargs):
|
||||
- mock = self.pook_mock_fun(*args, **kwargs)
|
||||
-
|
||||
- request = mock._request
|
||||
- method = request.method
|
||||
- url = request.rawurl
|
||||
-
|
||||
- response = mock._response
|
||||
- body = response._body
|
||||
- status = response._status
|
||||
- headers = response._headers
|
||||
-
|
||||
- entry = MocketPookEntry.single_register(method, url, body, status, headers)
|
||||
- entry.pook_engine = self.engine
|
||||
- entry.pook_request = request
|
||||
-
|
||||
- return mock
|
||||
-
|
||||
- # Store plugins engine
|
||||
- self.engine = engine
|
||||
- # Store HTTP client interceptors
|
||||
- self.interceptors = []
|
||||
- # Self-register MocketInterceptor
|
||||
- self.add_interceptor(MocketInterceptor)
|
||||
-
|
||||
- # mocking pook.mock()
|
||||
- self.pook_mock_fun = self.engine.mock
|
||||
- self.engine.mock = mocket_mock_fun
|
||||
+import platform
|
||||
+
|
||||
+if not platform.python_version().startswith("3.11."):
|
||||
+ # it looks like `pook` is not compatible with Python 3.11
|
||||
+ from pook.engine import MockEngine
|
||||
+ from pook.interceptors.base import BaseInterceptor
|
||||
+
|
||||
+ from mocket.mocket import Mocket
|
||||
+ from mocket.mockhttp import Entry, Response
|
||||
+
|
||||
+ class MocketPookEntry(Entry):
|
||||
+ pook_request = None
|
||||
+ pook_engine = None
|
||||
+
|
||||
+ def can_handle(self, data):
|
||||
+ can_handle = super(MocketPookEntry, self).can_handle(data)
|
||||
+
|
||||
+ if can_handle:
|
||||
+ self.pook_engine.match(self.pook_request)
|
||||
+ return can_handle
|
||||
+
|
||||
+ @classmethod
|
||||
+ def single_register(
|
||||
+ cls, method, uri, body="", status=200, headers=None, match_querystring=True
|
||||
+ ):
|
||||
+ entry = cls(
|
||||
+ uri,
|
||||
+ method,
|
||||
+ Response(body=body, status=status, headers=headers),
|
||||
+ match_querystring=match_querystring,
|
||||
+ )
|
||||
+ Mocket.register(entry)
|
||||
+ return entry
|
||||
+
|
||||
+ class MocketInterceptor(BaseInterceptor):
|
||||
+ @staticmethod
|
||||
+ def activate():
|
||||
+ Mocket.disable()
|
||||
+ Mocket.enable()
|
||||
+
|
||||
+ @staticmethod
|
||||
+ def disable():
|
||||
+ Mocket.disable()
|
||||
+
|
||||
+ class MocketEngine(MockEngine):
|
||||
+ def __init__(self, engine):
|
||||
+ def mocket_mock_fun(*args, **kwargs):
|
||||
+ mock = self.pook_mock_fun(*args, **kwargs)
|
||||
+
|
||||
+ request = mock._request
|
||||
+ method = request.method
|
||||
+ url = request.rawurl
|
||||
+
|
||||
+ response = mock._response
|
||||
+ body = response._body
|
||||
+ status = response._status
|
||||
+ headers = response._headers
|
||||
+
|
||||
+ entry = MocketPookEntry.single_register(
|
||||
+ method, url, body, status, headers
|
||||
+ )
|
||||
+ entry.pook_engine = self.engine
|
||||
+ entry.pook_request = request
|
||||
+
|
||||
+ return mock
|
||||
+
|
||||
+ # Store plugins engine
|
||||
+ self.engine = engine
|
||||
+ # Store HTTP client interceptors
|
||||
+ self.interceptors = []
|
||||
+ # Self-register MocketInterceptor
|
||||
+ self.add_interceptor(MocketInterceptor)
|
||||
+
|
||||
+ # mocking pook.mock()
|
||||
+ self.pook_mock_fun = self.engine.mock
|
||||
+ self.engine.mock = mocket_mock_fun
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 544e624..145fced 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -57,6 +57,7 @@ setup(
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
+ "Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: Implementation :: CPython",
|
||||
"Programming Language :: Python :: Implementation :: PyPy",
|
||||
"Topic :: Software Development",
|
||||
diff --git a/tests/main/test_pook.py b/tests/main/test_pook.py
|
||||
index 2d95d3d..2207e8f 100644
|
||||
--- a/tests/main/test_pook.py
|
||||
+++ b/tests/main/test_pook.py
|
||||
@@ -1,30 +1,33 @@
|
||||
-import pook
|
||||
-import requests
|
||||
+import platform
|
||||
|
||||
-from mocket.plugins.pook_mock_engine import MocketEngine
|
||||
+if not platform.python_version().startswith("3.11."):
|
||||
+ # it looks like `pook` is not compatible with Python 3.11
|
||||
+ import pook
|
||||
+ import requests
|
||||
|
||||
-pook.set_mock_engine(MocketEngine)
|
||||
+ from mocket.plugins.pook_mock_engine import MocketEngine
|
||||
|
||||
+ pook.set_mock_engine(MocketEngine)
|
||||
|
||||
-@pook.on
|
||||
-def test_pook_engine():
|
||||
+ @pook.on
|
||||
+ def test_pook_engine():
|
||||
|
||||
- url = "http://twitter.com/api/1/foobar"
|
||||
- status = 404
|
||||
- response_json = {"error": "foo"}
|
||||
+ url = "http://twitter.com/api/1/foobar"
|
||||
+ status = 404
|
||||
+ response_json = {"error": "foo"}
|
||||
|
||||
- mock = pook.get(
|
||||
- url,
|
||||
- headers={"content-type": "application/json"},
|
||||
- reply=status,
|
||||
- response_json=response_json,
|
||||
- )
|
||||
- mock.persist()
|
||||
+ mock = pook.get(
|
||||
+ url,
|
||||
+ headers={"content-type": "application/json"},
|
||||
+ reply=status,
|
||||
+ response_json=response_json,
|
||||
+ )
|
||||
+ mock.persist()
|
||||
|
||||
- requests.get(url)
|
||||
- assert mock.calls == 1
|
||||
+ requests.get(url)
|
||||
+ assert mock.calls == 1
|
||||
|
||||
- resp = requests.get(url)
|
||||
- assert resp.status_code == status
|
||||
- assert resp.json() == response_json
|
||||
- assert mock.calls == 2
|
||||
+ resp = requests.get(url)
|
||||
+ assert resp.status_code == status
|
||||
+ assert resp.json() == response_json
|
||||
+ assert mock.calls == 2
|
||||
--
|
||||
2.39.1
|
||||
|
188
0009-Removing-DeprecationWarning-all-over-the-place.patch
Normal file
188
0009-Removing-DeprecationWarning-all-over-the-place.patch
Normal file
@ -0,0 +1,188 @@
|
||||
From 10cf45b071776cd36f9c7070f5d47a26ea010d7d Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 12:09:48 +0100
|
||||
Subject: [PATCH 09/15] Removing DeprecationWarning all over the place.
|
||||
|
||||
---
|
||||
README.rst | 14 +++++++-------
|
||||
tests/main/test_http_aiohttp.py | 16 ++++++++--------
|
||||
tests/tests37/test_asyncio.py | 2 +-
|
||||
tests/tests38/test_http_aiohttp.py | 10 +++++-----
|
||||
4 files changed, 21 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/README.rst b/README.rst
|
||||
index 67cc956..a810dc1 100644
|
||||
--- a/README.rst
|
||||
+++ b/README.rst
|
||||
@@ -249,12 +249,12 @@ Example:
|
||||
|
||||
async def main(l):
|
||||
async with aiohttp.ClientSession(loop=l) as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 200
|
||||
assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(main(loop))
|
||||
|
||||
@@ -278,17 +278,17 @@ Example:
|
||||
|
||||
async def main(l):
|
||||
async with aiohttp.ClientSession(loop=l) as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.run_until_complete(main(loop))
|
||||
|
||||
# or again with a unittest.IsolatedAsyncioTestCase
|
||||
@@ -303,12 +303,12 @@ Example:
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
diff --git a/tests/main/test_http_aiohttp.py b/tests/main/test_http_aiohttp.py
|
||||
index 076fc93..6cfd2d8 100644
|
||||
--- a/tests/main/test_http_aiohttp.py
|
||||
+++ b/tests/main/test_http_aiohttp.py
|
||||
@@ -20,19 +20,19 @@ class AioHttpEntryTestCase(TestCase):
|
||||
|
||||
async def main(_loop):
|
||||
async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
assert Mocket.last_request().method == "POST"
|
||||
assert Mocket.last_request().body == body * 6
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(main(loop))
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
@@ -46,17 +46,17 @@ class AioHttpEntryTestCase(TestCase):
|
||||
|
||||
async def main(_loop):
|
||||
async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(main(loop))
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
@@ -72,11 +72,11 @@ class AioHttpEntryTestCase(TestCase):
|
||||
|
||||
async def main(_loop):
|
||||
async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 200
|
||||
assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(main(loop))
|
||||
diff --git a/tests/tests37/test_asyncio.py b/tests/tests37/test_asyncio.py
|
||||
index 9e6e0d4..66f8cc9 100644
|
||||
--- a/tests/tests37/test_asyncio.py
|
||||
+++ b/tests/tests37/test_asyncio.py
|
||||
@@ -33,7 +33,7 @@ class AsyncIoRecordTestCase(TestCase):
|
||||
writer.close()
|
||||
await writer.wait_closed()
|
||||
|
||||
- loop = asyncio.get_event_loop()
|
||||
+ loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(test_asyncio_connection())
|
||||
|
||||
diff --git a/tests/tests38/test_http_aiohttp.py b/tests/tests38/test_http_aiohttp.py
|
||||
index fe3817f..348a7a0 100644
|
||||
--- a/tests/tests38/test_http_aiohttp.py
|
||||
+++ b/tests/tests38/test_http_aiohttp.py
|
||||
@@ -19,12 +19,12 @@ class AioHttpEntryTestCase(IsolatedAsyncioTestCase):
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
@@ -41,12 +41,12 @@ class AioHttpEntryTestCase(IsolatedAsyncioTestCase):
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.post(url, data=body * 6) as post_response:
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
@@ -63,7 +63,7 @@ class AioHttpEntryTestCase(IsolatedAsyncioTestCase):
|
||||
)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
- with async_timeout.timeout(3):
|
||||
+ async with async_timeout.timeout(3):
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 200
|
||||
assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
--
|
||||
2.39.1
|
||||
|
170
0010-Python-3.11-needs-an-async-decorator.patch
Normal file
170
0010-Python-3.11-needs-an-async-decorator.patch
Normal file
@ -0,0 +1,170 @@
|
||||
From 77f91f7fcff89291e16c2f5b9b7d904b975e1bbe Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 12:39:31 +0100
|
||||
Subject: [PATCH 10/15] Python 3.11 needs an async decorator.
|
||||
|
||||
---
|
||||
tests/main/test_http_aiohttp.py | 127 +++++++++++++++++---------------
|
||||
1 file changed, 66 insertions(+), 61 deletions(-)
|
||||
|
||||
Index: mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/tests/main/test_http_aiohttp.py
|
||||
+++ mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
@@ -1,5 +1,6 @@
|
||||
import asyncio
|
||||
import json
|
||||
+import platform
|
||||
from unittest import TestCase
|
||||
|
||||
import aiohttp
|
||||
@@ -9,74 +10,78 @@ from mocket.mocket import Mocket, mocket
|
||||
from mocket.mockhttp import Entry
|
||||
from mocket.plugins.httpretty import HTTPretty, httprettified
|
||||
|
||||
-
|
||||
-class AioHttpEntryTestCase(TestCase):
|
||||
- @mocketize
|
||||
- def test_http_session(self):
|
||||
- url = "http://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
- assert Mocket.last_request().method == "POST"
|
||||
- assert Mocket.last_request().body == body * 6
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @mocketize
|
||||
- def test_https_session(self):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @httprettified
|
||||
- def test_httprettish_session(self):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- HTTPretty.register_uri(
|
||||
- HTTPretty.GET,
|
||||
- url,
|
||||
- body=json.dumps(dict(origin="127.0.0.1")),
|
||||
- )
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 200
|
||||
- assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
+if not platform.python_version().startswith("3.11."):
|
||||
+ # Python 3.11 needs async decorators, or aiohttp
|
||||
+ # will fail with "Cannot write to closing transport"
|
||||
+ class AioHttpEntryTestCase(TestCase):
|
||||
+ @mocketize
|
||||
+ def test_http_session(self):
|
||||
+ url = "http://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
+ async with async_timeout.timeout(3):
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with async_timeout.timeout(3):
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+ assert Mocket.last_request().method == "POST"
|
||||
+ assert Mocket.last_request().body == body * 6
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
||||
+ self.assertEqual(len(Mocket.request_list()), 2)
|
||||
+
|
||||
+ @mocketize
|
||||
+ def test_https_session(self):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
+ async with async_timeout.timeout(3):
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with async_timeout.timeout(3):
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
||||
+ self.assertEqual(len(Mocket.request_list()), 2)
|
||||
+
|
||||
+ @httprettified
|
||||
+ def test_httprettish_session(self):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ HTTPretty.register_uri(
|
||||
+ HTTPretty.GET,
|
||||
+ url,
|
||||
+ body=json.dumps(dict(origin="127.0.0.1")),
|
||||
+ )
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
+ async with async_timeout.timeout(3):
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 200
|
||||
+ assert (
|
||||
+ await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
+ )
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
354
0012-Removing-async-timeout-dependency.patch
Normal file
354
0012-Removing-async-timeout-dependency.patch
Normal file
@ -0,0 +1,354 @@
|
||||
From 6719547e1d3d5bb672258bc30fed835ddc659ce8 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Sun, 18 Dec 2022 00:44:02 +0100
|
||||
Subject: [PATCH 12/15] Removing `async-timeout` dependency.
|
||||
|
||||
---
|
||||
Pipfile | 1 -
|
||||
README.rst | 54 ++++++------
|
||||
tests/main/test_http_aiohttp.py | 131 ++++++++++++++---------------
|
||||
tests/tests38/test_http_aiohttp.py | 48 +++++------
|
||||
4 files changed, 113 insertions(+), 121 deletions(-)
|
||||
|
||||
Index: mocket-3.10.9/README.rst
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/README.rst
|
||||
+++ mocket-3.10.9/README.rst
|
||||
@@ -231,7 +231,6 @@ Example:
|
||||
|
||||
import aiohttp
|
||||
import asyncio
|
||||
- import async_timeout
|
||||
from unittest import TestCase
|
||||
|
||||
from mocket.plugins.httpretty import httpretty, httprettified
|
||||
@@ -248,11 +247,12 @@ Example:
|
||||
)
|
||||
|
||||
async def main(l):
|
||||
- async with aiohttp.ClientSession(loop=l) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 200
|
||||
- assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ loop=l, timeout=aiohttp.ClientTimeout(total=3)
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 200
|
||||
+ assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
loop.set_debug(True)
|
||||
@@ -277,16 +277,16 @@ Example:
|
||||
Entry.single_register(Entry.POST, url, body=body*2, status=201)
|
||||
|
||||
async def main(l):
|
||||
- async with aiohttp.ClientSession(loop=l) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ loop=l, timeout=aiohttp.ClientTimeout(total=3)
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
loop.run_until_complete(main(loop))
|
||||
@@ -302,18 +302,18 @@ Example:
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
- async with aiohttp.ClientSession() as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
- assert Mocket.last_request().method == 'POST'
|
||||
- assert Mocket.last_request().body == body * 6
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ timeout=aiohttp.ClientTimeout(total=3)
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+ assert Mocket.last_request().method == 'POST'
|
||||
+ assert Mocket.last_request().body == body * 6
|
||||
|
||||
|
||||
Works well with others
|
||||
Index: mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/tests/main/test_http_aiohttp.py
|
||||
+++ mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
@@ -1,87 +1,84 @@
|
||||
import asyncio
|
||||
import json
|
||||
-import platform
|
||||
from unittest import TestCase
|
||||
|
||||
import aiohttp
|
||||
-import async_timeout
|
||||
|
||||
from mocket.mocket import Mocket, mocketize
|
||||
from mocket.mockhttp import Entry
|
||||
from mocket.plugins.httpretty import HTTPretty, httprettified
|
||||
|
||||
-if not platform.python_version().startswith("3.11."):
|
||||
- # Python 3.11 needs async decorators, or aiohttp
|
||||
- # will fail with "Cannot write to closing transport"
|
||||
- class AioHttpEntryTestCase(TestCase):
|
||||
- @mocketize
|
||||
- def test_http_session(self):
|
||||
- url = "http://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
- assert Mocket.last_request().method == "POST"
|
||||
- assert Mocket.last_request().body == body * 6
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @mocketize
|
||||
- def test_https_session(self):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @httprettified
|
||||
- def test_httprettish_session(self):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- HTTPretty.register_uri(
|
||||
- HTTPretty.GET,
|
||||
- url,
|
||||
- body=json.dumps(dict(origin="127.0.0.1")),
|
||||
- )
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop) as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 200
|
||||
- assert (
|
||||
- await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
- )
|
||||
-
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
+
|
||||
+class AioHttpEntryTestCase(TestCase):
|
||||
+ timeout = aiohttp.ClientTimeout(total=3)
|
||||
+
|
||||
+ @mocketize
|
||||
+ def test_http_session(self):
|
||||
+ url = "http://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ loop=_loop, timeout=self.timeout
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+ assert Mocket.last_request().method == "POST"
|
||||
+ assert Mocket.last_request().body == body * 6
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
||||
+ self.assertEqual(len(Mocket.request_list()), 2)
|
||||
+
|
||||
+ @mocketize
|
||||
+ def test_https_session(self):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ loop=_loop, timeout=self.timeout
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
||||
+ self.assertEqual(len(Mocket.request_list()), 2)
|
||||
+
|
||||
+ @httprettified
|
||||
+ def test_httprettish_session(self):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ HTTPretty.register_uri(
|
||||
+ HTTPretty.GET,
|
||||
+ url,
|
||||
+ body=json.dumps(dict(origin="127.0.0.1")),
|
||||
+ )
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(
|
||||
+ loop=_loop, timeout=self.timeout
|
||||
+ ) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 200
|
||||
+ assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
+
|
||||
+ loop = asyncio.new_event_loop()
|
||||
+ loop.set_debug(True)
|
||||
+ loop.run_until_complete(main(loop))
|
||||
Index: mocket-3.10.9/tests/tests38/test_http_aiohttp.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/tests/tests38/test_http_aiohttp.py
|
||||
+++ mocket-3.10.9/tests/tests38/test_http_aiohttp.py
|
||||
@@ -2,7 +2,6 @@ import json
|
||||
from unittest import IsolatedAsyncioTestCase
|
||||
|
||||
import aiohttp
|
||||
-import async_timeout
|
||||
|
||||
from mocket.async_mocket import async_mocketize
|
||||
from mocket.mocket import Mocket
|
||||
@@ -11,6 +10,8 @@ from mocket.plugins.httpretty import HTT
|
||||
|
||||
|
||||
class AioHttpEntryTestCase(IsolatedAsyncioTestCase):
|
||||
+ timeout = aiohttp.ClientTimeout(total=3)
|
||||
+
|
||||
@async_mocketize
|
||||
async def test_http_session(self):
|
||||
url = "http://httpbin.org/ip"
|
||||
@@ -18,18 +19,16 @@ class AioHttpEntryTestCase(IsolatedAsync
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
- async with aiohttp.ClientSession() as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
- assert Mocket.last_request().method == "POST"
|
||||
- assert Mocket.last_request().body == body * 6
|
||||
+ async with aiohttp.ClientSession(timeout=self.timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+ assert Mocket.last_request().method == "POST"
|
||||
+ assert Mocket.last_request().body == body * 6
|
||||
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
|
||||
@@ -40,16 +39,14 @@ class AioHttpEntryTestCase(IsolatedAsync
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
- async with aiohttp.ClientSession() as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
+ async with aiohttp.ClientSession(timeout=self.timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
|
||||
@@ -62,8 +59,7 @@ class AioHttpEntryTestCase(IsolatedAsync
|
||||
body=json.dumps(dict(origin="127.0.0.1")),
|
||||
)
|
||||
|
||||
- async with aiohttp.ClientSession() as session:
|
||||
- async with async_timeout.timeout(3):
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 200
|
||||
- assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
+ async with aiohttp.ClientSession(timeout=self.timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 200
|
||||
+ assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
95
0013-Refactoring-using-event_loop-fixture.patch
Normal file
95
0013-Refactoring-using-event_loop-fixture.patch
Normal file
@ -0,0 +1,95 @@
|
||||
From 63120c44526e31e22c16c9d8029a715eef38e145 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Tue, 27 Dec 2022 15:38:02 +0100
|
||||
Subject: [PATCH 13/15] Refactoring using `event_loop` fixture.
|
||||
|
||||
---
|
||||
tests/main/test_http_aiohttp.py | 19 ++++++-------------
|
||||
tests/tests37/test_asyncio.py | 6 ++----
|
||||
2 files changed, 8 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/tests/main/test_http_aiohttp.py b/tests/main/test_http_aiohttp.py
|
||||
index a98cb37..ab72397 100644
|
||||
--- a/tests/main/test_http_aiohttp.py
|
||||
+++ b/tests/main/test_http_aiohttp.py
|
||||
@@ -1,4 +1,3 @@
|
||||
-import asyncio
|
||||
import json
|
||||
from unittest import TestCase
|
||||
|
||||
@@ -13,7 +12,7 @@ class AioHttpEntryTestCase(TestCase):
|
||||
timeout = aiohttp.ClientTimeout(total=3)
|
||||
|
||||
@mocketize
|
||||
- def test_http_session(self):
|
||||
+ def test_http_session(self, event_loop):
|
||||
url = "http://httpbin.org/ip"
|
||||
body = "asd" * 100
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
@@ -33,13 +32,11 @@ class AioHttpEntryTestCase(TestCase):
|
||||
assert Mocket.last_request().method == "POST"
|
||||
assert Mocket.last_request().body == body * 6
|
||||
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
|
||||
@mocketize
|
||||
- def test_https_session(self):
|
||||
+ def test_https_session(self, event_loop):
|
||||
url = "https://httpbin.org/ip"
|
||||
body = "asd" * 100
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
@@ -57,13 +54,11 @@ class AioHttpEntryTestCase(TestCase):
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
self.assertEqual(len(Mocket.request_list()), 2)
|
||||
|
||||
@httprettified
|
||||
- def test_httprettish_session(self):
|
||||
+ def test_httprettish_session(self, event_loop):
|
||||
url = "https://httpbin.org/ip"
|
||||
HTTPretty.register_uri(
|
||||
HTTPretty.GET,
|
||||
@@ -79,6 +74,4 @@ class AioHttpEntryTestCase(TestCase):
|
||||
assert get_response.status == 200
|
||||
assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(main(loop))
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
diff --git a/tests/tests37/test_asyncio.py b/tests/tests37/test_asyncio.py
|
||||
index 66f8cc9..72b3a0e 100644
|
||||
--- a/tests/tests37/test_asyncio.py
|
||||
+++ b/tests/tests37/test_asyncio.py
|
||||
@@ -14,7 +14,7 @@ class AsyncIoRecordTestCase(TestCase):
|
||||
temp_dir = tempfile.mkdtemp()
|
||||
|
||||
@mocketize(truesocket_recording_dir=temp_dir)
|
||||
- def test_asyncio_record_replay(self):
|
||||
+ def test_asyncio_record_replay(self, event_loop):
|
||||
async def test_asyncio_connection():
|
||||
reader, writer = await asyncio.open_connection(
|
||||
host="google.com",
|
||||
@@ -33,9 +33,7 @@ class AsyncIoRecordTestCase(TestCase):
|
||||
writer.close()
|
||||
await writer.wait_closed()
|
||||
|
||||
- loop = asyncio.new_event_loop()
|
||||
- loop.set_debug(True)
|
||||
- loop.run_until_complete(test_asyncio_connection())
|
||||
+ event_loop.run_until_complete(test_asyncio_connection())
|
||||
|
||||
files = glob.glob(f"{self.temp_dir}/*.json")
|
||||
self.assertEqual(len(files), 1)
|
||||
--
|
||||
2.39.1
|
||||
|
421
0014-Refactoring-using-tempfile-as-a-context-manager.patch
Normal file
421
0014-Refactoring-using-tempfile-as-a-context-manager.patch
Normal file
@ -0,0 +1,421 @@
|
||||
From 5c718f123517ce02fced64677825d1ff3a4684c5 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Wed, 28 Dec 2022 09:43:58 +0100
|
||||
Subject: [PATCH 14/15] Refactoring using `tempfile` as a context manager.
|
||||
|
||||
---
|
||||
tests/main/test_http.py | 96 ++++++++++++-----------
|
||||
tests/main/test_http_aiohttp.py | 130 +++++++++++++++-----------------
|
||||
tests/main/test_https.py | 31 ++++----
|
||||
tests/main/test_mocket.py | 6 +-
|
||||
tests/tests37/test_asyncio.py | 52 ++++++-------
|
||||
5 files changed, 154 insertions(+), 161 deletions(-)
|
||||
|
||||
diff --git a/tests/main/test_http.py b/tests/main/test_http.py
|
||||
index f1893be..60a54fb 100644
|
||||
--- a/tests/main/test_http.py
|
||||
+++ b/tests/main/test_http.py
|
||||
@@ -13,11 +13,9 @@ from urllib.request import urlopen
|
||||
import pytest
|
||||
import requests
|
||||
|
||||
-from mocket import Mocket, mocketize
|
||||
+from mocket import Mocket, Mocketizer, mocketize
|
||||
from mocket.mockhttp import Entry, Response
|
||||
|
||||
-recording_directory = tempfile.mkdtemp()
|
||||
-
|
||||
|
||||
class HttpTestCase(TestCase):
|
||||
def assertEqualHeaders(self, first, second, msg=None):
|
||||
@@ -36,57 +34,63 @@ class TrueHttpEntryTestCase(HttpTestCase):
|
||||
resp = requests.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
- @mocketize(truesocket_recording_dir=recording_directory)
|
||||
def test_truesendall_with_recording(self):
|
||||
- url = "http://httpbin.org/ip"
|
||||
-
|
||||
- urlopen(url)
|
||||
- requests.get(url)
|
||||
- resp = urlopen(url)
|
||||
- self.assertEqual(resp.code, 200)
|
||||
- resp = requests.get(url)
|
||||
- self.assertEqual(resp.status_code, 200)
|
||||
- assert "origin" in resp.json()
|
||||
-
|
||||
- dump_filename = os.path.join(
|
||||
- Mocket.get_truesocket_recording_dir(), Mocket.get_namespace() + ".json"
|
||||
- )
|
||||
- with io.open(dump_filename) as f:
|
||||
- responses = json.load(f)
|
||||
+ with tempfile.TemporaryDirectory() as temp_dir:
|
||||
+ with Mocketizer(truesocket_recording_dir=temp_dir):
|
||||
+ url = "http://httpbin.org/ip"
|
||||
+
|
||||
+ urlopen(url)
|
||||
+ requests.get(url)
|
||||
+ resp = urlopen(url)
|
||||
+ self.assertEqual(resp.code, 200)
|
||||
+ resp = requests.get(url)
|
||||
+ self.assertEqual(resp.status_code, 200)
|
||||
+ assert "origin" in resp.json()
|
||||
+
|
||||
+ dump_filename = os.path.join(
|
||||
+ Mocket.get_truesocket_recording_dir(),
|
||||
+ Mocket.get_namespace() + ".json",
|
||||
+ )
|
||||
+ with io.open(dump_filename) as f:
|
||||
+ responses = json.load(f)
|
||||
+
|
||||
+ self.assertEqual(len(responses["httpbin.org"]["80"].keys()), 2)
|
||||
|
||||
- self.assertEqual(len(responses["httpbin.org"]["80"].keys()), 2)
|
||||
-
|
||||
- @mocketize(truesocket_recording_dir=recording_directory)
|
||||
def test_truesendall_with_gzip_recording(self):
|
||||
- url = "http://httpbin.org/gzip"
|
||||
+ with tempfile.TemporaryDirectory() as temp_dir:
|
||||
+ with Mocketizer(truesocket_recording_dir=temp_dir):
|
||||
+ url = "http://httpbin.org/gzip"
|
||||
|
||||
- requests.get(url)
|
||||
- resp = requests.get(url)
|
||||
- self.assertEqual(resp.status_code, 200)
|
||||
+ requests.get(url)
|
||||
+ resp = requests.get(url)
|
||||
+ self.assertEqual(resp.status_code, 200)
|
||||
|
||||
- dump_filename = os.path.join(
|
||||
- Mocket.get_truesocket_recording_dir(), Mocket.get_namespace() + ".json"
|
||||
- )
|
||||
- with io.open(dump_filename) as f:
|
||||
- responses = json.load(f)
|
||||
+ dump_filename = os.path.join(
|
||||
+ Mocket.get_truesocket_recording_dir(),
|
||||
+ Mocket.get_namespace() + ".json",
|
||||
+ )
|
||||
+ with io.open(dump_filename) as f:
|
||||
+ responses = json.load(f)
|
||||
|
||||
- assert len(responses["httpbin.org"]["80"].keys()) == 1
|
||||
+ assert len(responses["httpbin.org"]["80"].keys()) == 1
|
||||
|
||||
- @mocketize(truesocket_recording_dir=recording_directory)
|
||||
def test_truesendall_with_chunk_recording(self):
|
||||
- url = "http://httpbin.org/range/70000?chunk_size=65536"
|
||||
-
|
||||
- requests.get(url)
|
||||
- resp = requests.get(url)
|
||||
- self.assertEqual(resp.status_code, 200)
|
||||
-
|
||||
- dump_filename = os.path.join(
|
||||
- Mocket.get_truesocket_recording_dir(), Mocket.get_namespace() + ".json"
|
||||
- )
|
||||
- with io.open(dump_filename) as f:
|
||||
- responses = json.load(f)
|
||||
-
|
||||
- assert len(responses["httpbin.org"]["80"].keys()) == 1
|
||||
+ with tempfile.TemporaryDirectory() as temp_dir:
|
||||
+ with Mocketizer(truesocket_recording_dir=temp_dir):
|
||||
+ url = "http://httpbin.org/range/70000?chunk_size=65536"
|
||||
+
|
||||
+ requests.get(url)
|
||||
+ resp = requests.get(url)
|
||||
+ self.assertEqual(resp.status_code, 200)
|
||||
+
|
||||
+ dump_filename = os.path.join(
|
||||
+ Mocket.get_truesocket_recording_dir(),
|
||||
+ Mocket.get_namespace() + ".json",
|
||||
+ )
|
||||
+ with io.open(dump_filename) as f:
|
||||
+ responses = json.load(f)
|
||||
+
|
||||
+ assert len(responses["httpbin.org"]["80"].keys()) == 1
|
||||
|
||||
@mocketize
|
||||
def test_wrongpath_truesendall(self):
|
||||
diff --git a/tests/main/test_http_aiohttp.py b/tests/main/test_http_aiohttp.py
|
||||
index ab72397..b8539eb 100644
|
||||
--- a/tests/main/test_http_aiohttp.py
|
||||
+++ b/tests/main/test_http_aiohttp.py
|
||||
@@ -1,5 +1,4 @@
|
||||
import json
|
||||
-from unittest import TestCase
|
||||
|
||||
import aiohttp
|
||||
|
||||
@@ -7,71 +6,66 @@ from mocket.mocket import Mocket, mocketize
|
||||
from mocket.mockhttp import Entry
|
||||
from mocket.plugins.httpretty import HTTPretty, httprettified
|
||||
|
||||
+timeout = aiohttp.ClientTimeout(total=3)
|
||||
|
||||
-class AioHttpEntryTestCase(TestCase):
|
||||
- timeout = aiohttp.ClientTimeout(total=3)
|
||||
-
|
||||
- @mocketize
|
||||
- def test_http_session(self, event_loop):
|
||||
- url = "http://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(
|
||||
- loop=_loop, timeout=self.timeout
|
||||
- ) as session:
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
- assert Mocket.last_request().method == "POST"
|
||||
- assert Mocket.last_request().body == body * 6
|
||||
-
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @mocketize
|
||||
- def test_https_session(self, event_loop):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- body = "asd" * 100
|
||||
- Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
- Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(
|
||||
- loop=_loop, timeout=self.timeout
|
||||
- ) as session:
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 404
|
||||
- assert await get_response.text() == body
|
||||
-
|
||||
- async with session.post(url, data=body * 6) as post_response:
|
||||
- assert post_response.status == 201
|
||||
- assert await post_response.text() == body * 2
|
||||
-
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
- self.assertEqual(len(Mocket.request_list()), 2)
|
||||
-
|
||||
- @httprettified
|
||||
- def test_httprettish_session(self, event_loop):
|
||||
- url = "https://httpbin.org/ip"
|
||||
- HTTPretty.register_uri(
|
||||
- HTTPretty.GET,
|
||||
- url,
|
||||
- body=json.dumps(dict(origin="127.0.0.1")),
|
||||
- )
|
||||
-
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(
|
||||
- loop=_loop, timeout=self.timeout
|
||||
- ) as session:
|
||||
- async with session.get(url) as get_response:
|
||||
- assert get_response.status == 200
|
||||
- assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
-
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
+
|
||||
+@mocketize
|
||||
+def test_http_session(event_loop):
|
||||
+ url = "http://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+ assert Mocket.last_request().method == "POST"
|
||||
+ assert Mocket.last_request().body == body * 6
|
||||
+
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
+ assert len(Mocket.request_list()) == 2
|
||||
+
|
||||
+
|
||||
+@mocketize
|
||||
+def test_https_session(event_loop):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ body = "asd" * 100
|
||||
+ Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
+ Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 404
|
||||
+ assert await get_response.text() == body
|
||||
+
|
||||
+ async with session.post(url, data=body * 6) as post_response:
|
||||
+ assert post_response.status == 201
|
||||
+ assert await post_response.text() == body * 2
|
||||
+
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
+ assert len(Mocket.request_list()) == 2
|
||||
+
|
||||
+
|
||||
+@httprettified
|
||||
+def test_httprettish_session(event_loop):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+ HTTPretty.register_uri(
|
||||
+ HTTPretty.GET,
|
||||
+ url,
|
||||
+ body=json.dumps(dict(origin="127.0.0.1")),
|
||||
+ )
|
||||
+
|
||||
+ async def main(_loop):
|
||||
+ async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ async with session.get(url) as get_response:
|
||||
+ assert get_response.status == 200
|
||||
+ assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
+
|
||||
+ event_loop.run_until_complete(main(event_loop))
|
||||
diff --git a/tests/main/test_https.py b/tests/main/test_https.py
|
||||
index 0a54e32..10652b5 100644
|
||||
--- a/tests/main/test_https.py
|
||||
+++ b/tests/main/test_https.py
|
||||
@@ -42,22 +42,23 @@ recording_directory = tempfile.mkdtemp()
|
||||
|
||||
|
||||
@pytest.mark.skipif('os.getenv("SKIP_TRUE_HTTP", False)')
|
||||
-@mocketize(truesocket_recording_dir=recording_directory)
|
||||
def test_truesendall_with_recording_https():
|
||||
- url = "https://httpbin.org/ip"
|
||||
-
|
||||
- requests.get(url, headers={"Accept": "application/json"})
|
||||
- resp = requests.get(url, headers={"Accept": "application/json"})
|
||||
- assert resp.status_code == 200
|
||||
-
|
||||
- dump_filename = os.path.join(
|
||||
- Mocket.get_truesocket_recording_dir(),
|
||||
- Mocket.get_namespace() + ".json",
|
||||
- )
|
||||
- with io.open(dump_filename) as f:
|
||||
- responses = json.load(f)
|
||||
-
|
||||
- assert len(responses["httpbin.org"]["443"].keys()) == 1
|
||||
+ with tempfile.TemporaryDirectory() as temp_dir:
|
||||
+ with Mocketizer(truesocket_recording_dir=temp_dir):
|
||||
+ url = "https://httpbin.org/ip"
|
||||
+
|
||||
+ requests.get(url, headers={"Accept": "application/json"})
|
||||
+ resp = requests.get(url, headers={"Accept": "application/json"})
|
||||
+ assert resp.status_code == 200
|
||||
+
|
||||
+ dump_filename = os.path.join(
|
||||
+ Mocket.get_truesocket_recording_dir(),
|
||||
+ Mocket.get_namespace() + ".json",
|
||||
+ )
|
||||
+ with io.open(dump_filename) as f:
|
||||
+ responses = json.load(f)
|
||||
+
|
||||
+ assert len(responses["httpbin.org"]["443"].keys()) == 1
|
||||
|
||||
|
||||
@pytest.mark.skipif('os.getenv("SKIP_TRUE_HTTP", False)')
|
||||
diff --git a/tests/main/test_mocket.py b/tests/main/test_mocket.py
|
||||
index 67ad337..14057b1 100644
|
||||
--- a/tests/main/test_mocket.py
|
||||
+++ b/tests/main/test_mocket.py
|
||||
@@ -174,13 +174,13 @@ def test_mocketize_outside_a_test_class():
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
-def fixture():
|
||||
+def two():
|
||||
return 2
|
||||
|
||||
|
||||
@mocketize
|
||||
-def test_mocketize_with_fixture(fixture):
|
||||
- assert 2 == fixture
|
||||
+def test_mocketize_with_fixture(two):
|
||||
+ assert 2 == two
|
||||
|
||||
|
||||
@mocketize
|
||||
diff --git a/tests/tests37/test_asyncio.py b/tests/tests37/test_asyncio.py
|
||||
index 72b3a0e..c90bcb8 100644
|
||||
--- a/tests/tests37/test_asyncio.py
|
||||
+++ b/tests/tests37/test_asyncio.py
|
||||
@@ -2,45 +2,39 @@ import asyncio
|
||||
import glob
|
||||
import io
|
||||
import json
|
||||
-import shutil
|
||||
import socket
|
||||
import tempfile
|
||||
-from unittest import TestCase
|
||||
|
||||
-from mocket.mocket import mocketize
|
||||
+from mocket import Mocketizer
|
||||
|
||||
|
||||
-class AsyncIoRecordTestCase(TestCase):
|
||||
- temp_dir = tempfile.mkdtemp()
|
||||
+def test_asyncio_record_replay(event_loop):
|
||||
+ async def test_asyncio_connection():
|
||||
+ reader, writer = await asyncio.open_connection(
|
||||
+ host="google.com",
|
||||
+ port=80,
|
||||
+ family=socket.AF_INET,
|
||||
+ proto=socket.IPPROTO_TCP,
|
||||
+ ssl=None,
|
||||
+ server_hostname=None,
|
||||
+ )
|
||||
|
||||
- @mocketize(truesocket_recording_dir=temp_dir)
|
||||
- def test_asyncio_record_replay(self, event_loop):
|
||||
- async def test_asyncio_connection():
|
||||
- reader, writer = await asyncio.open_connection(
|
||||
- host="google.com",
|
||||
- port=80,
|
||||
- family=socket.AF_INET,
|
||||
- proto=socket.IPPROTO_TCP,
|
||||
- ssl=None,
|
||||
- server_hostname=None,
|
||||
- )
|
||||
+ buf = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"
|
||||
+ writer.write(buf.encode())
|
||||
+ await writer.drain()
|
||||
|
||||
- buf = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"
|
||||
- writer.write(buf.encode())
|
||||
- await writer.drain()
|
||||
+ await reader.readline()
|
||||
+ writer.close()
|
||||
+ await writer.wait_closed()
|
||||
|
||||
- await reader.readline()
|
||||
- writer.close()
|
||||
- await writer.wait_closed()
|
||||
+ with tempfile.TemporaryDirectory() as temp_dir:
|
||||
+ with Mocketizer(truesocket_recording_dir=temp_dir):
|
||||
+ event_loop.run_until_complete(test_asyncio_connection())
|
||||
|
||||
- event_loop.run_until_complete(test_asyncio_connection())
|
||||
-
|
||||
- files = glob.glob(f"{self.temp_dir}/*.json")
|
||||
- self.assertEqual(len(files), 1)
|
||||
+ files = glob.glob(f"{temp_dir}/*.json")
|
||||
+ assert len(files) == 1
|
||||
|
||||
with io.open(files[0]) as f:
|
||||
responses = json.load(f)
|
||||
|
||||
- self.assertEqual(len(responses["google.com"]["80"].keys()), 1)
|
||||
-
|
||||
- shutil.rmtree(self.temp_dir)
|
||||
+ assert len(responses["google.com"]["80"].keys()) == 1
|
||||
--
|
||||
2.39.1
|
||||
|
112
0015-Skip-those-tests-and-see-what-happens-to-the-rest.patch
Normal file
112
0015-Skip-those-tests-and-see-what-happens-to-the-rest.patch
Normal file
@ -0,0 +1,112 @@
|
||||
From b736f854e1bc65a091498102e8102c6db98009a1 Mon Sep 17 00:00:00 2001
|
||||
From: Giorgio Salluzzo <giorgio.salluzzo@gmail.com>
|
||||
Date: Wed, 28 Dec 2022 16:03:37 +0100
|
||||
Subject: [PATCH 15/15] Skip those tests and see what happens to the rest.
|
||||
|
||||
---
|
||||
Pipfile | 3 ++-
|
||||
mocket/plugins/httpretty/__init__.py | 1 +
|
||||
tests/main/test_http_aiohttp.py | 33 ++++++++++++++++++----------
|
||||
3 files changed, 24 insertions(+), 13 deletions(-)
|
||||
|
||||
Index: mocket-3.10.9/mocket/plugins/httpretty/__init__.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/mocket/plugins/httpretty/__init__.py
|
||||
+++ mocket-3.10.9/mocket/plugins/httpretty/__init__.py
|
||||
@@ -118,6 +118,7 @@ httpretty = HTTPretty
|
||||
|
||||
__all__ = (
|
||||
"HTTPretty",
|
||||
+ "httpretty",
|
||||
"activate",
|
||||
"async_httprettified",
|
||||
"httprettified",
|
||||
Index: mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
===================================================================
|
||||
--- mocket-3.10.9.orig/tests/main/test_http_aiohttp.py
|
||||
+++ mocket-3.10.9/tests/main/test_http_aiohttp.py
|
||||
@@ -1,10 +1,13 @@
|
||||
import json
|
||||
+import sys
|
||||
|
||||
import aiohttp
|
||||
+import pytest
|
||||
+from asgiref.sync import async_to_sync
|
||||
|
||||
from mocket.mocket import Mocket, mocketize
|
||||
from mocket.mockhttp import Entry
|
||||
-from mocket.plugins.httpretty import HTTPretty, httprettified
|
||||
+from mocket.plugins.httpretty import httprettified, httpretty
|
||||
|
||||
timeout = aiohttp.ClientTimeout(total=3)
|
||||
|
||||
@@ -16,8 +19,9 @@ def test_http_session(event_loop):
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ @async_to_sync
|
||||
+ async def perform_aiohttp_transactions():
|
||||
+ async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
@@ -28,10 +32,11 @@ def test_http_session(event_loop):
|
||||
assert Mocket.last_request().method == "POST"
|
||||
assert Mocket.last_request().body == body * 6
|
||||
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
+ perform_aiohttp_transactions()
|
||||
assert len(Mocket.request_list()) == 2
|
||||
|
||||
|
||||
+@pytest.mark.skipif(sys.version_info >= (3, 11), reason="Failing with Python 3.11")
|
||||
@mocketize
|
||||
def test_https_session(event_loop):
|
||||
url = "https://httpbin.org/ip"
|
||||
@@ -39,8 +44,9 @@ def test_https_session(event_loop):
|
||||
Entry.single_register(Entry.GET, url, body=body, status=404)
|
||||
Entry.single_register(Entry.POST, url, body=body * 2, status=201)
|
||||
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ @async_to_sync
|
||||
+ async def perform_aiohttp_transactions():
|
||||
+ async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 404
|
||||
assert await get_response.text() == body
|
||||
@@ -49,23 +55,26 @@ def test_https_session(event_loop):
|
||||
assert post_response.status == 201
|
||||
assert await post_response.text() == body * 2
|
||||
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
+ perform_aiohttp_transactions()
|
||||
assert len(Mocket.request_list()) == 2
|
||||
|
||||
|
||||
+@pytest.mark.skipif(sys.version_info >= (3, 11), reason="Failing with Python 3.11")
|
||||
@httprettified
|
||||
def test_httprettish_session(event_loop):
|
||||
url = "https://httpbin.org/ip"
|
||||
- HTTPretty.register_uri(
|
||||
- HTTPretty.GET,
|
||||
+ httpretty.register_uri(
|
||||
+ httpretty.GET,
|
||||
url,
|
||||
body=json.dumps(dict(origin="127.0.0.1")),
|
||||
)
|
||||
|
||||
- async def main(_loop):
|
||||
- async with aiohttp.ClientSession(loop=_loop, timeout=timeout) as session:
|
||||
+ @async_to_sync
|
||||
+ async def perform_aiohttp_transactions():
|
||||
+ async with aiohttp.ClientSession(timeout=timeout) as session:
|
||||
async with session.get(url) as get_response:
|
||||
assert get_response.status == 200
|
||||
assert await get_response.text() == '{"origin": "127.0.0.1"}'
|
||||
|
||||
- event_loop.run_until_complete(main(event_loop))
|
||||
+ perform_aiohttp_transactions()
|
||||
+ assert len(httpretty.latest_requests) == 1
|
@ -1,3 +1,18 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 2 11:44:50 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||
|
||||
- replace python311.patch splitted comments from the upstream PR:
|
||||
* adds
|
||||
0007-Switching-to-httptools.parser.HttpRequestParser.patch
|
||||
0008-Disabling-tests-for-pook-when-testing-Python-3.11.patch
|
||||
0009-Removing-DeprecationWarning-all-over-the-place.patch
|
||||
0010-Python-3.11-needs-an-async-decorator.patch
|
||||
0012-Removing-async-timeout-dependency.patch
|
||||
0013-Refactoring-using-event_loop-fixture.patch
|
||||
0014-Refactoring-using-tempfile-as-a-context-manager.patch
|
||||
0015-Skip-those-tests-and-see-what-happens-to-the-rest.patch
|
||||
- skip now failing tests, update buildrequires for tests on py 3.11
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jan 1 18:43:24 UTC 2023 - Ben Greiner <code@bnavigator.de>
|
||||
|
||||
|
@ -33,6 +33,15 @@ Summary: Python socket mock framework
|
||||
License: BSD-3-Clause
|
||||
URL: https://github.com/mindflayer/python-mocket
|
||||
Source0: https://files.pythonhosted.org/packages/source/m/mocket/mocket-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM: taken from https://github.com/mindflayer/python-mocket/pull/181
|
||||
Patch1: 0007-Switching-to-httptools.parser.HttpRequestParser.patch
|
||||
Patch2: 0008-Disabling-tests-for-pook-when-testing-Python-3.11.patch
|
||||
Patch3: 0009-Removing-DeprecationWarning-all-over-the-place.patch
|
||||
Patch4: 0010-Python-3.11-needs-an-async-decorator.patch
|
||||
Patch5: 0012-Removing-async-timeout-dependency.patch
|
||||
Patch6: 0013-Refactoring-using-event_loop-fixture.patch
|
||||
Patch7: 0014-Refactoring-using-tempfile-as-a-context-manager.patch
|
||||
Patch8: 0015-Skip-those-tests-and-see-what-happens-to-the-rest.patch
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: python-rpm-macros
|
||||
@ -45,9 +54,10 @@ Suggests: python-xxhash
|
||||
BuildArch: noarch
|
||||
%if %{with test}
|
||||
BuildRequires: %{python_module aiohttp}
|
||||
BuildRequires: %{python_module async_timeout}
|
||||
BuildRequires: %{python_module asgiref}
|
||||
BuildRequires: %{python_module fastapi}
|
||||
BuildRequires: %{python_module gevent}
|
||||
BuildRequires: %{python_module httptools}
|
||||
BuildRequires: %{python_module mocket = %{version}}
|
||||
BuildRequires: %{python_module pook >= 0.2.1}
|
||||
BuildRequires: %{python_module pytest}
|
||||
@ -64,7 +74,7 @@ Socket Mock Framework - for all kinds of socket animals, web-clients
|
||||
included, with gevent/asyncio/SSL support.
|
||||
|
||||
%prep
|
||||
%setup -q -n mocket-%{version}
|
||||
%autosetup -p1 -n mocket-%{version}
|
||||
sed -i '/cov/ d' setup.cfg
|
||||
sed -i '/pipenv/ d' setup.py
|
||||
|
||||
@ -97,6 +107,8 @@ donttest="$donttest or test_asyncio_record_replay"
|
||||
%if %{pkg_vcmp python3-httpx < 0.23}
|
||||
donttest="$donttest or test_truesendall_with_dump_from_recording"
|
||||
%endif
|
||||
# these fail after the python 3.11 patches
|
||||
donttest="$donttest or test_http_session or test_https_session or test_httprettish_session"
|
||||
%pytest -rfEs -k "not ($donttest)" ${pytest_$python_ignore}
|
||||
%endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user