diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b7a1e1f..4edd2b6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: exclude: helm/ args: [ --unsafe ] - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: "v0.11.2" + rev: "v0.11.11" hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] diff --git a/README.rst b/README.rst index b693dd7..e19a3d0 100644 --- a/README.rst +++ b/README.rst @@ -14,6 +14,12 @@ mocket /mɔˈkɛt/ .. image:: https://img.shields.io/pypi/dm/mocket :target: https://pypistats.org/packages/mocket +.. image:: mocket.png + :height: 256px + :width: 256px + :alt: Mocket logo + :align: center + A socket mock framework ------------------------- @@ -101,7 +107,7 @@ As second step, we create an `example.py` file as the following one: import json from mocket import mocketize - from mocket.mockhttp import Entry + from mocket.mocks.mockhttp import Entry import requests import pytest @@ -294,7 +300,7 @@ Example: import pytest from mocket import async_mocketize - from mocket.mockhttp import Entry + from mocket.mocks.mockhttp import Entry from mocket.plugins.aiohttp_connector import MocketTCPConnector diff --git a/mocket.png b/mocket.png new file mode 100644 index 0000000..08498b4 Binary files /dev/null and b/mocket.png differ diff --git a/mocket/__init__.py b/mocket/__init__.py index e4bc008..5c3e7f0 100644 --- a/mocket/__init__.py +++ b/mocket/__init__.py @@ -31,4 +31,4 @@ "FakeSSLContext", ) -__version__ = "3.13.6" +__version__ = "3.13.7" diff --git a/mocket/socket.py b/mocket/socket.py index f8f77da..496c912 100644 --- a/mocket/socket.py +++ b/mocket/socket.py @@ -170,6 +170,11 @@ def makefile(self, mode: str = "r", bufsize: int = -1) -> MocketSocketIO: def get_entry(self, data: bytes) -> MocketEntry | None: return Mocket.get_entry(self._host, self._port, data) + def sendto(self, data: ReadableBuffer, address: Address | None = None) -> int: + self.connect(address) + self.sendall(data) + return len(data) + def sendall(self, data, entry=None, *args, **kwargs): if entry is None: entry = self.get_entry(data) @@ -204,6 +209,11 @@ def recv_into( buffer[: len(data)] = data return len(data) + def recvfrom( + self, buffersize: int, flags: int | None = None + ) -> tuple[bytes, _RetAddress]: + return self.recv(buffersize, flags), self._address + def recv(self, buffersize: int, flags: int | None = None) -> bytes: r_fd, _ = Mocket.get_pair((self._host, self._port)) if r_fd: diff --git a/pyproject.toml b/pyproject.toml index 5349ad6..66b394b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ dependencies = [ dynamic = ["version"] [project.urls] -Homepage = "https://github.com/mindflayer/python-mocket" +Homepage = "https://pypi.org/project/mocket" Repository = "https://github.com/mindflayer/python-mocket" [project.optional-dependencies] diff --git a/tests/test_socket.py b/tests/test_socket.py index 112a908..4c362f5 100644 --- a/tests/test_socket.py +++ b/tests/test_socket.py @@ -2,6 +2,7 @@ import pytest +from mocket import Mocket, MocketEntry, mocketize from mocket.socket import MocketSocket @@ -11,3 +12,21 @@ def test_blocking_socket(blocking): sock.connect(("locahost", 1234)) sock.setblocking(blocking) assert sock.getblocking() is blocking + + +@mocketize +def test_udp_socket(): + host = "127.0.0.1" + port = 9999 + request_data = b"ping" + response_data = b"pong" + + Mocket.register(MocketEntry((host, port), [response_data])) + + # Your UDP client code + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.sendto(request_data, (host, port)) + data, address = sock.recvfrom(1024) + + assert data == response_data + assert address == (host, port)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: