python-rope / rope

a python refactoring library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

1.11.0: pytest is failing in `ropetest/contrib/autoimporttest.py::AutoImportTest::test_search_submodule` unit

kloczek opened this issue · 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-rope-1.11.0-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-rope-1.11.0-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra -m 'not network'
============================= test session starts ==============================
platform linux -- Python 3.8.18, pytest-7.4.3, pluggy-1.3.0
rootdir: /home/tkloczko/rpmbuild/BUILD/rope-1.11.0
configfile: pyproject.toml
collected 2060 items

ropetest/advanced_oi_test.py ........................................... [  2%]
.................                                                        [  2%]
ropetest/builtinstest.py ............................................... [  5%]
................                                                         [  5%]
ropetest/codeanalyzetest.py ............................................ [  8%]
........................................................................ [ 11%]
...............................                                          [ 13%]
ropetest/doatest.py ....                                                 [ 13%]
ropetest/historytest.py ........................................         [ 15%]
ropetest/objectdbtest.py ...................                             [ 16%]
ropetest/objectinfertest.py .................................            [ 17%]
ropetest/projecttest.py ................................................ [ 20%]
......................................................................   [ 23%]
ropetest/pycoretest.py ................................................. [ 25%]
........................................................................ [ 29%]
.......                                                                  [ 29%]
ropetest/pyscopestest.py ..............................................  [ 31%]
ropetest/reprtest.py ................                                    [ 32%]
ropetest/runmodtest.py .........                                         [ 33%]
ropetest/serializer_test.py ............................................ [ 35%]
................                                                         [ 36%]
ropetest/simplifytest.py ...............                                 [ 36%]
ropetest/type_hinting_test.py ..............................x........... [ 38%]
......x.................x.................x..........                    [ 41%]
ropetest/versioningtest.py .....                                         [ 41%]
ropetest/contrib/autoimporttest.py .................F.......             [ 42%]
ropetest/contrib/changestacktest.py .                                    [ 42%]
ropetest/contrib/codeassisttest.py ..................................... [ 44%]
........................................................................ [ 48%]
.............................................................            [ 51%]
ropetest/contrib/finderrorstest.py .....                                 [ 51%]
ropetest/contrib/findittest.py ...........                               [ 51%]
ropetest/contrib/fixmodnamestest.py ....                                 [ 52%]
ropetest/contrib/generatetest.py ..............................          [ 53%]
ropetest/contrib/autoimport/autoimporttest.py ............               [ 54%]
ropetest/contrib/autoimport/modeltest.py ...........                     [ 54%]
ropetest/contrib/autoimport/parsetest.py ...                             [ 54%]
ropetest/contrib/autoimport/utilstest.py ...........                     [ 55%]
ropetest/refactor/__init__.py .......................................... [ 57%]
............................                                             [ 58%]
ropetest/refactor/change_signature_test.py ............................. [ 60%]
...........                                                              [ 60%]
ropetest/refactor/extracttest.py ....................................... [ 62%]
......s..........sss....x......................s........................ [ 66%]
......................................................                   [ 68%]
ropetest/refactor/importutilstest.py ................................... [ 70%]
........................................................................ [ 73%]
....................................                                     [ 75%]
ropetest/refactor/inlinetest.py ........................................ [ 77%]
.......................................................                  [ 80%]
ropetest/refactor/movetest.py .......................................... [ 82%]
................................                                         [ 83%]
ropetest/refactor/multiprojecttest.py ....                               [ 84%]
ropetest/refactor/patchedasttest.py ..........................s..s.s.... [ 85%]
.....................................................ssssssssss......... [ 89%]
...................s.s.s..s...........                                   [ 91%]
ropetest/refactor/renametest.py ........................................ [ 93%]
.................................................                        [ 95%]
ropetest/refactor/restructuretest.py .......................             [ 96%]
ropetest/refactor/similarfindertest.py ................................. [ 98%]
....                                                                     [ 98%]
ropetest/refactor/suitestest.py .......s.............                    [ 99%]
ropetest/refactor/usefunctiontest.py ............                        [100%]

=================================== FAILURES ===================================
_____________________ AutoImportTest.test_search_submodule _____________________

self = <ropetest.contrib.autoimporttest.AutoImportTest testMethod=test_search_submodule>

    def test_search_submodule(self):
        self.importer.update_module("build")
        import_statement = ("from build import env", "env")
>       self.assertIn(import_statement, self.importer.search("env", exact_match=True))
E       AssertionError: ('from build import env', 'env') not found in []

ropetest/contrib/autoimporttest.py:116: AssertionError
=============================== warnings summary ===============================
ropetest/advanced_oi_test.py: 60 warnings
ropetest/builtinstest.py: 63 warnings
ropetest/codeanalyzetest.py: 15 warnings
ropetest/historytest.py: 40 warnings
ropetest/objectdbtest.py: 19 warnings
ropetest/objectinfertest.py: 33 warnings
ropetest/projecttest.py: 125 warnings
ropetest/pycoretest.py: 123 warnings
ropetest/pyscopestest.py: 46 warnings
ropetest/reprtest.py: 16 warnings
ropetest/runmodtest.py: 9 warnings
ropetest/type_hinting_test.py: 76 warnings
ropetest/versioningtest.py: 5 warnings
ropetest/contrib/autoimporttest.py: 25 warnings
ropetest/contrib/changestacktest.py: 1 warning
ropetest/contrib/codeassisttest.py: 170 warnings
ropetest/contrib/finderrorstest.py: 5 warnings
ropetest/contrib/findittest.py: 11 warnings
ropetest/contrib/fixmodnamestest.py: 4 warnings
ropetest/contrib/generatetest.py: 30 warnings
ropetest/contrib/autoimport/autoimporttest.py: 14 warnings
ropetest/contrib/autoimport/utilstest.py: 5 warnings
ropetest/refactor/__init__.py: 59 warnings
ropetest/refactor/change_signature_test.py: 40 warnings
ropetest/refactor/extracttest.py: 160 warnings
ropetest/refactor/importutilstest.py: 143 warnings
ropetest/refactor/inlinetest.py: 95 warnings
ropetest/refactor/movetest.py: 74 warnings
ropetest/refactor/multiprojecttest.py: 8 warnings
ropetest/refactor/renametest.py: 89 warnings
ropetest/refactor/restructuretest.py: 23 warnings
ropetest/refactor/similarfindertest.py: 32 warnings
ropetest/refactor/usefunctiontest.py: 12 warnings
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/rope/base/project.py:229: DeprecationWarning: Delete once deprecated functions are gone
    self._init_source_folders()

ropetest/advanced_oi_test.py: 139 warnings
ropetest/projecttest.py: 5 warnings
ropetest/runmodtest.py: 46 warnings
ropetest/refactor/multiprojecttest.py: 4 warnings
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/rope/base/libutils.py:34: DeprecationWarning: relative is deprecated
    return relative(project.address, path)

