[Bug 2143758] Re: apport 2.33.1-0ubuntu4 FTBFS - PicklingIssue in Tests
Thomas Ward
2143758 at bugs.launchpad.net
Tue Mar 10 00:10:45 UTC 2026
The patch provided by Carlos works to fix *this* issue, but there's
additional remaining issues, likely due to the Python 3.14 transition.
(1) There are multiple DeprecationWarnings that get called and fail out
tests. Fixable by passing `-p no:warnings` to PyTest in d/rules
(2) Actual test errors that I'm not sure how to fix:
---
=================================== FAILURES ===================================
_______________ TestApportCheckreports.test_has_no_system_report _______________
self =
<tests.integration.test_apport_checkreports.TestApportCheckreports
testMethod=test_has_no_system_report>
def test_has_no_system_report(self) -> None:
self._write_report("_bin_sleep.1000.crash")
> self._call(args=["--system"], expected_returncode=1)
tests/integration/test_apport_checkreports.py:68:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/integration/test_apport_checkreports.py:53: in _call
self.assertEqual(process.returncode, expected_returncode)
E AssertionError: 0 != 1
__________________________ T.test_get_system_reports ___________________________
self = <tests.integration.test_fileutils.T
testMethod=test_get_system_reports>
def test_get_system_reports(self) -> None:
"""get_all_system_reports() and get_new_system_reports()"""
self.assertEqual(apport.fileutils.get_all_reports(), [])
self.assertEqual(apport.fileutils.get_all_system_reports(), [])
if os.getuid() == 0:
tr = self._create_reports(True)
self.assertEqual(set(apport.fileutils.get_all_system_reports()), set(tr))
self.assertEqual(set(apport.fileutils.get_new_system_reports()), set(tr))
# now mark them as seen and check again
for r in tr:
apport.fileutils.mark_report_seen(r)
self.assertEqual(set(apport.fileutils.get_all_system_reports()), set(tr))
self.assertEqual(set(apport.fileutils.get_new_system_reports()), set([]))
else:
tr = [r for r in self._create_reports(True) if "inaccessible" not in r]
> self.assertEqual(set(apport.fileutils.get_all_system_reports()), set([]))
E AssertionError: Items in the first set but not the second:
E '/tmp/tmp5dty2st5/rep2.crash'
E '/tmp/tmp5dty2st5/rep1.crash'
E '/tmp/tmp5dty2st5/inaccessible.crash'
tests/integration/test_fileutils.py:236: AssertionError
=========================== short test summary info ============================
---
Any Apport expoerts who want to look at this feel free to do so and prod
it.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to apport in Ubuntu.
https://bugs.launchpad.net/bugs/2143758
Title:
apport 2.33.1-0ubuntu4 FTBFS - PicklingIssue in Tests
Status in apport package in Ubuntu:
Triaged
Bug description:
During the global rebuild of Apport (2.33.1-0ubuntu4) for
https://launchpad.net/bugs/2132257, it FTBFS with the following
errors:
=================================== FAILURES ===================================
__________ TestUnkillableShutdown.test_omit_all_processes_except_one ___________
self =
<tests.integration.test_unkillable_shutdown.TestUnkillableShutdown
testMethod=test_omit_all_processes_except_one>
def test_omit_all_processes_except_one(self) -> None:
"""unkillable_shutdown will write exactly one report."""
existing_pids = self._get_all_pids()
> with self._launch_process_with_different_session_id() as runner:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/integration/test_unkillable_shutdown.py:98:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.14/contextlib.py:141: in __enter__
return next(self.gen)
^^^^^^^^^^^^^^
tests/integration/test_unkillable_shutdown.py:79: in _launch_process_with_different_session_id
runner.start()
/usr/lib/python3.14/multiprocessing/process.py:121: in start
self._popen = self._Popen(self)
^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/context.py:224: in _Popen
return _default_context.get_context().Process._Popen(process_obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/context.py:300: in _Popen
return Popen(process_obj)
^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/popen_forkserver.py:35: in __init__
super().__init__(process_obj)
/usr/lib/python3.14/multiprocessing/popen_fork.py:20: in __init__
self._launch(process_obj)
/usr/lib/python3.14/multiprocessing/popen_forkserver.py:47: in _launch
reduction.dump(process_obj, buf)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
obj = <Process name='Process-1' parent=16049 initial>
file = <_io.BytesIO object at 0x762709abffb0>, protocol = None
def dump(obj, file, protocol=None):
'''Replacement for pickle.dump() using ForkingPickler.'''
> ForkingPickler(file, protocol).dump(obj)
E _pickle.PicklingError: Can't pickle local object <function TestUnkillableShutdown._launch_process_with_different_session_id.<locals>._run_test_executable at 0x76270951ce00>
E when serializing dict item '_target'
E when serializing multiprocessing.context.Process state
E when serializing multiprocessing.context.Process object
/usr/lib/python3.14/multiprocessing/reduction.py:60: PicklingError
__________________ TestUnkillableShutdown.test_write_reports ___________________
self =
<tests.integration.test_unkillable_shutdown.TestUnkillableShutdown
testMethod=test_write_reports>
def test_write_reports(self) -> None:
"""unkillable_shutdown will write reports."""
# Ensure that at least one process is honoured by unkillable_shutdown.
> with self._launch_process_with_different_session_id():
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/integration/test_unkillable_shutdown.py:108:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.14/contextlib.py:141: in __enter__
return next(self.gen)
^^^^^^^^^^^^^^
tests/integration/test_unkillable_shutdown.py:79: in _launch_process_with_different_session_id
runner.start()
/usr/lib/python3.14/multiprocessing/process.py:121: in start
self._popen = self._Popen(self)
^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/context.py:224: in _Popen
return _default_context.get_context().Process._Popen(process_obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/context.py:300: in _Popen
return Popen(process_obj)
^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/multiprocessing/popen_forkserver.py:35: in __init__
super().__init__(process_obj)
/usr/lib/python3.14/multiprocessing/popen_fork.py:20: in __init__
self._launch(process_obj)
/usr/lib/python3.14/multiprocessing/popen_forkserver.py:47: in _launch
reduction.dump(process_obj, buf)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
obj = <Process name='Process-2' parent=16049 initial>
file = <_io.BytesIO object at 0x76270a723100>, protocol = None
def dump(obj, file, protocol=None):
'''Replacement for pickle.dump() using ForkingPickler.'''
> ForkingPickler(file, protocol).dump(obj)
E _pickle.PicklingError: Can't pickle local object <function TestUnkillableShutdown._launch_process_with_different_session_id.<locals>._run_test_executable at 0x762709aae1f0>
E when serializing dict item '_target'
E when serializing multiprocessing.context.Process state
E when serializing multiprocessing.context.Process object
/usr/lib/python3.14/multiprocessing/reduction.py:60: PicklingError
---
The core problem is a Pickling Error on these two tests. This results
in an FTBFS case.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apport/+bug/2143758/+subscriptions
More information about the foundations-bugs
mailing list