mirror of
https://github.com/python/cpython.git
synced 2025-11-11 19:12:05 +00:00
[3.14] gh-136285: Improve pickle protocol testing in test_interpreters (GH-136286) (#136333)
gh-136285: Improve `pickle` protocol testing in `test_interpreters` (GH-136286)
(cherry picked from commit 06e347b846)
Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
parent
2b2cf81a6c
commit
d86ca7b610
7 changed files with 28 additions and 30 deletions
|
|
@ -146,12 +146,8 @@ def __del__(self):
|
||||||
self._decref()
|
self._decref()
|
||||||
|
|
||||||
# for pickling:
|
# for pickling:
|
||||||
def __getnewargs__(self):
|
def __reduce__(self):
|
||||||
return (self._id,)
|
return (type(self), (self._id,))
|
||||||
|
|
||||||
# for pickling:
|
|
||||||
def __getstate__(self):
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _decref(self):
|
def _decref(self):
|
||||||
if not self._ownsref:
|
if not self._ownsref:
|
||||||
|
|
|
||||||
|
|
@ -130,12 +130,8 @@ def __hash__(self):
|
||||||
return hash(self._id)
|
return hash(self._id)
|
||||||
|
|
||||||
# for pickling:
|
# for pickling:
|
||||||
def __getnewargs__(self):
|
def __reduce__(self):
|
||||||
return (self._id,)
|
return (type(self), (self._id,))
|
||||||
|
|
||||||
# for pickling:
|
|
||||||
def __getstate__(self):
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _set_unbound(self, op, items=None):
|
def _set_unbound(self, op, items=None):
|
||||||
assert not hasattr(self, '_unbound')
|
assert not hasattr(self, '_unbound')
|
||||||
|
|
|
||||||
|
|
@ -105,12 +105,8 @@ def __eq__(self, other):
|
||||||
return other._id == self._id
|
return other._id == self._id
|
||||||
|
|
||||||
# for pickling:
|
# for pickling:
|
||||||
def __getnewargs__(self):
|
def __reduce__(self):
|
||||||
return (int(self._id),)
|
return (type(self), (int(self._id),))
|
||||||
|
|
||||||
# for pickling:
|
|
||||||
def __getstate__(self):
|
|
||||||
return None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
|
|
|
||||||
|
|
@ -412,9 +412,11 @@ def test_equality(self):
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
interp = interpreters.create()
|
interp = interpreters.create()
|
||||||
data = pickle.dumps(interp)
|
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
unpickled = pickle.loads(data)
|
with self.subTest(protocol=protocol):
|
||||||
self.assertEqual(unpickled, interp)
|
data = pickle.dumps(interp, protocol)
|
||||||
|
unpickled = pickle.loads(data)
|
||||||
|
self.assertEqual(unpickled, interp)
|
||||||
|
|
||||||
|
|
||||||
class TestInterpreterIsRunning(TestBase):
|
class TestInterpreterIsRunning(TestBase):
|
||||||
|
|
|
||||||
|
|
@ -121,9 +121,11 @@ def test_equality(self):
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
ch, _ = channels.create()
|
ch, _ = channels.create()
|
||||||
data = pickle.dumps(ch)
|
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
unpickled = pickle.loads(data)
|
with self.subTest(protocol=protocol):
|
||||||
self.assertEqual(unpickled, ch)
|
data = pickle.dumps(ch, protocol)
|
||||||
|
unpickled = pickle.loads(data)
|
||||||
|
self.assertEqual(unpickled, ch)
|
||||||
|
|
||||||
|
|
||||||
class TestSendChannelAttrs(TestBase):
|
class TestSendChannelAttrs(TestBase):
|
||||||
|
|
@ -152,9 +154,11 @@ def test_equality(self):
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
_, ch = channels.create()
|
_, ch = channels.create()
|
||||||
data = pickle.dumps(ch)
|
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
unpickled = pickle.loads(data)
|
with self.subTest(protocol=protocol):
|
||||||
self.assertEqual(unpickled, ch)
|
data = pickle.dumps(ch, protocol)
|
||||||
|
unpickled = pickle.loads(data)
|
||||||
|
self.assertEqual(unpickled, ch)
|
||||||
|
|
||||||
|
|
||||||
class TestSendRecv(TestBase):
|
class TestSendRecv(TestBase):
|
||||||
|
|
|
||||||
|
|
@ -189,9 +189,11 @@ def test_equality(self):
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
queue = queues.create()
|
queue = queues.create()
|
||||||
data = pickle.dumps(queue)
|
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
unpickled = pickle.loads(data)
|
with self.subTest(protocol=protocol):
|
||||||
self.assertEqual(unpickled, queue)
|
data = pickle.dumps(queue, protocol)
|
||||||
|
unpickled = pickle.loads(data)
|
||||||
|
self.assertEqual(unpickled, queue)
|
||||||
|
|
||||||
|
|
||||||
class TestQueueOps(TestBase):
|
class TestQueueOps(TestBase):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix pickling failures for protocols 0 and 1 for many objects realted to
|
||||||
|
subinterpreters.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue