Skip to content

Test failures with Python 3.13.0b2 #863

Open
@mgorny

Description

@mgorny

When running the test suite with Python 3.13.0b2, I'm getting the following failures (all tests pass with 3.12):

$ python -m pytest --ignore tests/performance/
========================================================= test session starts =========================================================
platform linux -- Python 3.13.0b2, pytest-8.2.2, pluggy-1.5.0
rootdir: /tmp/aiocache
configfile: setup.cfg
testpaths: tests/
plugins: mock-3.14.0, asyncio-0.23.7, cov-5.0.0
asyncio: mode=Mode.AUTO
collected 801 items                                                                                                                   

tests/acceptance/test_base.py ..........................................................................................        [ 11%]
tests/acceptance/test_decorators.py .............................................                                               [ 16%]
tests/acceptance/test_factory.py .......                                                                                        [ 17%]
tests/acceptance/test_lock.py ................................................F......                                           [ 24%]
tests/acceptance/test_plugins.py .............                                                                                  [ 26%]
tests/acceptance/test_serializers.py .......................................................................................... [ 37%]
.....................................................................................................................           [ 52%]
tests/ut/backends/test_memcached.py ............................................                                                [ 57%]
tests/ut/backends/test_memory.py ................................                                                               [ 61%]
tests/ut/backends/test_redis.py ...................................                                                             [ 65%]
tests/ut/test_base.py ....................................................................................                      [ 76%]
tests/ut/test_decorators.py .................F..............................F..............                                     [ 84%]
tests/ut/test_exceptions.py .                                                                                                   [ 84%]
tests/ut/test_factory.py ...........................................                                                            [ 89%]
tests/ut/test_lock.py ..............                                                                                            [ 91%]
tests/ut/test_plugins.py .......                                                                                                [ 92%]
tests/ut/test_serializers.py .............................................................                                      [100%]

============================================================== FAILURES ===============================================================
___________________________________ TestOptimisticLock.test_check_and_set_with_int_ttl[redis_cache] ___________________________________

self = <tests.acceptance.test_lock.TestOptimisticLock object at 0x7fc3fbc26ed0>, cache = RedisCache (127.0.0.1:6379)
lock = <aiocache.lock.OptimisticLock object at 0x7fc3fb44ed50>

    async def test_check_and_set_with_int_ttl(self, cache, lock):
        await cache.set(Keys.KEY, "previous_value")
        async with lock as locked:
            await locked.cas("value", ttl=1)
    
        await asyncio.sleep(1)
>       assert await cache.get(Keys.KEY) is None
E       AssertionError: assert 'value' is None

tests/acceptance/test_lock.py:237: AssertionError
_________________________________________ TestCached.test_cache_write_doesnt_wait_for_future __________________________________________

self = <AsyncMock name='set_in_cache' spec='method' id='140479709116608'>, args = ("stub()[('value', 'value')]", 'value'), kwargs = {}
msg = "Expected 'set_in_cache' to be called once. Called 0 times."

    def assert_called_once_with(self, /, *args, **kwargs):
        """assert that the mock was called exactly once and that that call was
        with the specified arguments."""
        if not self.call_count == 1:
            msg = ("Expected '%s' to be called once. Called %s times.%s"
                   % (self._mock_name or 'mock',
                      self.call_count,
                      self._calls_repr()))
>           raise AssertionError(msg)
E           AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.

/usr/lib/python3.13/unittest/mock.py:985: AssertionError

During handling of the above exception, another exception occurred:

self = <tests.ut.test_decorators.TestCached object at 0x7fc3fb732200>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fc3fb1ba680>, decorator = <aiocache.decorators.cached object at 0x7fc3fb318680>
decorator_call = <function stub at 0x7fc3fa619120>

    async def test_cache_write_doesnt_wait_for_future(self, mocker, decorator, decorator_call):
        mocker.spy(decorator, "set_in_cache")
        with patch.object(decorator, "get_from_cache", autospec=True, return_value=None):
            with patch("aiocache.decorators.asyncio.ensure_future", autospec=True):
                await decorator_call(aiocache_wait_for_write=False, value="value")
    
        decorator.set_in_cache.assert_not_awaited()
>       decorator.set_in_cache.assert_called_once_with("stub()[('value', 'value')]", "value")

tests/ut/test_decorators.py:172: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ("stub()[('value', 'value')]", 'value'), kwargs = {}

    def assert_called_once_with(*args, **kwargs):
>       return mock.assert_called_once_with(*args, **kwargs)
E       AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.

/usr/lib/python3.13/unittest/mock.py:244: AssertionError
_______________________________________ TestMultiCached.test_cache_write_doesnt_wait_for_future _______________________________________

