core: fix serialization of empty bytes() on 3.x.
This commit is contained in:
parent
dd62009f70
commit
04e138e060
|
@ -425,6 +425,8 @@ class Message(object):
|
||||||
return Kwargs
|
return Kwargs
|
||||||
elif module == '_codecs' and func == 'encode':
|
elif module == '_codecs' and func == 'encode':
|
||||||
return self._unpickle_bytes
|
return self._unpickle_bytes
|
||||||
|
elif module == '__builtin__' and func == 'bytes':
|
||||||
|
return BytesType
|
||||||
raise StreamError('cannot unpickle %r/%r', module, func)
|
raise StreamError('cannot unpickle %r/%r', module, func)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
try:
|
||||||
|
from io import StringIO
|
||||||
|
from io import BytesIO
|
||||||
|
except ImportError:
|
||||||
|
from StringIO import StringIO as StringIO
|
||||||
|
from StringIO import StringIO as BytesIO
|
||||||
|
|
||||||
|
import unittest2
|
||||||
|
|
||||||
|
import mitogen.core
|
||||||
|
from mitogen.core import b
|
||||||
|
|
||||||
|
|
||||||
|
def roundtrip(v):
|
||||||
|
msg = mitogen.core.Message.pickled(v)
|
||||||
|
return mitogen.core.Message(data=msg.data).unpickle()
|
||||||
|
|
||||||
|
|
||||||
|
class BlobTest(unittest2.TestCase):
|
||||||
|
klass = mitogen.core.Blob
|
||||||
|
|
||||||
|
# Python 3 pickle protocol 2 does weird stuff depending on whether an empty
|
||||||
|
# or nonempty bytes is being serialized. For non-empty, it yields a
|
||||||
|
# _codecs.encode() call. For empty, it yields a bytes() call.
|
||||||
|
|
||||||
|
def test_nonempty_bytes(self):
|
||||||
|
v = mitogen.core.Blob(b('dave'))
|
||||||
|
self.assertEquals(b('dave'), roundtrip(v))
|
||||||
|
|
||||||
|
def test_empty_bytes(self):
|
||||||
|
v = mitogen.core.Blob(b(''))
|
||||||
|
self.assertEquals(b(''), roundtrip(v))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest2.main()
|
Loading…
Reference in New Issue