Bug 2323163 - python-nose fails to build with Python 3.14: multiple AssertionErrors related to timeouts in test outputs
Summary: python-nose fails to build with Python 3.14: multiple AssertionErrors related...
Keywords:
Status: CLOSED WONTFIX
Alias: None
Product: Fedora
Classification: Fedora
Component: python-nose
Version: rawhide
Hardware: Unspecified
OS: Unspecified
low
unspecified
Target Milestone: ---
Assignee: Miro Hrončok
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: PYTHON3.14
TreeView+ depends on / blocked
 
Reported: 2024-11-01 14:44 UTC by Karolina Surma
Modified: 2025-03-12 08:46 UTC (History)
5 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2025-03-12 08:46:37 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Karolina Surma 2024-11-01 14:44:37 UTC
python-nose fails to build with Python 3.14.0a1.

+ /usr/bin/python3 selftest.py
  import pkg_resources
.......................setup called
teardown called
setup called
teardown called
F.....................nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100%
.nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100%
.nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100%
.nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100%
./usr/lib64/python3.14/site-packages/coverage/inorout.py:523: CoverageWarning: Module moo was previously imported, but not measured (module-not-measured)
  self.warn(msg, slug="module-not-measured")
nose.plugins.cover: ERROR: TOTAL Coverage did not reach minimum required: 100%
.......................................................................FF.F.............S...S......................................................................................S......Exception ignored in: <generator object TestLoader.loadTestsFromGenerator.<locals>.generate at 0x7f59103d0c20>
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
RuntimeError: generator ignored GeneratorExit
........................................................................SSSS..................................................SS......................
======================================================================
FAIL: Doctest: multiprocess.rst
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib64/python3.14/doctest.py", line 2327, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for multiprocess.rst
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/doc_tests/test_multiprocess/multiprocess.rst", line 0

----------------------------------------------------------------------
File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/doc_tests/test_multiprocess/multiprocess.rst", line 222, in multiprocess.rst
Failed example:
    run(argv=['nosetests', '-v', '--processes=2', test_can_split],
        plugins=[MultiProcess()]) #doctest: +ELLIPSIS
Expected:
    setup called
    teardown called
    ...
    test_can_split....
    ...
    FAILED (failures=...)
Got:
    test_can_split.TestMe.test_one ... ok
    test_can_split.test_b ... ok
    test_can_split.test_a ... FAIL
    <BLANKLINE>
    ======================================================================
    FAIL: test_can_split.test_a
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    ...
    AssertionError: len(['setup', 'teardown']) !=1
    <BLANKLINE>
    ----------------------------------------------------------------------
    Ran 3 tests in ...s
    <BLANKLINE>
    FAILED (failures=1)


======================================================================
FAIL: test_multiprocessing.test_keyboardinterrupt.test_keyboardinterrupt
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/case.py", line 201, in runTest
    self.test(*self.arg)
    ~~~~~~~~~^^^^^^^^^^^
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_keyboardinterrupt.py", line 76, in test_keyboardinterrupt
    assert 'test_timeout_finished' not in log
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 
-------------------- >> begin captured stdout << ---------------------
ERROR

======================================================================
ERROR: test suite for <module 'keyboardinterrupt' from '/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/keyboardinterrupt.py'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run
    iworker, addr, newtask_addrs, batch_result = resultQueue.get(
                                                 ~~~~~~~~~~~~~~~^
                                            timeout=nexttimeout)
                                            ^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 2, in get
  File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod
    kind, result = conn.recv()
                   ~~~~~~~~~^^
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv
    buf = self._recv_bytes()
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes
    buf = self._recv(4)
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv
    chunk = read(handle, to_read)
KeyboardInterrupt

----------------------------------------------------------------------
Ran 0 tests in 0.177s

FAILED (errors=1)

----

----
setup
test_timeout
test_timeout_finished
test_pass
teardown


--------------------- >> end captured stdout << ----------------------

======================================================================
FAIL: test_multiprocessing.test_keyboardinterrupt.test_keyboardinterrupt_twice
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/case.py", line 201, in runTest
    self.test(*self.arg)
    ~~~~~~~~~^^^^^^^^^^^
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_keyboardinterrupt.py", line 98, in test_keyboardinterrupt_twice
    assert 'test_timeout_finished' not in log
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 
-------------------- >> begin captured stdout << ---------------------
ERROR

======================================================================
ERROR: test suite for <module 'keyboardinterrupt_twice' from '/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/keyboardinterrupt_twice.py'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run
    iworker, addr, newtask_addrs, batch_result = resultQueue.get(
                                                 ~~~~~~~~~~~~~~~^
                                            timeout=nexttimeout)
                                            ^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 2, in get
  File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod
    kind, result = conn.recv()
                   ~~~~~~~~~^^
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv
    buf = self._recv_bytes()
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes
    buf = self._recv(4)
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv
    chunk = read(handle, to_read)