self = <AsyncMock name='set_in_cache' spec='method' id='140479685000032'>
args = ({'a': <ANY>, 'b': <ANY>}, <function stub_dict at 0x7fc3faa8ce00>, <ANY>, <ANY>), kwargs = {}
msg = "Expected 'set_in_cache' to be called once. Called 0 times."

    def assert_called_once_with(self, /, *args, **kwargs):
        """assert that the mock was called exactly once and that that call was
        with the specified arguments."""
        if not self.call_count == 1:
            msg = ("Expected '%s' to be called once. Called %s times.%s"
                   % (self._mock_name or 'mock',
                      self.call_count,
                      self._calls_repr()))
>           raise AssertionError(msg)
E           AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.

/usr/lib/python3.13/unittest/mock.py:985: AssertionError

During handling of the above exception, another exception occurred:

self = <tests.ut.test_decorators.TestMultiCached object at 0x7fc3fb732360>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fc3fb1c2d00>
decorator = <aiocache.decorators.multi_cached object at 0x7fc3fa378c00>, decorator_call = <function stub_dict at 0x7fc3fa46b6a0>

    async def test_cache_write_doesnt_wait_for_future(self, mocker, decorator, decorator_call):
        mocker.spy(decorator, "set_in_cache")
        with patch.object(decorator, "get_from_cache", autospec=True, return_value=[None, None]):
            with patch("aiocache.decorators.asyncio.ensure_future", autospec=True):
                await decorator_call(1, keys=["a", "b"], value="value",
                                     aiocache_wait_for_write=False)
    
        decorator.set_in_cache.assert_not_awaited()
>       decorator.set_in_cache.assert_called_once_with({"a": ANY, "b": ANY}, stub_dict, ANY, ANY)

tests/ut/test_decorators.py:483: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ({'a': <ANY>, 'b': <ANY>}, <function stub_dict at 0x7fc3faa8ce00>, <ANY>, <ANY>), kwargs = {}

    def assert_called_once_with(*args, **kwargs):
>       return mock.assert_called_once_with(*args, **kwargs)
E       AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.

/usr/lib/python3.13/unittest/mock.py:244: AssertionError

----------- coverage: platform linux, python 3.13.0-beta-2 -----------
Name                                    Stmts   Miss  Cover
-----------------------------------------------------------
aiocache/__init__.py                       24      4    83%
aiocache/backends/__init__.py               0      0   100%
aiocache/backends/memcached.py             99      0   100%
aiocache/backends/memory.py                86      0   100%
aiocache/backends/redis.py                107      0   100%
aiocache/base.py                          275      2    99%
aiocache/decorators.py                    164      0   100%
aiocache/exceptions.py                      2      0   100%
aiocache/factory.py                       101      0   100%
aiocache/lock.py                           52      0   100%
aiocache/plugins.py                        47      0   100%
aiocache/serializers/__init__.py           10      2    80%
aiocache/serializers/serializers.py        66      3    95%
tests/__init__.py                           0      0   100%
tests/acceptance/__init__.py                0      0   100%
tests/acceptance/conftest.py               26      0   100%
tests/acceptance/test_base.py             180      0   100%
tests/acceptance/test_decorators.py       148      0   100%
tests/acceptance/test_factory.py           35      0   100%
tests/acceptance/test_lock.py             209      0   100%
tests/acceptance/test_plugins.py           43      0   100%
tests/acceptance/test_serializers.py      112      0   100%
tests/conftest.py                          12      0   100%
tests/performance/__init__.py               0      0   100%
tests/performance/conftest.py              11     11     0%
tests/performance/server.py                37     37     0%
tests/performance/test_concurrency.py      27     27     0%
tests/performance/test_footprint.py       107    107     0%
tests/ut/__init__.py                        0      0   100%
tests/ut/backends/__init__.py               0      0   100%
tests/ut/backends/test_memcached.py       192      0   100%
tests/ut/backends/test_memory.py          158      0   100%
tests/ut/backends/test_redis.py           138      0   100%
tests/ut/conftest.py                       40      0   100%
tests/ut/test_base.py                     414      0   100%
tests/ut/test_decorators.py               399      1    99%
tests/ut/test_exceptions.py                 3      0   100%
tests/ut/test_factory.py                  163      4    98%
tests/ut/test_lock.py                      87      0   100%
tests/ut/test_plugins.py                   58      0   100%
tests/ut/test_serializers.py              118      0   100%
tests/utils.py                             47      2    96%
-----------------------------------------------------------
TOTAL                                    3797    200    95%

======================================================= short test summary info =======================================================
FAILED tests/acceptance/test_lock.py::TestOptimisticLock::test_check_and_set_with_int_ttl[redis_cache] - AssertionError: assert 'value' is None
FAILED tests/ut/test_decorators.py::TestCached::test_cache_write_doesnt_wait_for_future - AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.
FAILED tests/ut/test_decorators.py::TestMultiCached::test_cache_write_doesnt_wait_for_future - AssertionError: Expected 'set_in_cache' to be called once. Called 0 times.
============================================== 3 failed, 798 passed in 116.84s (0:01:56) ==============================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions