From 4428c0714e3e100605f940eb6adee2e86788b4db Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 9 Dec 2023 10:14:26 -1000 Subject: [PATCH] feat: add more tests (#6) --- poetry.lock | 20 +++++++++++++++++++- pyproject.toml | 1 + src/aiohappyeyeballs/impl.py | 3 --- tests/test_impl.py | 23 +++++++++++++++++++++-- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index e980e34..04e6832 100644 --- a/poetry.lock +++ b/poetry.lock @@ -573,6 +573,24 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-asyncio" +version = "0.23.2" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-asyncio-0.23.2.tar.gz", hash = "sha256:c16052382554c7b22d48782ab3438d5b10f8cf7a4bdcae7f0f67f097d95beecc"}, + {file = "pytest_asyncio-0.23.2-py3-none-any.whl", hash = "sha256:ea9021364e32d58f0be43b91c6233fb8d2224ccef2398d6837559e587682808f"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + [[package]] name = "pytest-cov" version = "3.0.0" @@ -956,4 +974,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "bed14133e1b6bab9dbd04fbac961912c2d67b60da6884b0694bce0c3d0fa7dc2" +content-hash = "4b730397bb06aa14bfa985ad89f2a940ae93b3d18fcecbde1cdcfe219a761d06" diff --git a/pyproject.toml b/pyproject.toml index 9759ca4..22ad545 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ python = "^3.8" [tool.poetry.group.dev.dependencies] pytest = "^7.0" pytest-cov = "^3.0" +pytest-asyncio = "^0.23.2" [tool.poetry.group.docs] optional = true diff --git a/src/aiohappyeyeballs/impl.py b/src/aiohappyeyeballs/impl.py index ef98637..5d51b42 100644 --- a/src/aiohappyeyeballs/impl.py +++ b/src/aiohappyeyeballs/impl.py @@ -18,7 +18,6 @@ async def create_connection( local_addr_infos: Optional[Sequence[AddrInfoType]] = None, happy_eyeballs_delay: Optional[float] = None, interleave: Optional[int] = None, - all_errors: bool = False, loop: Optional[asyncio.AbstractEventLoop] = None, ) -> socket.socket: """ @@ -70,8 +69,6 @@ async def create_connection( if sock is None: all_exceptions = [exc for sub in exceptions for exc in sub] try: - if all_errors: - raise ExceptionGroup("create_connection failed", all_exceptions) if len(all_exceptions) == 1: raise all_exceptions[0] else: diff --git a/tests/test_impl.py b/tests/test_impl.py index eb067c3..368468e 100644 --- a/tests/test_impl.py +++ b/tests/test_impl.py @@ -1,3 +1,4 @@ +import asyncio import socket from test.test_asyncio import utils as test_utils from types import ModuleType @@ -7,8 +8,6 @@ from aiohappyeyeballs import create_connection -MOCK_ANY = mock.ANY - def mock_socket_module(): m_socket = mock.MagicMock(spec=socket) @@ -56,3 +55,23 @@ def _socket(*args, **kw): addr_info = [(2, 1, 6, "", ("107.6.106.82", 80))] with pytest.raises(OSError, match=errors[0]): await create_connection(addr_info) + + +@pytest.mark.asyncio +@patch_socket +async def test_create_connection_single_addr_success(m_socket: ModuleType) -> None: + mock_socket = mock.MagicMock( + family=socket.AF_INET, + type=socket.SOCK_STREAM, + proto=socket.IPPROTO_TCP, + fileno=mock.MagicMock(return_value=1), + ) + + def _socket(*args, **kw): + return mock_socket + + m_socket.socket = _socket # type: ignore + addr_info = [(2, 1, 6, "", ("107.6.106.82", 80))] + loop = asyncio.get_running_loop() + with mock.patch.object(loop, "sock_connect", return_value=None): + assert await create_connection(addr_info) == mock_socket