Comments (10)
@yeraydiazdiaz Final remaining line here is in write_no_block
. We use that interface in the HTTP/2 case in order to strictly write the HTTP/2 connection initialization, without allowing for any race conditions of "we've hit an async/await, so the task switched out under us, and wrote some different data first".
Because uvicorn doesn't currently have HTTP/2 support we're only ever testing out against a mock HTTP/2 server implementation, and we're never hitting that line.
I'm just going to pragma: nocover
it for now as unreachable in test.
from httpx.
The merged PRs and #64 is as much as I've been able to increase the coverage, the report on that branch is as follows:
+ venv/bin/coverage report -m
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------
httpcore/__init__.py 10 0 100%
httpcore/client.py 132 0 100%
httpcore/concurrency.py 90 3 97% 79, 93-94
httpcore/config.py 88 0 100%
httpcore/decoders.py 63 0 100%
httpcore/dispatch/__init__.py 0 0 100%
httpcore/dispatch/connection.py 58 0 100%
httpcore/dispatch/connection_pool.py 96 3 97% 78-80
httpcore/dispatch/http11.py 73 3 96% 69, 100-103
httpcore/dispatch/http2.py 91 0 100%
httpcore/exceptions.py 17 0 100%
httpcore/interfaces.py 36 0 100%
httpcore/models.py 482 0 100%
httpcore/status_codes.py 2 0 100%
httpcore/utils.py 22 0 100%
tests/client/test_async_client.py 72 0 100%
tests/client/test_client.py 86 0 100%
tests/client/test_redirects.py 158 0 100%
tests/conftest.py 49 0 100%
tests/dispatch/__init__.py 0 0 100%
tests/dispatch/test_connection_pools.py 68 0 100%
tests/dispatch/test_connections.py 20 0 100%
tests/dispatch/test_http2.py 32 0 100%
tests/dispatch/utils.py 58 0 100%
tests/models/test_headers.py 94 0 100%
tests/models/test_queryparams.py 26 0 100%
tests/models/test_requests.py 61 0 100%
tests/models/test_responses.py 113 0 100%
tests/models/test_url.py 23 0 100%
tests/test_config.py 56 0 100%
tests/test_decoders.py 59 0 100%
tests/test_timeouts.py 19 0 100%
-----------------------------------------------------------------------
TOTAL 2254 9 99%
httpcore/dispatch/http11.py 73 3 96% 69, 100-103
- Line 69 covers receiving an informational response which I haven't been able to reproduce from our server fixture.
- Lines 100-103: Close with H11 protocol error, I've tried manually reproducing an error but it would require reaching into the connection pool and manually closing the connection simply to trigger a
pass
, I'd say it's a candidate forpragma: nocover
httpcore/concurrency.py 90 3 97% 79, 93-94
- Line 79: Covers the
Writer.write_no_block
method, which I'm not sure what it does or how to reproduce it. - Lines 93-94: Handles an exception on
stream_writer.drain
to raise a WriteTimeout, I don't know how to recreate its conditions in a test.
- Line 79: Covers the
httpcore/dispatch/connection_pool.py 96 3 97% 78-80
- Lines 78-80: are the body of
ConnectionStore.__getitem__
which I'm not clear on what it does as it seems to return the key if it's in the store or None otherwise, which seems like a membership test?
- Lines 78-80: are the body of
Any pointers?
from httpx.
Stonkin great work here!
Sending an Expect : 100-continue
header ought to trigger Uvicorn to issue a 100 informational response. That’d knock off one more!
from httpx.
I think closing a steaming response without reading it should trigger the h11 protocol error case, but I’m not 100% without reviewing it more thoroughly.
from httpx.
For the WriteTimeout, try sending a large request in test_timeouts.py
, to the slow_response endpoint, using a tiny write timeout.
from httpx.
Awesome, thanks for the tips! I'll try those out (in separate PRs) today 👍
from httpx.
Rad.
from httpx.
Thanks so much for your help on this!
from httpx.
No worries, glad we could get it done 🎉
from httpx.
🤩
from httpx.
Related Issues (20)
- add more type checking in params/form-data HOT 12
- Requests for new public APIs HOT 9
- Install httpx without pulling anyio, trio and socks HOT 1
- Pressure test httpx Slower and slower HOT 4
- 502 Error When Using Global Proxy
- Shipping broken. "Could not find module httpx" even when installed.
- Authentification docs reference non-existing class HOT 2
- `httpx.AsyncClient` has much worse performance than `aiohttp.ClientSession` with concurrent requests HOT 22
- HTTPX and Celery \ GEvent Issue HOT 3
- Not support "no_proxy" including value of ipv6 prefix style
- http2协议发送请求会发送两次,第一次数据,第二次空包End Stream,如何将第二次空包的End Stream放到第一次包中
- Support IDNA2003 HOT 2
- How to implement failed retry
- BasicAuth vs BasicAuthentication HOT 2
- Httpx connection Nonetype error
- Change default encoding to utf-8 in `normalize_header_key` and `normalize_header_value` functions HOT 4
- httpx能支持get或者post请求的时候传入代理,而不是httpx.AsyncClient初始化的时候传入吗
- Random httpx.ConnectError
- How to force enable HTTP/2.0 HOT 5
- Module 'httpx' has no attribute 'BasicAuthentication' - Documentation is not up-to-date
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from httpx.