mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 02:45:22 +00:00
Python automated test patch
Summary: Submitted by Ben Maurer Reviewed By: dreiss Test Plan: Automated python testing for Thrift, lovely. Revert: OK DiffCamp Revision: 737 git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665293 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6fc7be28bb
commit
5299a959e0
@ -1,4 +1,8 @@
|
||||
DESTDIR ?= /
|
||||
EXTRA_DIST = bootstrap.sh cleanup.sh setup.py LICENSE src
|
||||
|
||||
all:
|
||||
$(PYTHON) setup.py build
|
||||
|
||||
# We're ignoring prefix here because site-packages seems to be
|
||||
# the equivalent of /usr/local/lib in Python land.
|
||||
@ -7,4 +11,6 @@ DESTDIR ?= /
|
||||
install-exec-hook:
|
||||
$(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PY_PREFIX) $(PYTHON_SETUPUTIL_ARGS)
|
||||
|
||||
EXTRA_DIST = bootstrap.sh cleanup.sh setup.py LICENSE src
|
||||
clean-generic:
|
||||
rm -rf build
|
||||
|
||||
|
@ -90,6 +90,8 @@ class TThreadedServer(TServer):
|
||||
client = self.serverTransport.accept()
|
||||
t = threading.Thread(target = self.handle, args=(client,))
|
||||
t.start()
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except Exception, x:
|
||||
print '%s, %s, %s,' % (type(x), x, traceback.format_exc())
|
||||
|
||||
|
16
test/py/RunClientServer.py
Normal file
16
test/py/RunClientServer.py
Normal file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
import signal
|
||||
|
||||
serverproc = subprocess.Popen([sys.executable, "TestServer.py"])
|
||||
try:
|
||||
|
||||
ret = subprocess.call([sys.executable, "TestClient.py"])
|
||||
if ret != 0:
|
||||
raise Exception("subprocess failed")
|
||||
finally:
|
||||
# fixme: should check that server didn't die
|
||||
os.kill(serverproc.pid, signal.SIGKILL)
|
@ -1,116 +1,102 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
sys.path.append('./gen-py')
|
||||
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
|
||||
from optparse import OptionParser
|
||||
|
||||
import hotshot
|
||||
from hotshot import stats
|
||||
prof = None
|
||||
|
||||
# Uncomment if you want to profile this biznizzy
|
||||
#prof = hotshot.Profile('hotshot_thrift_stats')
|
||||
#prof.start()
|
||||
parser = OptionParser()
|
||||
|
||||
host = 'localhost'
|
||||
port = 9090
|
||||
framed = False
|
||||
framedInput = True
|
||||
argi = 1
|
||||
parser.add_option("--port", type="int", dest="port", default=9090)
|
||||
parser.add_option("--host", type="string", dest="host", default='localhost')
|
||||
parser.add_option("--framed-input", action="store_true", dest="framed_input")
|
||||
parser.add_option("--framed-output", action="store_false", dest="framed_output")
|
||||
|
||||
# Parse args
|
||||
while argi < len(sys.argv):
|
||||
if sys.argv[argi] == '-h':
|
||||
parts = sys.argv[argi+1].split(':')
|
||||
host = parts[0]
|
||||
port = int(parts[1])
|
||||
argi += 1
|
||||
elif sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
|
||||
framed = True
|
||||
elif sys.argv[argi] == '-fo':
|
||||
framed = True
|
||||
framedInput = False
|
||||
argi += 1
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
# Make socket
|
||||
socket = TSocket.TSocket(host, port)
|
||||
class AbstractTest(unittest.TestCase):
|
||||
|
||||
# Frame or buffer depending upon args
|
||||
if framed:
|
||||
transport = TTransport.TFramedTransport(socket, framedInput, True)
|
||||
else:
|
||||
transport = TTransport.TBufferedTransport(socket)
|
||||
def setUp(self):
|
||||
global options
|
||||
|
||||
protocol = TBinaryProtocol.TBinaryProtocol(transport)
|
||||
client = ThriftTest.Client(protocol)
|
||||
socket = TSocket.TSocket(options.host, options.port)
|
||||
|
||||
# Connect!
|
||||
transport.open()
|
||||
# Frame or buffer depending upon args
|
||||
if options.framed_input or options.framed_output:
|
||||
self.transport = TTransport.TFramedTransport(socket, options.framed_input, options.framed_output)
|
||||
else:
|
||||
self.transport = TTransport.TBufferedTransport(socket)
|
||||
|
||||
# Start debug timing
|
||||
tstart = time.time()
|
||||
self.transport.open()
|
||||
|
||||
try:
|
||||
print "testVoid()"
|
||||
print client.testVoid()
|
||||
except TApplicationException, x:
|
||||
print x.message
|
||||
print x.type
|
||||
protocol = self.protocol_factory.getProtocol(self.transport)
|
||||
self.client = ThriftTest.Client(protocol)
|
||||
|
||||
print "testString('Python')"
|
||||
print client.testString('Python')
|
||||
def tearDown(self):
|
||||
# Close!
|
||||
self.transport.close()
|
||||
|
||||
print "testByte(63)"
|
||||
print client.testByte(63)
|
||||
def testVoid(self):
|
||||
self.client.testVoid()
|
||||
|
||||
print "testI32(-1)"
|
||||
print client.testI32(-1)
|
||||
def testString(self):
|
||||
self.assertEqual(self.client.testString('Python'), 'Python')
|
||||
|
||||
print "testI32(0)"
|
||||
print client.testI32(0)
|
||||
def testByte(self):
|
||||
self.assertEqual(self.client.testByte(63), 63)
|
||||
|
||||
print "testI64(-34359738368)"
|
||||
print client.testI64(-34359738368)
|
||||
def testI32(self):
|
||||
self.assertEqual(self.client.testI32(-1), -1)
|
||||
self.assertEqual(self.client.testI32(0), 0)
|
||||
|
||||
print "testDouble(-5.235098235)"
|
||||
print client.testDouble(-5.235098235)
|
||||
def testI64(self):
|
||||
self.assertEqual(self.client.testI64(-34359738368), -34359738368)
|
||||
|
||||
print "testStruct({Zero, 1, -3, -5})"
|
||||
x = Xtruct()
|
||||
x.string_thing = "Zero"
|
||||
x.byte_thing = 1
|
||||
x.i32_thing = -3
|
||||
x.i64_thing = -5
|
||||
x = client.testStruct(x)
|
||||
print "{%s, %d, %d, %d}" % (x.string_thing, x.byte_thing, x.i32_thing, x.i64_thing)
|
||||
def testDouble(self):
|
||||
self.assertEqual(self.client.testDouble(-5.235098235), -5.235098235)
|
||||
|
||||
print "testException('Safe')"
|
||||
print client.testException('Safe')
|
||||
def testStruct(self):
|
||||
x = Xtruct()
|
||||
x.string_thing = "Zero"
|
||||
x.byte_thing = 1
|
||||
x.i32_thing = -3
|
||||
x.i64_thing = -5
|
||||
y = self.client.testStruct(x)
|
||||
|
||||
try:
|
||||
print "textException('Xception')"
|
||||
print client.testException('Xception')
|
||||
self.assertEqual(y.string_thing, "Zero")
|
||||
self.assertEqual(y.byte_thing, 1)
|
||||
self.assertEqual(y.i32_thing, -3)
|
||||
self.assertEqual(y.i64_thing, -5)
|
||||
|
||||
except Xception, x:
|
||||
print "Xception (%d, %s)" % (x.errorCode, x.message)
|
||||
def testException(self):
|
||||
self.client.testException('Safe')
|
||||
try:
|
||||
self.client.testException('Xception')
|
||||
self.fail("should have gotten exception")
|
||||
except Xception, x:
|
||||
self.assertEqual(x.errorCode, 1001)
|
||||
self.assertEqual(x.message, 'Xception')
|
||||
|
||||
tend = time.time()
|
||||
ttotal = (tend-tstart)*1000
|
||||
print "Total time: %f ms" % (ttotal)
|
||||
class NormalBinaryTest(AbstractTest):
|
||||
protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()
|
||||
|
||||
# Close!
|
||||
transport.close()
|
||||
class AcceleratedBinaryTest(AbstractTest):
|
||||
protocol_factory = TBinaryProtocol.TBinaryProtocolAcceleratedFactory()
|
||||
|
||||
# Profiler output
|
||||
if prof != None:
|
||||
prof.stop()
|
||||
prof.close()
|
||||
s = stats.load('hotshot_thrift_stats')
|
||||
s.sort_stats('time').print_stats()
|
||||
suite = unittest.TestSuite()
|
||||
loader = unittest.TestLoader()
|
||||
|
||||
suite.addTest(loader.loadTestsFromTestCase(NormalBinaryTest))
|
||||
suite.addTest(loader.loadTestsFromTestCase(AcceleratedBinaryTest))
|
||||
|
||||
testRunner = unittest.TextTestRunner(verbosity=2)
|
||||
testRunner.run(suite)
|
||||
|
@ -1,7 +1,8 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
sys.path.append('./gen-py')
|
||||
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 *
|
||||
|
Loading…
Reference in New Issue
Block a user