Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/env python## Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements. See the NOTICE file# distributed with this work for additional information# regarding copyright ownership. The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing,# software distributed under the License is distributed on an# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY# KIND, either express or implied. See the License for the# specific language governing permissions and limitations# under the License.#import sys, globsys.path.insert(0, './gen-py')sys.path.insert(0, glob.glob('../../lib/py/build/lib.*')[0])from ThriftTest import ThriftTestfrom ThriftTest.ttypes import *from thrift.transport import TTransportfrom thrift.transport import TSocketfrom thrift.transport import THttpClientfrom thrift.protocol import TBinaryProtocolimport unittestimport timefrom optparse import OptionParserparser = OptionParser()parser.set_defaults(framed=False, http_path=None, verbose=1, host='localhost', port=9090)parser.add_option("--port", type="int", dest="port",help="connect to server at port")parser.add_option("--host", type="string", dest="host",help="connect to server")parser.add_option("--framed", action="store_true", dest="framed",help="use framed transport")parser.add_option("--http", dest="http_path",help="Use the HTTP transport with the specified path")parser.add_option('-v', '--verbose', action="store_const",dest="verbose", const=2,help="verbose output")parser.add_option('-q', '--quiet', action="store_const",dest="verbose", const=0,help="minimal output")options, args = parser.parse_args()class AbstractTest(unittest.TestCase):def setUp(self):if options.http_path:self.transport = THttpClient.THttpClient(options.host, options.port, options.http_path)else:socket = TSocket.TSocket(options.host, options.port)# frame or buffer depending upon argsif options.framed:self.transport = TTransport.TFramedTransport(socket)else:self.transport = TTransport.TBufferedTransport(socket)self.transport.open()protocol = self.protocol_factory.getProtocol(self.transport)self.client = ThriftTest.Client(protocol)def tearDown(self):# Close!self.transport.close()def testVoid(self):self.client.testVoid()def testString(self):self.assertEqual(self.client.testString('Python'), 'Python')def testByte(self):self.assertEqual(self.client.testByte(63), 63)def testI32(self):self.assertEqual(self.client.testI32(-1), -1)self.assertEqual(self.client.testI32(0), 0)def testI64(self):self.assertEqual(self.client.testI64(-34359738368), -34359738368)def testDouble(self):self.assertEqual(self.client.testDouble(-5.235098235), -5.235098235)def testStruct(self):x = Xtruct()x.string_thing = "Zero"x.byte_thing = 1x.i32_thing = -3x.i64_thing = -5y = self.client.testStruct(x)self.assertEqual(y.string_thing, "Zero")self.assertEqual(y.byte_thing, 1)self.assertEqual(y.i32_thing, -3)self.assertEqual(y.i64_thing, -5)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')try:self.client.testException("throw_undeclared")self.fail("should have thrown exception")except Exception: # type is undefinedpassdef testOneway(self):start = time.time()self.client.testOneway(0.5)end = time.time()self.assertTrue(end - start < 0.2,"oneway sleep took %f sec" % (end - start))def testOnewayThenNormal(self):self.client.testOneway(0.5)self.assertEqual(self.client.testString('Python'), 'Python')class NormalBinaryTest(AbstractTest):protocol_factory = TBinaryProtocol.TBinaryProtocolFactory()class AcceleratedBinaryTest(AbstractTest):protocol_factory = TBinaryProtocol.TBinaryProtocolAcceleratedFactory()def suite():suite = unittest.TestSuite()loader = unittest.TestLoader()suite.addTest(loader.loadTestsFromTestCase(NormalBinaryTest))suite.addTest(loader.loadTestsFromTestCase(AcceleratedBinaryTest))return suiteclass OwnArgsTestProgram(unittest.TestProgram):def parseArgs(self, argv):if args:self.testNames = argselse:self.testNames = (self.defaultTest,)self.createTests()if __name__ == "__main__":OwnArgsTestProgram(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=2))