mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 10:48:51 +00:00
9ff3b9d5fc
Summary: - Add a serialization test for forwards/backwards compatibility. - Hook the Python tests up to "make check". - Miscellaneous changes to the Python tests. Reviewed By: mcslee Test Plan: Ran the test. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665480 13f79535-47bb-0310-9956-ffa450edef68
103 lines
2.8 KiB
Python
Executable File
103 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys, glob
|
|
sys.path.insert(0, './gen-py')
|
|
sys.path.insert(0, glob.glob('../../lib/py/build/lib.*')[0])
|
|
|
|
from ThriftTest import ThriftTest
|
|
from ThriftTest.ttypes import *
|
|
from thrift.transport import TTransport
|
|
from thrift.transport import TSocket
|
|
from thrift.protocol import TBinaryProtocol
|
|
import unittest
|
|
import time
|
|
|
|
class TestEof(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
trans = TTransport.TMemoryBuffer()
|
|
prot = TBinaryProtocol.TBinaryProtocol(trans)
|
|
|
|
x = Xtruct()
|
|
x.string_thing = "Zero"
|
|
x.byte_thing = 0
|
|
|
|
x.write(prot)
|
|
|
|
x = Xtruct()
|
|
x.string_thing = "One"
|
|
x.byte_thing = 1
|
|
|
|
x.write(prot)
|
|
|
|
self.data = trans.getvalue()
|
|
|
|
def testTransportReadAll(self):
|
|
"""Test that readAll on any type of transport throws an EOFError"""
|
|
trans = TTransport.TMemoryBuffer(self.data)
|
|
trans.readAll(1)
|
|
|
|
try:
|
|
trans.readAll(10000)
|
|
except EOFError:
|
|
return
|
|
|
|
self.fail("Should have gotten EOFError")
|
|
|
|
def eofTestHelper(self, pfactory):
|
|
trans = TTransport.TMemoryBuffer(self.data)
|
|
prot = pfactory.getProtocol(trans)
|
|
|
|
x = Xtruct()
|
|
x.read(prot)
|
|
self.assertEqual(x.string_thing, "Zero")
|
|
self.assertEqual(x.byte_thing, 0)
|
|
|
|
x = Xtruct()
|
|
x.read(prot)
|
|
self.assertEqual(x.string_thing, "One")
|
|
self.assertEqual(x.byte_thing, 1)
|
|
|
|
try:
|
|
x = Xtruct()
|
|
x.read(prot)
|
|
except EOFError:
|
|
return
|
|
|
|
self.fail("Should have gotten EOFError")
|
|
|
|
def eofTestHelperStress(self, pfactory):
|
|
"""Teest the ability of TBinaryProtocol to deal with the removal of every byte in the file"""
|
|
# TODO: we should make sure this covers more of the code paths
|
|
|
|
for i in xrange(0, len(self.data) + 1):
|
|
trans = TTransport.TMemoryBuffer(self.data[0:i])
|
|
prot = pfactory.getProtocol(trans)
|
|
try:
|
|
x = Xtruct()
|
|
x.read(prot)
|
|
x.read(prot)
|
|
x.read(prot)
|
|
except EOFError:
|
|
continue
|
|
self.fail("Should have gotten an EOFError")
|
|
|
|
def testBinaryProtocolEof(self):
|
|
"""Test that TBinaryProtocol throws an EOFError when it reaches the end of the stream"""
|
|
self.eofTestHelper(TBinaryProtocol.TBinaryProtocolFactory())
|
|
self.eofTestHelperStress(TBinaryProtocol.TBinaryProtocolFactory())
|
|
|
|
def testBinaryProtocolAcceleratedEof(self):
|
|
"""Test that TBinaryProtocolAccelerated throws an EOFError when it reaches the end of the stream"""
|
|
self.eofTestHelper(TBinaryProtocol.TBinaryProtocolAcceleratedFactory())
|
|
self.eofTestHelperStress(TBinaryProtocol.TBinaryProtocolAcceleratedFactory())
|
|
|
|
def suite():
|
|
suite = unittest.TestSuite()
|
|
loader = unittest.TestLoader()
|
|
suite.addTest(loader.loadTestsFromTestCase(TestEof))
|
|
return suite
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=2))
|