lupa icon indicating copy to clipboard operation
lupa copied to clipboard

2.1: pytest fails in `lupa/tests/test.py::TestOverflowMixin::test_no_overflow` unit

Open kloczek opened this issue 1 year ago • 8 comments

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

  • python3 -sBm build -w --no-isolation
  • because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
  • install .whl file in </install/prefix> using installer module
  • run pytest with $PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>
  • build is performed in env which is cut off from access to the public network (pytest is executed with -m "not network")
Here is pytest output:
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-lupa-2.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-lupa-2.1-2.fc37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network' --import-mode=importlib lupa/tests/__init__.py lupa/tests/test.py
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.1.1, pluggy-1.4.0
rootdir: /home/tkloczko/rpmbuild/BUILD/lupa-lupa-2.1
configfile: pyproject.toml
collected 317 items

lupa/tests/test.py .................................................................................................................................................................. [ 51%]
...................................................................................................sssssssssss...............F.............................                           [100%]

========================================================================================= FAILURES ==========================================================================================
____________________________________________________________________________ TestOverflowMixin.test_no_overflow _____________________________________________________________________________

self = <lupa.tests.test.TestOverflowMixin object at 0x7ff4c25a3280>

    def test_no_overflow(self):
>       self.assertMathType(0, 'integer')

lupa/tests/test.py:2941:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lupa.tests.test.TestOverflowMixin object at 0x7ff4c25a3280>, number = 0, math_type = 'integer'

    def assertMathType(self, number, math_type):
>       self.assertEqual(self.lua_type(number), 'number')
E       AttributeError: 'TestOverflowMixin' object has no attribute 'assertEqual'

lupa/tests/test.py:2956: AttributeError
================================================================================== short test summary info ==================================================================================
SKIPPED [1] lupa/tests/test.py:2725: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2610: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2584: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2589: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2580: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2714: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2693: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2702: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2642: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2595: No FastRLock implementation found
SKIPPED [1] lupa/tests/test.py:2600: No FastRLock implementation found
FAILED lupa/tests/test.py::TestOverflowMixin::test_no_overflow - AttributeError: 'TestOverflowMixin' object has no attribute 'assertEqual'
======================================================================== 1 failed, 305 passed, 11 skipped in 13.76s =========================================================================
List of installed modules in build env:
Package            Version
------------------ -----------
build              1.2.1
Cython             3.0.10
exceptiongroup     1.1.3
importlib_metadata 7.1.0
iniconfig          2.0.0
installer          0.7.0
packaging          24.0
pluggy             1.4.0
pyproject_hooks    1.0.0
pytest             8.1.1
python-dateutil    2.9.0.post0
setuptools         69.2.0
tokenize_rt        5.2.0
tomli              2.0.1
wheel              0.43.0
zipp               3.18.1

Please let me know if you need more details or want me to perform some diagnostics.

kloczek avatar Apr 09 '24 21:04 kloczek

Looks like with pytest 8.2.1 test suite is no0t able to pass collecting units

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-lupa-2.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-lupa-2.1-2.fc37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network' lupa/tests/__init__.py lupa/tests/test.py
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.2.1, pluggy-1.5.0
rootdir: /home/tkloczko/rpmbuild/BUILD/lupa-lupa-2.1
configfile: pyproject.toml
plugins: flakes-4.0.5
collected 0 items / 1 error

========================================================================================== ERRORS ===========================================================================================
____________________________________________________________________________ ERROR collecting lupa/tests/test.py ____________________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/lupa-lupa-2.1/lupa/tests/test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
lupa/tests/test.py:2318: in <module>
    @lupa.unpacks_lua_table
lupa/__init__.py:88: in __getattr__
    lua = _newest_lib if _newest_lib is not None else _import_newest_lib()
lupa/__init__.py:65: in _import_newest_lib
    _newest_lib = __import__(module_name[0], level=1, fromlist="*", globals=globals())
E   ModuleNotFoundError: No module named 'lupa.lua'
================================================================================== short test summary info ==================================================================================
ERROR lupa/tests/test.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
===================================================================================== 1 error in 0.24s ======================================================================================

kloczek avatar May 27 '24 18:05 kloczek

Just FTR .. tested 2.2 and pytest still fails the same way.

kloczek avatar Jun 02 '24 10:06 kloczek

I don't use pytest myself. Try python -m unittest -v lupa.tests.suite.

scoder avatar Jun 02 '24 16:06 scoder

Correctly written unittest based test suite is correctly handled by pytest. What is the propose of importing module in such strange way? 🤔

kloczek avatar Jun 02 '24 20:06 kloczek

What is the propose of importing module in such strange way? 🤔

I can't find anything particularly strange about it, but the test suite is generated, or rather duplicated, for each Lua version module. Maybe that explains why it's not just a trivial import.

scoder avatar Jun 03 '24 07:06 scoder

_newest_lib = __import__(module_name[0], level=1, fromlist="*", globals=globals())

kloczek avatar Jun 03 '24 11:06 kloczek

That line imports the Lua module with the latest available version, after putting some effort into selecting it. It's a bit more than a simple import since it needs to work regardless of the number and versions of available Lua modules.

scoder avatar Jun 03 '24 19:06 scoder

So why this import fails? 🤔

kloczek avatar Jun 03 '24 19:06 kloczek