summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Falcão <gabrielfalcao@users.noreply.github.com>2021-05-14 01:52:40 +0200
committerGitHub <noreply@github.com>2021-05-14 01:52:40 +0200
commit424009e3e11ecab6976eb626c25731b1609dadbf (patch)
treeaef8878170be4efa9ab76705af862bababa2f352
parent6c37ff9db14caeb4099513a00f2adc5b0f2da1af (diff)
downloadhttpretty-424009e3e11ecab6976eb626c25731b1609dadbf.tar.gz
httpx support (#421)
* introduce test to reproduce #414 * implement support to httpx library closes #414
-rw-r--r--development.txt1
-rw-r--r--httpretty/core.py25
-rw-r--r--tests/functional/bugfixes/test_414_httpx.py12
-rw-r--r--tests/functional/test_debug.py10
4 files changed, 32 insertions, 16 deletions
diff --git a/development.txt b/development.txt
index acbde2f..cc2e35a 100644
--- a/development.txt
+++ b/development.txt
@@ -5,6 +5,7 @@ eventlet==0.25.1 # issue #254
flake8>=3.7.9
freezegun>=0.3.15
httplib2>=0.17.0
+httpx>=0.18.1
ipdb>=0.13.2
mccabe>=0.6.1
mock>=3.0.5;python_version<"3.3"
diff --git a/httpretty/core.py b/httpretty/core.py
index f76aebe..82313bc 100644
--- a/httpretty/core.py
+++ b/httpretty/core.py
@@ -421,6 +421,8 @@ class fakesock(object):
"""drop-in replacement for :py:class:`socket.socket`
"""
_entry = None
+ _read_buf = None
+
debuglevel = 0
_sent_data = []
is_secure = False
@@ -720,7 +722,9 @@ class fakesock(object):
matcher, entries = httpretty.match_uriinfo(info)
if not entries:
+ logger.debug('no entries matching {}'.format(request))
self._entry = None
+ self._read_buf = None
self.real_sendall(data, request=request)
return
@@ -739,8 +743,9 @@ class fakesock(object):
if self.truesock:
self.truesock.settimeout(new_timeout)
- def send(self, *args, **kwargs):
- return self.forward_and_trace('send', *args, **kwargs)
+ def send(self, data, *args, **kwargs):
+ self.sendall(data, *args, **kwargs)
+ return len(data)
def sendto(self, *args, **kwargs):
return self.forward_and_trace('sendto', *args, **kwargs)
@@ -754,12 +759,20 @@ class fakesock(object):
def recvfrom(self, *args, **kwargs):
return self.forward_and_trace('recvfrom', *args, **kwargs)
- def recv(self, buffersize=None, *args, **kwargs):
- buffersize = buffersize or self._bufsize
- return self.forward_and_trace('recv', buffersize, *args, **kwargs)
+ def recv(self, buffersize=0, *args, **kwargs):
+ if not self._read_buf:
+ self._read_buf = io.BytesIO()
+
+ if self._entry:
+ self._entry.fill_filekind(self._read_buf)
+
+ if not self._read_buf:
+ raise UnmockedError('socket cannot recv(): {!r}'.format(self))
+
+ return self._read_buf.read(buffersize)
def __getattr__(self, name):
- if name in ('getsockopt', ) and not self.truesock:
+ if name in ('getsockopt', 'selected_alpn_protocol') and not self.truesock:
self.truesock = self.create_socket()
elif httpretty.allow_net_connect and not self.truesock:
# can't call self.connect_truesock() here because we
diff --git a/tests/functional/bugfixes/test_414_httpx.py b/tests/functional/bugfixes/test_414_httpx.py
new file mode 100644
index 0000000..6360ddc
--- /dev/null
+++ b/tests/functional/bugfixes/test_414_httpx.py
@@ -0,0 +1,12 @@
+import httpretty
+import httpx
+from sure import expect
+
+@httpretty.activate(verbose=True, allow_net_connect=False)
+def test_httpx():
+ httpretty.register_uri(httpretty.GET, "https://blog.falcao.it/",
+ body="Posts")
+
+ response = httpx.get('https://blog.falcao.it')
+
+ expect(response.text).to.equal("Posts")
diff --git a/tests/functional/test_debug.py b/tests/functional/test_debug.py
index 86de965..ff00840 100644
--- a/tests/functional/test_debug.py
+++ b/tests/functional/test_debug.py
@@ -58,16 +58,6 @@ def test_httpretty_debugs_socket_sendto(context):
)
-@httprettified
-@scenario(create_socket)
-def test_httpretty_debugs_socket_recv(context):
- "HTTPretty should forward_and_trace socket.recv"
-
- expect(context.sock.recv).when.called.to.throw(
- "not connected"
- )
-
-
@skip('not currently supported')
@httprettified
@scenario(create_socket)