|
|
|
import pickle
|
|
|
|
|
|
|
|
import mitogen.core
|
|
|
|
from mitogen.core import b
|
|
|
|
|
|
|
|
import testlib
|
|
|
|
|
|
|
|
|
|
|
|
class PickleTest(testlib.RouterMixin, testlib.TestCase):
|
|
|
|
klass = mitogen.core.Context
|
|
|
|
|
|
|
|
# Ensure Context can be round-tripped by regular pickle in addition to
|
|
|
|
# Mitogen's hacked pickle. Users may try to call pickle on a Context in
|
|
|
|
# strange circumstances, and it's often used to glue pieces of an app
|
|
|
|
# together (e.g. Ansible).
|
|
|
|
|
|
|
|
def test_mitogen_roundtrip(self):
|
|
|
|
c = self.router.local()
|
|
|
|
r = mitogen.core.Receiver(self.router)
|
|
|
|
r.to_sender().send(c)
|
|
|
|
c2 = r.get().unpickle()
|
|
|
|
self.assertEqual(None, c2.router)
|
|
|
|
self.assertEqual(c.context_id, c2.context_id)
|
|
|
|
self.assertEqual(c.name, c2.name)
|
|
|
|
|
|
|
|
def test_vanilla_roundtrip(self):
|
|
|
|
c = self.router.local()
|
|
|
|
c2 = pickle.loads(pickle.dumps(c))
|
|
|
|
self.assertEqual(None, c2.router)
|
|
|
|
self.assertEqual(c.context_id, c2.context_id)
|
|
|
|
self.assertEqual(c.name, c2.name)
|