blob: 5b858ef34b3ed8aaf9c3c49eaf1c9be89ed1215f [file] [log] [blame]
Mark Slee57cc25e2007-02-28 21:43:54 +00001#!/usr/bin/env python
Nobuaki Sukegawa64b8f6c2015-10-10 02:12:48 +09002# -*- coding: utf-8 -*-
David Reissea2cba82009-03-30 21:35:00 +00003#
4# Licensed to the Apache Software Foundation (ASF) under one
5# or more contributor license agreements. See the NOTICE file
6# distributed with this work for additional information
7# regarding copyright ownership. The ASF licenses this file
8# to you under the Apache License, Version 2.0 (the
9# "License"); you may not use this file except in compliance
10# with the License. You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing,
15# software distributed under the License is distributed on an
16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17# KIND, either express or implied. See the License for the
18# specific language governing permissions and limitations
19# under the License.
20#
21
Jens Geyerd629ea02015-09-23 21:16:50 +020022import glob
23import os
24import sys
Mark Slee57cc25e2007-02-28 21:43:54 +000025import time
Jens Geyerd629ea02015-09-23 21:16:50 +020026import unittest
Mark Slee5299a952007-10-05 00:13:24 +000027from optparse import OptionParser
Mark Slee57cc25e2007-02-28 21:43:54 +000028
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +090029SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
30ROOT_DIR = os.path.dirname(os.path.dirname(SCRIPT_DIR))
31DEFAULT_LIBDIR_GLOB = os.path.join(ROOT_DIR, 'lib', 'py', 'build', 'lib.*')
Roger Meierf4eec7a2011-09-11 18:16:21 +000032
Jens Geyerd629ea02015-09-23 21:16:50 +020033
Mark Slee5299a952007-10-05 00:13:24 +000034class AbstractTest(unittest.TestCase):
Mark Slee5299a952007-10-05 00:13:24 +000035 def setUp(self):
David Reissf78ec2b2009-01-31 21:59:32 +000036 if options.http_path:
Bryan Duxbury16066592011-03-22 18:06:04 +000037 self.transport = THttpClient.THttpClient(options.host, port=options.port, path=options.http_path)
Mark Slee5299a952007-10-05 00:13:24 +000038 else:
Bryan Duxbury16066592011-03-22 18:06:04 +000039 if options.ssl:
40 from thrift.transport import TSSLSocket
41 socket = TSSLSocket.TSSLSocket(options.host, options.port, validate=False)
42 else:
43 socket = TSocket.TSocket(options.host, options.port)
David Reissf78ec2b2009-01-31 21:59:32 +000044 # frame or buffer depending upon args
Roger Meier76150722014-05-31 22:22:07 +020045 self.transport = TTransport.TBufferedTransport(socket)
46 if options.trans == 'framed':
David Reissf78ec2b2009-01-31 21:59:32 +000047 self.transport = TTransport.TFramedTransport(socket)
Roger Meier76150722014-05-31 22:22:07 +020048 elif options.trans == 'buffered':
David Reissf78ec2b2009-01-31 21:59:32 +000049 self.transport = TTransport.TBufferedTransport(socket)
Roger Meier76150722014-05-31 22:22:07 +020050 elif options.trans == '':
51 raise AssertionError('Unknown --transport option: %s' % options.trans)
Bryan Duxbury16066592011-03-22 18:06:04 +000052 if options.zlib:
53 self.transport = TZlibTransport.TZlibTransport(self.transport, 9)
Mark Slee5299a952007-10-05 00:13:24 +000054 self.transport.open()
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +090055 protocol = self.get_protocol(self.transport)
jfarrelldbf2bb52014-07-09 23:37:12 -040056 self.client = ThriftTest.Client(protocol)
David Reiss0c90f6f2008-02-06 22:18:40 +000057
Mark Slee5299a952007-10-05 00:13:24 +000058 def tearDown(self):
Mark Slee5299a952007-10-05 00:13:24 +000059 self.transport.close()
Mark Sleefc89d392006-09-04 00:04:39 +000060
Mark Slee5299a952007-10-05 00:13:24 +000061 def testVoid(self):
Jens Geyerd629ea02015-09-23 21:16:50 +020062 print('testVoid')
Mark Slee5299a952007-10-05 00:13:24 +000063 self.client.testVoid()
David Reiss0c90f6f2008-02-06 22:18:40 +000064
Mark Slee5299a952007-10-05 00:13:24 +000065 def testString(self):
Jens Geyerd629ea02015-09-23 21:16:50 +020066 print('testString')
Bryan Duxbury16066592011-03-22 18:06:04 +000067 self.assertEqual(self.client.testString('Python' * 20), 'Python' * 20)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +000068 self.assertEqual(self.client.testString(''), '')
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090069 s1 = u'\b\t\n/\\\\\r{}:パイソン"'
70 s2 = u"""Afrikaans, Alemannisch, Aragonés, العربية, مصرى,
Nobuaki Sukegawa64b8f6c2015-10-10 02:12:48 +090071 Asturianu, Aymar aru, Azərbaycan, Башҡорт, Boarisch, Žemaitėška,
72 Беларуская, Беларуская (тарашкевіца), Български, Bamanankan,
73 বাংলা, Brezhoneg, Bosanski, Català, Mìng-dĕ̤ng-ngṳ̄, Нохчийн,
74 Cebuano, ᏣᎳᎩ, Česky, Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ, Чӑвашла, Cymraeg,
75 Dansk, Zazaki, ދިވެހިބަސް, Ελληνικά, Emiliàn e rumagnòl, English,
76 Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Võro, Føroyskt,
77 Français, Arpetan, Furlan, Frysk, Gaeilge, 贛語, Gàidhlig, Galego,
78 Avañe'ẽ, ગુજરાતી, Gaelg, עברית, हिन्दी, Fiji Hindi, Hrvatski,
79 Kreyòl ayisyen, Magyar, Հայերեն, Interlingua, Bahasa Indonesia,
80 Ilokano, Ido, Íslenska, Italiano, 日本語, Lojban, Basa Jawa,
81 ქართული, Kongo, Kalaallisut, ಕನ್ನಡ, 한국어, Къарачай-Малкъар,
82 Ripoarisch, Kurdî, Коми, Kernewek, Кыргызча, Latina, Ladino,
83 Lëtzebuergesch, Limburgs, Lingála, ລາວ, Lietuvių, Latviešu, Basa
84 Banyumasan, Malagasy, Македонски, മലയാളം, मराठी, مازِرونی, Bahasa
85 Melayu, Nnapulitano, Nedersaksisch, नेपाल भाषा, Nederlands, ‪
86 Norsk (nynorsk)‬, ‪Norsk (bokmål)‬, Nouormand, Diné bizaad,
87 Occitan, Иронау, Papiamentu, Deitsch, Polski, پنجابی, پښتو,
88 Norfuk / Pitkern, Português, Runa Simi, Rumantsch, Romani, Română,
89 Русский, Саха тыла, Sardu, Sicilianu, Scots, Sámegiella, Simple
90 English, Slovenčina, Slovenščina, Српски / Srpski, Seeltersk,
91 Svenska, Kiswahili, தமிழ், తెలుగు, Тоҷикӣ, ไทย, Türkmençe, Tagalog,
92 Türkçe, Татарча/Tatarça, Українська, اردو, Tiếng Việt, Volapük,
93 Walon, Winaray, 吴语, isiXhosa, ייִדיש, Yorùbá, Zeêuws, 中文,
94 Bân-lâm-gú, 粵語"""
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090095 if sys.version_info[0] == 2:
96 s1 = s1.encode('utf8')
97 s2 = s2.encode('utf8')
98 self.assertEqual(self.client.testString(s1), s1)
99 self.assertEqual(self.client.testString(s2), s2)
Mark Sleec9676562006-09-05 17:34:52 +0000100
Nobuaki Sukegawaa649e742015-09-21 13:53:25 +0900101 def testBool(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200102 print('testBool')
Nobuaki Sukegawaa649e742015-09-21 13:53:25 +0900103 self.assertEqual(self.client.testBool(True), True)
104 self.assertEqual(self.client.testBool(False), False)
105
Mark Slee5299a952007-10-05 00:13:24 +0000106 def testByte(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200107 print('testByte')
Mark Slee5299a952007-10-05 00:13:24 +0000108 self.assertEqual(self.client.testByte(63), 63)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000109 self.assertEqual(self.client.testByte(-127), -127)
Mark Sleec98d0502006-09-06 02:42:25 +0000110
Mark Slee5299a952007-10-05 00:13:24 +0000111 def testI32(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200112 print('testI32')
Mark Slee5299a952007-10-05 00:13:24 +0000113 self.assertEqual(self.client.testI32(-1), -1)
114 self.assertEqual(self.client.testI32(0), 0)
Mark Sleec9676562006-09-05 17:34:52 +0000115
Mark Slee5299a952007-10-05 00:13:24 +0000116 def testI64(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200117 print('testI64')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000118 self.assertEqual(self.client.testI64(1), 1)
Mark Slee5299a952007-10-05 00:13:24 +0000119 self.assertEqual(self.client.testI64(-34359738368), -34359738368)
Mark Sleec98d0502006-09-06 02:42:25 +0000120
Mark Slee5299a952007-10-05 00:13:24 +0000121 def testDouble(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200122 print('testDouble')
Mark Slee5299a952007-10-05 00:13:24 +0000123 self.assertEqual(self.client.testDouble(-5.235098235), -5.235098235)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000124 self.assertEqual(self.client.testDouble(0), 0)
125 self.assertEqual(self.client.testDouble(-1), -1)
Nobuaki Sukegawa228b3282015-10-10 03:11:49 +0900126 self.assertEqual(self.client.testDouble(-0.000341012439638598279), -0.000341012439638598279)
Mark Sleec9676562006-09-05 17:34:52 +0000127
Jens Geyerd629ea02015-09-23 21:16:50 +0200128 def testBinary(self):
129 if isinstance(self, JSONTest):
130 self.skipTest('JSON protocol does not handle binary correctly.')
131 print('testBinary')
132 val = bytearray([i for i in range(0, 256)])
133 self.assertEqual(bytearray(self.client.testBinary(bytes(val))), val)
134
Mark Slee5299a952007-10-05 00:13:24 +0000135 def testStruct(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200136 print('testStruct')
Mark Slee5299a952007-10-05 00:13:24 +0000137 x = Xtruct()
138 x.string_thing = "Zero"
139 x.byte_thing = 1
140 x.i32_thing = -3
141 x.i64_thing = -5
142 y = self.client.testStruct(x)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000143 self.assertEqual(y, x)
Mark Sleefc89d392006-09-04 00:04:39 +0000144
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000145 def testNest(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200146 print('testNest')
147 inner = Xtruct(string_thing="Zero", byte_thing=1, i32_thing=-3, i64_thing=-5)
Roger Meier85fb6de2012-11-02 00:05:42 +0000148 x = Xtruct2(struct_thing=inner, byte_thing=0, i32_thing=0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000149 y = self.client.testNest(x)
150 self.assertEqual(y, x)
151
152 def testMap(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200153 print('testMap')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900154 x = {0: 1, 1: 2, 2: 3, 3: 4, -1: -2}
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000155 y = self.client.testMap(x)
156 self.assertEqual(y, x)
157
158 def testSet(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200159 print('testSet')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000160 x = set([8, 1, 42])
161 y = self.client.testSet(x)
162 self.assertEqual(y, x)
163
164 def testList(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200165 print('testList')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000166 x = [1, 4, 9, -42]
167 y = self.client.testList(x)
168 self.assertEqual(y, x)
169
170 def testEnum(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900171 print('testEnum')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000172 x = Numberz.FIVE
173 y = self.client.testEnum(x)
174 self.assertEqual(y, x)
175
176 def testTypedef(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900177 print('testTypedef')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900178 x = 0xffffffffffffff # 7 bytes of 0xff
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000179 y = self.client.testTypedef(x)
180 self.assertEqual(y, x)
181
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900182 @unittest.skip('Cannot use dict as dict key')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000183 def testMapMap(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900184 print('testMapMap')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000185 # does not work: dict() is not a hashable type, so a dict() cannot be used as a key in another dict()
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900186 x = {{1: 10, 2: 20}, {1: 100, 2: 200, 3: 300}, {1: 1000, 2: 2000, 3: 3000, 4: 4000}}
187 y = self.client.testMapMap(x)
188 self.assertEqual(y, x)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000189
190 def testMulti(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900191 print('testMulti')
Roger Meier85fb6de2012-11-02 00:05:42 +0000192 xpected = Xtruct(string_thing='Hello2', byte_thing=74, i32_thing=0xff00ff, i64_thing=0xffffffffd0d0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000193 y = self.client.testMulti(xpected.byte_thing,
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900194 xpected.i32_thing,
195 xpected.i64_thing,
196 {0: 'abc'},
197 Numberz.FIVE,
198 0xf0f0f0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000199 self.assertEqual(y, xpected)
Mark Sleec9676562006-09-05 17:34:52 +0000200
Mark Slee5299a952007-10-05 00:13:24 +0000201 def testException(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900202 print('testException')
Mark Slee5299a952007-10-05 00:13:24 +0000203 self.client.testException('Safe')
204 try:
205 self.client.testException('Xception')
206 self.fail("should have gotten exception")
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900207 except Xception as x:
Mark Slee5299a952007-10-05 00:13:24 +0000208 self.assertEqual(x.errorCode, 1001)
209 self.assertEqual(x.message, 'Xception')
Roger Meier61188a42011-11-01 21:03:33 +0000210 # TODO ensure same behavior for repr within generated python variants
Roger Meierf4eec7a2011-09-11 18:16:21 +0000211 # ensure exception's repr method works
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900212 # x_repr = repr(x)
213 # self.assertEqual(x_repr, 'Xception(errorCode=1001, message=\'Xception\')')
Mark Sleec9676562006-09-05 17:34:52 +0000214
David Reissbcaa2ad2008-06-10 22:55:26 +0000215 try:
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900216 self.client.testException('TException')
217 self.fail("should have gotten exception")
218 except TException as x:
David Reissbcaa2ad2008-06-10 22:55:26 +0000219 pass
220
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900221 # Should not throw
222 self.client.testException('success')
223
224 def testMultiException(self):
225 print('testMultiException')
226 try:
227 self.client.testMultiException('Xception', 'ignore')
228 except Xception as ex:
229 self.assertEqual(ex.errorCode, 1001)
230 self.assertEqual(ex.message, 'This is an Xception')
231
232 try:
233 self.client.testMultiException('Xception2', 'ignore')
234 except Xception2 as ex:
235 self.assertEqual(ex.errorCode, 2002)
236 self.assertEqual(ex.struct_thing.string_thing, 'This is an Xception2')
237
238 y = self.client.testMultiException('success', 'foobar')
239 self.assertEqual(y.string_thing, 'foobar')
240
David Reiss6ce401d2009-03-24 20:01:58 +0000241 def testOneway(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900242 print('testOneway')
David Reissdb893b62008-02-18 02:11:48 +0000243 start = time.time()
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900244 self.client.testOneway(1) # type is int, not float
David Reissdb893b62008-02-18 02:11:48 +0000245 end = time.time()
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000246 self.assertTrue(end - start < 3,
David Reiss6ce401d2009-03-24 20:01:58 +0000247 "oneway sleep took %f sec" % (end - start))
Roger Meier76150722014-05-31 22:22:07 +0200248
Todd Lipconf5dea4c2009-12-03 01:18:44 +0000249 def testOnewayThenNormal(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900250 print('testOnewayThenNormal')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900251 self.client.testOneway(1) # type is int, not float
Todd Lipconf5dea4c2009-12-03 01:18:44 +0000252 self.assertEqual(self.client.testString('Python'), 'Python')
David Reissdb893b62008-02-18 02:11:48 +0000253
Roger Meier879cab22014-05-03 17:51:21 +0200254
Mark Slee5299a952007-10-05 00:13:24 +0000255class NormalBinaryTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900256 def get_protocol(self, transport):
257 return TBinaryProtocol.TBinaryProtocolFactory().getProtocol(transport)
Mark Sleefc89d392006-09-04 00:04:39 +0000258
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900259
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000260class CompactTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900261 def get_protocol(self, transport):
262 return TCompactProtocol.TCompactProtocolFactory().getProtocol(transport)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000263
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900264
Roger Meier85fb6de2012-11-02 00:05:42 +0000265class JSONTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900266 def get_protocol(self, transport):
267 return TJSONProtocol.TJSONProtocolFactory().getProtocol(transport)
Roger Meier85fb6de2012-11-02 00:05:42 +0000268
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900269
Mark Slee5299a952007-10-05 00:13:24 +0000270class AcceleratedBinaryTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900271 def get_protocol(self, transport):
272 return TBinaryProtocol.TBinaryProtocolAcceleratedFactory().getProtocol(transport)
Mark Sleea3302652006-10-25 19:03:32 +0000273
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900274
David Reiss9ff3b9d2008-02-15 01:10:23 +0000275def suite():
276 suite = unittest.TestSuite()
277 loader = unittest.TestLoader()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900278 if options.proto == 'binary': # look for --proto on cmdline
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000279 suite.addTest(loader.loadTestsFromTestCase(NormalBinaryTest))
280 elif options.proto == 'accel':
281 suite.addTest(loader.loadTestsFromTestCase(AcceleratedBinaryTest))
282 elif options.proto == 'compact':
283 suite.addTest(loader.loadTestsFromTestCase(CompactTest))
Roger Meier85fb6de2012-11-02 00:05:42 +0000284 elif options.proto == 'json':
285 suite.addTest(loader.loadTestsFromTestCase(JSONTest))
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000286 else:
Roger Meier76150722014-05-31 22:22:07 +0200287 raise AssertionError('Unknown protocol given with --protocol: %s' % options.proto)
David Reiss9ff3b9d2008-02-15 01:10:23 +0000288 return suite
Mark Slee5299a952007-10-05 00:13:24 +0000289
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900290
David Reiss74421272008-11-07 23:09:31 +0000291class OwnArgsTestProgram(unittest.TestProgram):
292 def parseArgs(self, argv):
293 if args:
294 self.testNames = args
295 else:
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900296 self.testNames = ([self.defaultTest])
David Reiss74421272008-11-07 23:09:31 +0000297 self.createTests()
298
David Reiss9ff3b9d2008-02-15 01:10:23 +0000299if __name__ == "__main__":
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900300 parser = OptionParser()
301 parser.add_option('--libpydir', type='string', dest='libpydir',
302 help='include this directory in sys.path for locating library code')
303 parser.add_option('--genpydir', type='string', dest='genpydir',
304 default='gen-py',
305 help='include this directory in sys.path for locating generated code')
306 parser.add_option("--port", type="int", dest="port",
307 help="connect to server at port")
308 parser.add_option("--host", type="string", dest="host",
309 help="connect to server")
310 parser.add_option("--zlib", action="store_true", dest="zlib",
311 help="use zlib wrapper for compressed transport")
312 parser.add_option("--ssl", action="store_true", dest="ssl",
313 help="use SSL for encrypted transport")
314 parser.add_option("--http", dest="http_path",
315 help="Use the HTTP transport with the specified path")
316 parser.add_option('-v', '--verbose', action="store_const",
317 dest="verbose", const=2,
318 help="verbose output")
319 parser.add_option('-q', '--quiet', action="store_const",
320 dest="verbose", const=0,
321 help="minimal output")
322 parser.add_option('--protocol', dest="proto", type="string",
323 help="protocol to use, one of: accel, binary, compact, json")
324 parser.add_option('--transport', dest="trans", type="string",
325 help="transport to use, one of: buffered, framed")
326 parser.set_defaults(framed=False, http_path=None, verbose=1, host='localhost', port=9090, proto='binary')
327 options, args = parser.parse_args()
328
329 sys.path.insert(0, os.path.join(SCRIPT_DIR, options.genpydir))
330 if options.libpydir:
331 sys.path.insert(0, glob.glob(options.libpydir)[0])
332 else:
333 sys.path.insert(0, glob.glob(DEFAULT_LIBDIR_GLOB)[0])
334
335 from ThriftTest import ThriftTest
336 from ThriftTest.ttypes import Xtruct, Xtruct2, Numberz, Xception, Xception2
337 from thrift.Thrift import TException
338 from thrift.transport import TTransport
339 from thrift.transport import TSocket
340 from thrift.transport import THttpClient
341 from thrift.transport import TZlibTransport
342 from thrift.protocol import TBinaryProtocol
343 from thrift.protocol import TCompactProtocol
344 from thrift.protocol import TJSONProtocol
345
Roger Meierf4eec7a2011-09-11 18:16:21 +0000346 OwnArgsTestProgram(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=1))