KeyboardInterrupt

----------------------------------------------------------------------
Ran 0 tests in 0.177s

FAILED (errors=1)
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 515, in run
    worker.join()
    ~~~~~~~~~~~^^
  File "/usr/lib64/python3.14/multiprocessing/process.py", line 149, in join
    res = self._popen.wait(timeout)
  File "/usr/lib64/python3.14/multiprocessing/popen_fork.py", line 44, in wait
    return self.poll(os.WNOHANG if timeout == 0.0 else 0)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.14/multiprocessing/popen_forkserver.py", line 65, in poll
    if not wait([self.sentinel], timeout):
           ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 1151, in wait
    ready = selector.select(timeout)
  File "/usr/lib64/python3.14/selectors.py", line 398, in select
    fd_event_list = self._selector.poll(timeout)
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/support/fake_nosetest.py", line 15, in <module>
    nose.main(
    ~~~~~~~~~^
            defaultTest=sys.argv[1], argv=[sys.argv[0],'--processes=1','-v'],
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            config=Config(plugins=PluginManager(plugins=[MultiProcess()])))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/core.py", line 118, in __init__
    unittest.TestProgram.__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self, module=module, defaultTest=defaultTest,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        argv=argv, testRunner=testRunner, testLoader=testLoader,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        **extra_args)
        ^^^^^^^^^^^^^
  File "/usr/lib64/python3.14/unittest/main.py", line 104, in __init__
    self.runTests()
    ~~~~~~~~~~~~~^^
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/core.py", line 207, in runTests
    result = self.testRunner.run(self.test)
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 524, in run
    if thrownError: raise thrownError
                    ^^^^^^^^^^^^^^^^^
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/nose/plugins/multiprocess.py", line 395, in run
    iworker, addr, newtask_addrs, batch_result = resultQueue.get(
                                                 ~~~~~~~~~~~~~~~^
                                            timeout=nexttimeout)
                                            ^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 2, in get
  File "/usr/lib64/python3.14/multiprocessing/managers.py", line 824, in _callmethod
    kind, result = conn.recv()
                   ~~~~~~~~~^^
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 252, in recv
    buf = self._recv_bytes()
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 433, in _recv_bytes
    buf = self._recv(4)
  File "/usr/lib64/python3.14/multiprocessing/connection.py", line 398, in _recv
    chunk = read(handle, to_read)
KeyboardInterrupt

----

----
setup
test_timeout
test_timeout_finished
test_pass
teardown


--------------------- >> end captured stdout << ----------------------

======================================================================
FAIL: runTest (test_multiprocessing.test_process_timeout.TestMPTimeout.runTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/python-nose-1.3.7-build/nose-1.3.7/build/tests/functional_tests/test_multiprocessing/test_process_timeout.py", line 10, in runTest
    assert "TimedOutException: 'timeout.test_timeout'" in self.output
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError

----------------------------------------------------------------------
Ran 385 tests in 30.311s

FAILED (SKIP=9, failures=4)

https://docs.python.org/3.14/whatsnew/3.14.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.14/fedora-rawhide-x86_64/08189211-python-nose/

For all our attempts to build python-nose with Python 3.14, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.14/package/python-nose/

Testing and mass rebuild of packages is happening in copr.
You can follow these instructions to test locally in mock if your package builds with Python 3.14:
https://copr.fedorainfracloud.org/coprs/g/python/python3.14/

Let us know here if you have any questions.

Python 3.14 is planned to be included in Fedora 43.
To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.14.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires),
so if this package is required a lot, it's important for us to get it fixed soon.

We'd appreciate help from the people who know this package best,
but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Miro Hrončok 2024-11-01 14:51:06 UTC
I'm inclined to let this one finally rest in piece. I've been adding downstream-only Python compatibility patches since Python 3.5.


If something important is blocked on nose, I'd rather spend my time on unblocking that thing.

Comment 2 Miro Hrončok 2024-12-03 23:26:02 UTC
ipython_genutils still uses nose and is used by nbclassic and mu.

I opened https://src.fedoraproject.org/rpms/python-ipython_genutils/pull-request/5

Comment 3 Miro Hrončok 2024-12-09 15:09:53 UTC
There seems to be a rather giant dep tree (including systemtap, Pythons themselves, glusterfs, qemu...) using python-pytest-mpl which BuildRequires nose but does not need it: https://src.fedoraproject.org/rpms/python-pytest-mpl/pull-request/1

Comment 15 Aoife Moloney 2025-02-26 13:14:17 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 42 development cycle.
Changing version to 42.

Comment 16 Miro Hrončok 2025-03-12 08:46:37 UTC
python-nose is retired


Note You need to log in before you can comment on or make changes to this bug.