From 6089dd0b9e74e9d7fd00002a0934c7a9216ed369 Mon Sep 17 00:00:00 2001 From: phi Date: Sun, 2 Nov 2025 22:25:31 +0900 Subject: [PATCH] test: serializer_args tests --- tests/async/test_client.py | 29 +++++++++++++++++++++++++++++ tests/async/test_server.py | 29 +++++++++++++++++++++++++++++ tests/common/test_client.py | 29 +++++++++++++++++++++++++++++ tests/common/test_server.py | 29 +++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) diff --git a/tests/async/test_client.py b/tests/async/test_client.py index b4b0c6c..6b25c7b 100644 --- a/tests/async/test_client.py +++ b/tests/async/test_client.py @@ -1,5 +1,6 @@ import asyncio from unittest import mock +from datetime import datetime, timezone, timedelta import pytest @@ -1242,3 +1243,31 @@ class TestAsyncClient: assert c.sid is None assert not c.connected c.start_background_task.assert_not_called() + + def test_serializer_args(self): + args = {"foo": "bar"} + c = async_client.AsyncClient(serializer_args=args) + assert c.packet_class_args == args + + def test_serializer_args_with_msgpack(self): + def default(o): + if isinstance(o, datetime): + return o.isoformat() + raise TypeError("Unknown type") + args = {"dumps_default": default} + data = {"current": datetime.now(timezone(timedelta(0)))} + c = async_client.AsyncClient(serializer='msgpack', serializer_args=args) + p = c._create_packet(data=data) + p2 = c._create_packet(encoded_packet=p.encode()) + + assert p.data != p2.data + assert isinstance(p2.data, dict) + assert "current" in p2.data + assert isinstance(p2.data["current"], str) + assert default(data["current"]) == p2.data["current"] + + def test_invalid_serializer_args(self): + args = {"invalid_arg": 123} + c = async_client.AsyncClient(serializer='msgpack', serializer_args=args) + with pytest.raises(TypeError): + c._create_packet(data={"foo": "bar"}).encode() \ No newline at end of file diff --git a/tests/async/test_server.py b/tests/async/test_server.py index 575f209..6bc75b9 100644 --- a/tests/async/test_server.py +++ b/tests/async/test_server.py @@ -1,6 +1,7 @@ import asyncio import logging from unittest import mock +from datetime import datetime, timezone, timedelta from engineio import json from engineio import packet as eio_packet @@ -1089,3 +1090,31 @@ class TestAsyncServer: s = async_server.AsyncServer() await s.sleep(1.23) s.eio.sleep.assert_awaited_once_with(1.23) + + def test_serializer_args(self, eio): + args = {"foo": "bar"} + s = async_server.AsyncServer(serializer_args=args) + assert s.packet_class_args == args + + def test_serializer_args_with_msgpack(self, eio): + def default(o): + if isinstance(o, datetime): + return o.isoformat() + raise TypeError("Unknown type") + args = {"dumps_default": default} + data = {"current": datetime.now(timezone(timedelta(0)))} + s = async_server.AsyncServer(serializer='msgpack', serializer_args=args) + p = s._create_packet(data=data) + p2 = s._create_packet(encoded_packet=p.encode()) + + assert p.data != p2.data + assert isinstance(p2.data, dict) + assert "current" in p2.data + assert isinstance(p2.data["current"], str) + assert default(data["current"]) == p2.data["current"] + + def test_invalid_serializer_args(self, eio): + args = {"invalid_arg": 123} + s = async_server.AsyncServer(serializer='msgpack', serializer_args=args) + with pytest.raises(TypeError): + s._create_packet(data={"foo": "bar"}).encode() \ No newline at end of file diff --git a/tests/common/test_client.py b/tests/common/test_client.py index cbda3f1..fd90512 100644 --- a/tests/common/test_client.py +++ b/tests/common/test_client.py @@ -1,6 +1,7 @@ import logging import time from unittest import mock +from datetime import datetime, timezone, timedelta from engineio import exceptions as engineio_exceptions from engineio import json @@ -1386,3 +1387,31 @@ class TestClient: assert c.sid is None assert not c.connected c.start_background_task.assert_not_called() + + def test_serializer_args(self): + args = {"foo": "bar"} + c = client.Client(serializer_args=args) + assert c.packet_class_args == args + + def test_serializer_args_with_msgpack(self): + def default(o): + if isinstance(o, datetime): + return o.isoformat() + raise TypeError("Unknown type") + args = {"dumps_default": default} + data = {"current": datetime.now(timezone(timedelta(0)))} + c = client.Client(serializer='msgpack', serializer_args=args) + p = c._create_packet(data=data) + p2 = c._create_packet(encoded_packet=p.encode()) + + assert p.data != p2.data + assert isinstance(p2.data, dict) + assert "current" in p2.data + assert isinstance(p2.data["current"], str) + assert default(data["current"]) == p2.data["current"] + + def test_invalid_serializer_args(self): + args = {"invalid_arg": 123} + c = client.Client(serializer='msgpack', serializer_args=args) + with pytest.raises(TypeError): + c._create_packet(data={"foo": "bar"}).encode() \ No newline at end of file diff --git a/tests/common/test_server.py b/tests/common/test_server.py index bdbbfe0..a8df8c8 100644 --- a/tests/common/test_server.py +++ b/tests/common/test_server.py @@ -1,5 +1,6 @@ import logging from unittest import mock +from datetime import datetime, timezone, timedelta from engineio import json from engineio import packet as eio_packet @@ -1032,3 +1033,31 @@ class TestServer: s = server.Server() s.sleep(1.23) s.eio.sleep.assert_called_once_with(1.23) + + def test_serializer_args(self, eio): + args = {"foo": "bar"} + s = server.Server(serializer_args=args) + assert s.packet_class_args == args + + def test_serializer_args_with_msgpack(self, eio): + def default(o): + if isinstance(o, datetime): + return o.isoformat() + raise TypeError("Unknown type") + args = {"dumps_default": default} + data = {"current": datetime.now(timezone(timedelta(0)))} + s = server.Server(serializer='msgpack', serializer_args=args) + p = s._create_packet(data=data) + p2 = s._create_packet(encoded_packet=p.encode()) + + assert p.data != p2.data + assert isinstance(p2.data, dict) + assert "current" in p2.data + assert isinstance(p2.data["current"], str) + assert default(data["current"]) == p2.data["current"] + + def test_invalid_serializer_args(self, eio): + args = {"invalid_arg": 123} + s = server.Server(serializer='msgpack', serializer_args=args) + with pytest.raises(TypeError): + s._create_packet(data={"foo": "bar"}).encode() \ No newline at end of file