mirror of
https://github.com/django/django.git
synced 2026-02-09 02:49:25 +08:00
[5.1.x] 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 from52188a5ca6without skipping it. Backport of548209e620from main.
This commit is contained in:
committed by
Natalia
parent
a6294d7d26
commit
c361494cbb
@@ -21,6 +21,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):
|
||||
"""
|
||||
@@ -109,6 +115,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)
|
||||
|
||||
Reference in New Issue
Block a user