Skip to content

Creating SSLContext at import time makes mocking "impossible" #9510

Open
@mindflayer

Description

@mindflayer

Is your feature request related to a problem?

Hi there, I am the author of Mocket.

Mocket is probably the only tool around able to mock non-blocking sockets, and it's also listed under https://docs.aiohttp.org/en/stable/third_party.html.

With aiohttp==3.10.6 you moved the creation of SSLContext at import time.
This makes mocking HTTPS calls impossible if applying an agnostic approach which works for every client (mocking socket and ssl).
To fix that on my side I'd have to change Mocket for mocking aiohttp internals: _SSL_CONTEXT_VERIFIED and _SSL_CONTEXT_UNVERIFIED.

Describe the solution you'd like

Just an hint to understand my point. I leave to you folks the decision about the possible change.

Change _make_ssl_context (in connector.py) to make it fail (e.g. add 1 / 0 as its first line).

>>> import aiohttp
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/tmp/aiohttp/__init__.py", line 6, in <module>
    from .client import (
  File "/tmp/aiohttp/client.py", line 85, in <module>
    from .connector import (
  File "/tmp/aiohttp/connector.py", line 757, in <module>
    _SSL_CONTEXT_VERIFIED = _make_ssl_context(True)
                            ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/employee/repos/python-mocket/aiohttp/connector.py", line 737, in _make_ssl_context
    1 / 0
    ~~^~~
ZeroDivisionError: division by zero

Describe alternatives you've considered

I don't like the idea of stopping supporting aiohttp, but I don't want Mocket to adapt to clients' internals, because it's exactly the opposite approach (mocking socket/ssl VS mocking clients).

Related component

Client

Additional context

No response

Code of Conduct

  • I agree to follow the aio-libs Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions