Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

importlib/test_metadata_api fails on Windows buildbots #103661

Closed
jaraco opened this issue Apr 21, 2023 · 7 comments
Closed

importlib/test_metadata_api fails on Windows buildbots #103661

jaraco opened this issue Apr 21, 2023 · 7 comments
Assignees
Labels
OS-windows tests Tests in the Lib/test dir type-bug An unexpected behavior, bug, or error

Comments

@jaraco
Copy link
Member

jaraco commented Apr 21, 2023

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot AMD64 Windows10 3.x has failed when building commit 3e0fec7.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/146/builds/4915) and take a look at the build logs.
  4. Check if the failure is related to this commit (3e0fec7) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/146/builds/4915

Failed tests:

  • test_importlib

Failed subtests:

  • test_read_text - test.test_importlib.test_metadata_api.APITests.test_read_text

Summary of the results of the build (if available):

== Tests result: FAILURE then FAILURE ==

399 tests OK.

10 slowest tests:

  • test_math: 6 min 34 sec
  • test_asyncio: 4 min 43 sec
  • test_tokenize: 3 min 42 sec
  • test_multiprocessing_spawn: 3 min 41 sec
  • test_lib2to3: 2 min 52 sec
  • test_capi: 2 min 30 sec
  • test_unparse: 1 min 57 sec
  • test_concurrent_futures: 1 min 46 sec
  • test_unicodedata: 1 min 42 sec
  • test_compileall: 1 min 33 sec

1 test failed:
test_importlib

34 tests skipped:
test_clinic test_curses test_dbm_gnu test_dbm_ndbm test_devpoll
test_epoll test_fcntl test_fork1 test_gdb test_grp test_ioctl
test_kqueue test_multiprocessing_fork
test_multiprocessing_forkserver test_nis test_openpty
test_ossaudiodev test_peg_generator test_perf_profiler test_pipes
test_poll test_posix test_pty test_pwd test_readline test_resource
test_spwd test_syslog test_threadsignals test_wait3 test_wait4
test_xxlimited test_xxtestfuzz test_zipfile64

1 re-run test:
test_importlib

Total duration: 20 min 48 sec

Click to see traceback logs
Traceback (most recent call last):
  File "D:\buildarea\3.x.bolen-windows10\build\Lib\test\test_importlib\test_metadata_api.py", line 86, in test_read_text
    top_level = [
                ^
IndexError: list index out of range

Originally posted by @bedevere-bot in #103584 (comment)

Linked PRs

@jaraco
Copy link
Member Author

jaraco commented Apr 21, 2023

Failure message is:

======================================================================
ERROR: test_read_text (test.test_importlib.test_metadata_api.APITests.test_read_text) [egg_with_no_modules-pkg]
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\buildarea\3.x.bolen-windows10\build\Lib\test\test_importlib\test_metadata_api.py", line 86, in test_read_text
    top_level = [
                ^
IndexError: list index out of range
----------------------------------------------------------------------

The tests are failing on Windows buildbots, but I struggle to think of what might be different about the buildbot environments that would affect this test.

I'm also unsure how to replicate the failure. Tests clearly pass on Windows in general. What is it about this test that makes it fail in the buildbot environments only? Since I don't have a way to triage the failure further, I'm going to mark the test as "xfail" for now to stop the buildbot failures.

jaraco added a commit to jaraco/cpython that referenced this issue Apr 21, 2023
jaraco added a commit to jaraco/cpython that referenced this issue Apr 21, 2023
@arhadthedev arhadthedev added OS-windows type-bug An unexpected behavior, bug, or error tests Tests in the Lib/test dir labels Apr 21, 2023
@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

Good news is I've been able to replicate the issue on a local build of CPython for Windows, so I ought to be able to inspect for the root cause.

@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

Interestingly, it seems PackagePath.name is somehow not returning the name only.

> c:\users\jaraco\code\python\cpython\lib\test\test_importlib\test_metadata_api.py(100)test_read_text()
-> top_level = [
(Pdb) files(pkg_name)
[PackagePath('egg_with_no_modules_pkg.egg-info\\PKG-INFO'), PackagePath('egg_with_no_modules_pkg.egg-info\\SOURCES.txt'), PackagePath('egg_with_no_modules_pkg.egg-info\\top_level.txt')]
(Pdb) files(pkg_name)[-1].name
'egg_with_no_modules_pkg.egg-info\\top_level.txt'

@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

Aah. PackagePath derives from PurePosixPath, so it's not a big surprise that Windows separators aren't honored. What is more of a surprise is that this issue wasn't caught in importlib_metadata or by the Windows CI runs. Why is it only encountered by the buildbots and my local build?

@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

The issue is here, where Windows-separated paths are generated.

@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

I also learned that the suppress(Exception) near that line is sufficient to suppress the error. When I put a NameError in there, the tests continued to pass. Probably that trap needs to be less lenient to errors. That may explain why this failure wasn't encountered on CI runs.

@jaraco
Copy link
Member Author

jaraco commented Apr 22, 2023

importlib_metadata 6.5.1 has that when applied here will overwrite the workaround.

jaraco added a commit to jaraco/cpython that referenced this issue Apr 22, 2023
@jaraco jaraco closed this as completed Apr 22, 2023
clrpackages pushed a commit to clearlinux-pkgs/pypi-importlib_metadata that referenced this issue Apr 24, 2023
…5.0 to version 6.6.0

David Hotham (2):
      type annotations
      code review

Jason R. Coombs (9):
      Update compatibility for Python 3.12 (python/cpython#103584).
      Resolve the located directory and remove suppression of Exceptions. Ref python/cpython#103661.
      Wrap 'subdir/line' in PosixPath to ensure the output uses posix path separators. Ref python/cpython#103661.
      Update changelog
      Rename 'line' to 'name' for better context.
      Reword to prefer imperative voice and more a more concise description.
      Use generator expression for paths.
      Remove nitpick_ignore no longer needed.
      Update changelog
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Apr 30, 2023
v6.6.0
======

* #449: Expanded type annotations.

v6.5.1
======

* python/cpython#103661: Removed excess error suppression in
  ``_read_files_egginfo_installed`` and fixed path handling
  on Windows.

v6.5.0
======

* #422: Removed ABC metaclass from ``Distribution`` and instead
  deprecated construction of ``Distribution`` objects without
  concrete methods.

v6.4.1
======

* Updated docs with tweaks from upstream CPython.

v6.4.0
======

* Consolidated some behaviors in tests around ``_path``.
* Added type annotation for ``Distribution.read_text``.

v6.3.0
======

* #115: Support ``installed-files.txt`` for ``Distribution.files``
  when present.

v6.2.1
======

* #442: Fixed issue introduced in v6.1.0 where non-importable
  names (metadata dirs) began appearing in
  ``packages_distributions``.

v6.2.0
======

* #384: ``PackageMetadata`` now stipulates an additional ``get``
  method allowing for easy querying of metadata keys that may not
  be present.
bmwiedemann pushed a commit to bmwiedemann/openSUSE that referenced this issue May 9, 2023
…4915

https://build.opensuse.org/request/show/1084915
by user dirkmueller + dimstar_suse
- update to 6.6.0:
  * Expanded type annotations.
  * python/cpython#103661: Removed excess error suppression in
    ``_read_files_egginfo_installed`` and fixed path handling
    on Windows.
  * #422: Removed ABC metaclass from ``Distribution`` and instead
    deprecated construction of ``Distribution`` objects without
    concrete methods.
  * Updated docs with tweaks from upstream CPython.
  * Consolidated some behaviors in tests around ``_path``.
  * Added type annotation for ``Distribution.read_text``.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
OS-windows tests Tests in the Lib/test dir type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

2 participants