blob: 8e3dcf81461ab5b02b3a1dd826fc4ae1f8972e01 [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):
Jens Geyerd629ea02015-09-23 21:16:50 +0200129 print('testBinary')
130 val = bytearray([i for i in range(0, 256)])
131 self.assertEqual(bytearray(self.client.testBinary(bytes(val))), val)
132
Mark Slee5299a952007-10-05 00:13:24 +0000133 def testStruct(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200134 print('testStruct')
Mark Slee5299a952007-10-05 00:13:24 +0000135 x = Xtruct()
136 x.string_thing = "Zero"
137 x.byte_thing = 1
138 x.i32_thing = -3
139 x.i64_thing = -5
140 y = self.client.testStruct(x)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000141 self.assertEqual(y, x)
Mark Sleefc89d392006-09-04 00:04:39 +0000142
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000143 def testNest(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200144 print('testNest')
145 inner = Xtruct(string_thing="Zero", byte_thing=1, i32_thing=-3, i64_thing=-5)
Roger Meier85fb6de2012-11-02 00:05:42 +0000146 x = Xtruct2(struct_thing=inner, byte_thing=0, i32_thing=0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000147 y = self.client.testNest(x)
148 self.assertEqual(y, x)
149
150 def testMap(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200151 print('testMap')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900152 x = {0: 1, 1: 2, 2: 3, 3: 4, -1: -2}
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000153 y = self.client.testMap(x)
154 self.assertEqual(y, x)
155
156 def testSet(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200157 print('testSet')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000158 x = set([8, 1, 42])
159 y = self.client.testSet(x)
160 self.assertEqual(y, x)
161
162 def testList(self):
Jens Geyerd629ea02015-09-23 21:16:50 +0200163 print('testList')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000164 x = [1, 4, 9, -42]
165 y = self.client.testList(x)
166 self.assertEqual(y, x)
167
168 def testEnum(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900169 print('testEnum')
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000170 x = Numberz.FIVE
171 y = self.client.testEnum(x)
172 self.assertEqual(y, x)
173
174 def testTypedef(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900175 print('testTypedef')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900176 x = 0xffffffffffffff # 7 bytes of 0xff
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000177 y = self.client.testTypedef(x)
178 self.assertEqual(y, x)
179
180 def testMapMap(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900181 print('testMapMap')
Nobuaki Sukegawa9b35a7c2015-11-17 11:01:41 +0900182 x = {
183 -4: {-4: -4, -3: -3, -2: -2, -1: -1},
184 4: {4: 4, 3: 3, 2: 2, 1: 1},
185 }
186 y = self.client.testMapMap(42)
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900187 self.assertEqual(y, x)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000188
189 def testMulti(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900190 print('testMulti')
Roger Meier85fb6de2012-11-02 00:05:42 +0000191 xpected = Xtruct(string_thing='Hello2', byte_thing=74, i32_thing=0xff00ff, i64_thing=0xffffffffd0d0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000192 y = self.client.testMulti(xpected.byte_thing,
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900193 xpected.i32_thing,
194 xpected.i64_thing,
195 {0: 'abc'},
196 Numberz.FIVE,
197 0xf0f0f0)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000198 self.assertEqual(y, xpected)
Mark Sleec9676562006-09-05 17:34:52 +0000199
Mark Slee5299a952007-10-05 00:13:24 +0000200 def testException(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900201 print('testException')
Mark Slee5299a952007-10-05 00:13:24 +0000202 self.client.testException('Safe')
203 try:
204 self.client.testException('Xception')
205 self.fail("should have gotten exception")
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900206 except Xception as x:
Mark Slee5299a952007-10-05 00:13:24 +0000207 self.assertEqual(x.errorCode, 1001)
208 self.assertEqual(x.message, 'Xception')
Roger Meier61188a42011-11-01 21:03:33 +0000209 # TODO ensure same behavior for repr within generated python variants
Roger Meierf4eec7a2011-09-11 18:16:21 +0000210 # ensure exception's repr method works
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900211 # x_repr = repr(x)
212 # self.assertEqual(x_repr, 'Xception(errorCode=1001, message=\'Xception\')')
Mark Sleec9676562006-09-05 17:34:52 +0000213
David Reissbcaa2ad2008-06-10 22:55:26 +0000214 try:
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900215 self.client.testException('TException')
216 self.fail("should have gotten exception")
217 except TException as x:
David Reissbcaa2ad2008-06-10 22:55:26 +0000218 pass
219
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900220 # Should not throw
221 self.client.testException('success')
222
223 def testMultiException(self):
224 print('testMultiException')
225 try:
226 self.client.testMultiException('Xception', 'ignore')
227 except Xception as ex:
228 self.assertEqual(ex.errorCode, 1001)
229 self.assertEqual(ex.message, 'This is an Xception')
230
231 try:
232 self.client.testMultiException('Xception2', 'ignore')
233 except Xception2 as ex:
234 self.assertEqual(ex.errorCode, 2002)
235 self.assertEqual(ex.struct_thing.string_thing, 'This is an Xception2')
236
237 y = self.client.testMultiException('success', 'foobar')
238 self.assertEqual(y.string_thing, 'foobar')
239
David Reiss6ce401d2009-03-24 20:01:58 +0000240 def testOneway(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900241 print('testOneway')
David Reissdb893b62008-02-18 02:11:48 +0000242 start = time.time()
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900243 self.client.testOneway(1) # type is int, not float
David Reissdb893b62008-02-18 02:11:48 +0000244 end = time.time()
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000245 self.assertTrue(end - start < 3,
David Reiss6ce401d2009-03-24 20:01:58 +0000246 "oneway sleep took %f sec" % (end - start))
Roger Meier76150722014-05-31 22:22:07 +0200247
Todd Lipconf5dea4c2009-12-03 01:18:44 +0000248 def testOnewayThenNormal(self):
Nobuaki Sukegawa01ede042015-09-29 02:16:53 +0900249 print('testOnewayThenNormal')
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900250 self.client.testOneway(1) # type is int, not float
Todd Lipconf5dea4c2009-12-03 01:18:44 +0000251 self.assertEqual(self.client.testString('Python'), 'Python')
David Reissdb893b62008-02-18 02:11:48 +0000252
Roger Meier879cab22014-05-03 17:51:21 +0200253
Mark Slee5299a952007-10-05 00:13:24 +0000254class NormalBinaryTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900255 def get_protocol(self, transport):
256 return TBinaryProtocol.TBinaryProtocolFactory().getProtocol(transport)
Mark Sleefc89d392006-09-04 00:04:39 +0000257
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900258
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000259class CompactTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900260 def get_protocol(self, transport):
261 return TCompactProtocol.TCompactProtocolFactory().getProtocol(transport)
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000262
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900263
Roger Meier85fb6de2012-11-02 00:05:42 +0000264class JSONTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900265 def get_protocol(self, transport):
266 return TJSONProtocol.TJSONProtocolFactory().getProtocol(transport)
Roger Meier85fb6de2012-11-02 00:05:42 +0000267
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900268
Mark Slee5299a952007-10-05 00:13:24 +0000269class AcceleratedBinaryTest(AbstractTest):
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900270 def get_protocol(self, transport):
271 return TBinaryProtocol.TBinaryProtocolAcceleratedFactory().getProtocol(transport)
Mark Sleea3302652006-10-25 19:03:32 +0000272
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900273
David Reiss9ff3b9d2008-02-15 01:10:23 +0000274def suite():
275 suite = unittest.TestSuite()
276 loader = unittest.TestLoader()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900277 if options.proto == 'binary': # look for --proto on cmdline
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000278 suite.addTest(loader.loadTestsFromTestCase(NormalBinaryTest))
279 elif options.proto == 'accel':
280 suite.addTest(loader.loadTestsFromTestCase(AcceleratedBinaryTest))
281 elif options.proto == 'compact':
282 suite.addTest(loader.loadTestsFromTestCase(CompactTest))
Roger Meier85fb6de2012-11-02 00:05:42 +0000283 elif options.proto == 'json':
284 suite.addTest(loader.loadTestsFromTestCase(JSONTest))
Bryan Duxbury59d4efd2011-03-21 17:38:22 +0000285 else:
Roger Meier76150722014-05-31 22:22:07 +0200286 raise AssertionError('Unknown protocol given with --protocol: %s' % options.proto)
David Reiss9ff3b9d2008-02-15 01:10:23 +0000287 return suite
Mark Slee5299a952007-10-05 00:13:24 +0000288
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900289
David Reiss74421272008-11-07 23:09:31 +0000290class OwnArgsTestProgram(unittest.TestProgram):
291 def parseArgs(self, argv):
292 if args:
293 self.testNames = args
294 else:
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900295 self.testNames = ([self.defaultTest])
David Reiss74421272008-11-07 23:09:31 +0000296 self.createTests()
297
David Reiss9ff3b9d2008-02-15 01:10:23 +0000298if __name__ == "__main__":
Nobuaki Sukegawaa185d7e2015-11-06 21:24:24 +0900299 parser = OptionParser()
300 parser.add_option('--libpydir', type='string', dest='libpydir',
301 help='include this directory in sys.path for locating library code')
302 parser.add_option('--genpydir', type='string', dest='genpydir',
303 default='gen-py',
304 help='include this directory in sys.path for locating generated code')
305 parser.add_option("--port", type="int", dest="port",
306 help="connect to server at port")
307 parser.add_option("--host", type="string", dest="host",
308 help="connect to server")
309 parser.add_option("--zlib", action="store_true", dest="zlib",
310 help="use zlib wrapper for compressed transport")
311 parser.add_option("--ssl", action="store_true", dest="ssl",
312 help="use SSL for encrypted transport")
313 parser.add_option("--http", dest="http_path",
314 help="Use the HTTP transport with the specified path")
315 parser.add_option('-v', '--verbose', action="store_const",
316 dest="verbose", const=2,
317 help="verbose output")
318 parser.add_option('-q', '--quiet', action="store_const",
319 dest="verbose", const=0,
320 help="minimal output")
321 parser.add_option('--protocol', dest="proto", type="string",
322 help="protocol to use, one of: accel, binary, compact, json")
323 parser.add_option('--transport', dest="trans", type="string",
324 help="transport to use, one of: buffered, framed")
325 parser.set_defaults(framed=False, http_path=None, verbose=1, host='localhost', port=9090, proto='binary')
326 options, args = parser.parse_args()
327
328 sys.path.insert(0, os.path.join(SCRIPT_DIR, options.genpydir))
329 if options.libpydir:
330 sys.path.insert(0, glob.glob(options.libpydir)[0])
331 else:
332 sys.path.insert(0, glob.glob(DEFAULT_LIBDIR_GLOB)[0])
333
334 from ThriftTest import ThriftTest
335 from ThriftTest.ttypes import Xtruct, Xtruct2, Numberz, Xception, Xception2
336 from thrift.Thrift import TException
337 from thrift.transport import TTransport
338 from thrift.transport import TSocket
339 from thrift.transport import THttpClient
340 from thrift.transport import TZlibTransport
341 from thrift.protocol import TBinaryProtocol
342 from thrift.protocol import TCompactProtocol
343 from thrift.protocol import TJSONProtocol
344
Roger Meierf4eec7a2011-09-11 18:16:21 +0000345 OwnArgsTestProgram(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=1))