googleapis / google-auth-library-python

Google Auth Python Library
https://googleapis.dev/python/google-auth/latest/
Apache License 2.0
784 stars 309 forks source link

test issues #1599

Open 0-wiz-0 opened 2 months ago

0-wiz-0 commented 2 months ago

I'm packaging for pkgsrc. When running the self tests, there are some problems.

  1. Test dependencies are not documented
  2. There is a problem with using AsyncMock.
ImportError while importing test module '/scratch/security/py-google-auth/work/google_auth-2.35.0/tests/transport/aio/test_aiohttp.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/pkg/lib/python3.12/importlib/__init__.py:90: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/transport/aio/test_aiohttp.py:18: in <module>
    from mock import AsyncMock, Mock, patch
E   ImportError: cannot import name 'AsyncMock' from 'mock' (/usr/pkg/lib/python3.12/site-packages/mock/__init__.py)

Environment details

Steps to reproduce

Run the self tests, see problems with missing dependencies. Most can be fixed by just adding them, but I need a patch for the asyncmock issue:

--- tests/transport/aio/test_aiohttp.py.orig    2024-09-22 16:01:57.881298857 +0000
+++ tests/transport/aio/test_aiohttp.py
@@ -15,7 +15,7 @@
 import asyncio

 from aioresponses import aioresponses  # type: ignore
-from mock import AsyncMock, Mock, patch
+from unittest.mock import AsyncMock, Mock, patch
 import pytest  # type: ignore
 import pytest_asyncio  # type: ignore

The full list of test dependencies seems to be (as of 2.35.0):

aiohttp
requests
pyu2f
aioresponses
flask
freezegun
mock
responses
test-asyncio
test-localserver
ohmayr commented 2 months ago

@0-wiz-0 thanks for reporting this. I'm unable to reproduce this error on my end when I do:

 pip install -r testing/requirements.txt
 pytest tests/transport/aio/test_aiohttp.py

I can see this error happening if you're using an older version of the mock library. I'm unsure but would appreciate it if you can share more details about your environment so I can understand what's happening.

Given that AsyncMock was introduced in unittest in python versions >3.7, it may not be an ideal solution.

I'm also curious to know if you're encountering a similar error for running tests_async/transport/test_aiohttp_requests.py which is another file where we're using AsyncMock from mock.

0-wiz-0 commented 2 months ago

Hi @ohmay, thanks for looking at this. The problem was indeed that I had mock-3.0.5 installed. With mock-5.1.0 the patch is not needed.

That just leaves the test requirements - the sdist file on pypi does not include the testing directory.

As for the requirements themselves, can you please check if all of them are really needed? For example, I see no difference in testing without asynctest installed, and asynctest seems to be unmaintained and not working on Python 3.11+: https://github.com/Martiusweb/asynctest/issues/163