1
0
mirror of https://github.com/django/django.git synced 2025-11-07 07:15:35 +00:00

Made RemoteTestResultTest.test_pickle_errors_detection() compatible with tblib 3.2+.

tblib 3.2+ makes exception subclasses with __init__() and the default
__reduce__() picklable. This broke the test for
RemoteTestResult._confirm_picklable(), which expects a specific
exception to fail unpickling.

https://github.com/ionelmc/python-tblib/blob/master/CHANGELOG.rst#320-2025-10-21

This fix defines ExceptionThatFailsUnpickling.__reduce__() in a way
that pickle.dumps(obj) succeeds, but pickle.loads(pickle.dumps(obj))
raises TypeError.

Refs #27301. This preserves the intent of the regression test from
52188a5ca6 without skipping it.
This commit is contained in:
Mariusz Felisiak
2025-10-21 21:11:44 +02:00
committed by nessita
parent a0323a0c44
commit 548209e620

View File

@@ -32,6 +32,12 @@ class ExceptionThatFailsUnpickling(Exception):
def __init__(self, arg):
super().__init__()
def __reduce__(self):
# tblib 3.2+ makes exception subclasses picklable by default.
# Return (cls, ()) so the constructor fails on unpickle, preserving
# the needed behavior for test_pickle_errors_detection.
return (self.__class__, ())
class ParallelTestRunnerTest(SimpleTestCase):
"""
@@ -170,6 +176,8 @@ class RemoteTestResultTest(SimpleTestCase):
result = RemoteTestResult()
result._confirm_picklable(picklable_error)
# The exception can be pickled but not unpickled.
pickle.dumps(not_unpicklable_error)
msg = "__init__() missing 1 required positional argument"
with self.assertRaisesMessage(TypeError, msg):
result._confirm_picklable(not_unpicklable_error)