ropetest/contrib/autoimporttest.py: 26 warnings
ropetest/contrib/autoimport/autoimporttest.py: 13 warnings
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/rope/contrib/autoimport/sqlite.py:124: DeprecationWarning: The default value for `AutoImport(memory)` argument will change to use an on-disk database by default in the future. If you want to use an in-memory database, you need to pass `AutoImport(memory=True)` explicitly.
    warnings.warn(

ropetest/refactor/__init__.py::TaskHandleTest::test_getting_job_name
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/ropetest/refactor/__init__.py:1125: DeprecationWarning: Just use JobSet.name attribute/property instead
    self.assertEqual("test job set", jobs.get_name())

ropetest/refactor/__init__.py::TaskHandleTest::test_getting_job_name
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/ropetest/refactor/__init__.py:1126: DeprecationWarning: Just use JobSet.job_name attribute/property instead
    self.assertEqual(None, jobs.get_active_job_name())

ropetest/refactor/__init__.py::TaskHandleTest::test_getting_job_name
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/ropetest/refactor/__init__.py:1129: DeprecationWarning: Just use JobSet.name attribute/property instead
    self.assertEqual("test job set", jobs.get_name())

ropetest/refactor/__init__.py::TaskHandleTest::test_getting_job_name
  /home/tkloczko/rpmbuild/BUILD/rope-1.11.0/ropetest/refactor/__init__.py:1131: DeprecationWarning: Just use JobSet.job_name attribute/property instead
    self.assertEqual("job1", jobs.get_active_job_name())

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
SKIPPED [1] ropetest/refactor/extracttest.py:1812: This test requires version of Python higher than 3.11
SKIPPED [1] ropetest/refactor/extracttest.py:3393: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/extracttest.py:3417: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/extracttest.py:3438: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/extracttest.py:2457: This test requires version of Python lower than 3.8
SKIPPED [1] ropetest/refactor/patchedasttest.py:435: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:422: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:405: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:1304: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1290: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1373: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1387: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1336: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1457: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1425: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1405: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1484: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1359: This test requires version of Python higher than 3.10
SKIPPED [1] ropetest/refactor/patchedasttest.py:1236: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:1216: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:1226: This test requires version of Python lower than 3.5
SKIPPED [1] ropetest/refactor/patchedasttest.py:1157: This test requires version of Python higher than 3.11
SKIPPED [1] ropetest/refactor/suitestest.py:204: This test requires version of Python higher than 3.10
XFAIL ropetest/type_hinting_test.py::DocstringNoneAssignmentHintingTest::test_hint_or - reason: failing configuration (but should work)
XFAIL ropetest/type_hinting_test.py::DocstringNotImplementedAssignmentHintingTest::test_hint_or - reason: failing configuration (but should work)
XFAIL ropetest/type_hinting_test.py::PEP0484CommentNoneAssignmentHintingTest::test_hint_or - reason: failing configuration (but should work)
XFAIL ropetest/type_hinting_test.py::PEP0484CommentNotImplementedAssignmentHintingTest::test_hint_or - reason: failing configuration (but should work)
XFAIL ropetest/refactor/extracttest.py::ExtractMethodTest::test_extract_method_f_string_false_format_value_in_regular_string - reason:
FAILED ropetest/contrib/autoimporttest.py::AutoImportTest::test_search_submodule
==== 1 failed, 2031 passed, 23 skipped, 5 xfailed, 1867 warnings in 19.42s =====

Here is list of installed modules in build env

Package                       Version
----------------------------- -------
alabaster                     0.7.13
Babel                         2.13.1
build                         1.0.3
charset-normalizer            3.3.2
cppclean                      0.13
distro                        1.8.0
docutils                      0.20.1
exceptiongroup                1.1.3
gpg                           1.23.0
idna                          3.4
imagesize                     1.4.1
importlib-metadata            6.8.0
iniconfig                     2.0.0
installer                     0.7.0
Jinja2                        3.1.2
MarkupSafe                    2.1.3
packaging                     23.2
platformdirs                  3.11.0
pluggy                        1.3.0
Pygments                      2.16.1
pyproject_hooks               1.0.0
pytest                        7.4.3
python-dateutil               2.8.2
pytoolconfig                  1.2.6
pytz                          2023.3
requests                      2.31.0
setuptools                    68.2.2
six                           1.16.0
snowballstemmer               2.2.0
Sphinx                        7.1.2
sphinx-autodoc-typehints      1.24.1
sphinx-rtd-theme              1.2.2
sphinxcontrib-applehelp       1.0.4
sphinxcontrib-devhelp         1.0.5
sphinxcontrib-htmlhelp        2.0.4
sphinxcontrib-jquery          4.1
sphinxcontrib-jsmath          1.0.1
sphinxcontrib-qthelp          1.0.3
sphinxcontrib-serializinghtml 1.1.9
tabulate                      0.9.0
tomli                         2.0.1
urllib3                       1.26.18
wheel                         0.41.3
zipp                          3.17.0

In pytest output is possible to see as well some DeprecationWarning wanings.

Hi @kloczek, apologies I missed this ticket earlier. This is effectively duplicate of #478.

This is a false positive. This particular test case is not very well written and has often been failing in certain run configurations because it makes some assumptions about the test run environment. For this particular case though, I think you can bypass the issue by installing build into the environment where rope is running the test.

The proper fix to this would be to remove the dependency on build being installed when running the test. This fix can be achieved by creating a dummy sample package instead of abusing build for this purpose, but this is quite tricky to get right and I hadn't had the time to fix it yet.

Closing as duplicate.