diff options
author | Gabriel Falcão <gabrielfalcao@users.noreply.github.com> | 2021-05-14 01:52:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-14 01:52:40 +0200 |
commit | 424009e3e11ecab6976eb626c25731b1609dadbf (patch) | |
tree | aef8878170be4efa9ab76705af862bababa2f352 | |
parent | 6c37ff9db14caeb4099513a00f2adc5b0f2da1af (diff) | |
download | httpretty-424009e3e11ecab6976eb626c25731b1609dadbf.tar.gz |
httpx support (#421)
* introduce test to reproduce #414
* implement support to httpx library
closes #414
-rw-r--r-- | development.txt | 1 | ||||
-rw-r--r-- | httpretty/core.py | 25 | ||||
-rw-r--r-- | tests/functional/bugfixes/test_414_httpx.py | 12 | ||||
-rw-r--r-- | tests/functional/test_debug.py | 10 |
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) |