Skip to content

Commit 732ff61

Browse files
Filip Franceticfacebook-github-bot
Filip Francetic
authored andcommitted
Enable py3 server and client_server tests in auto_migrate mode
Summary: These tests mostly don't work because the thrift py3 server library doesn't accept thrift python server interfaces, which has always been very low pri to fix because the all the ways of setting up thrift py3 services also accept thrift python services, meaning that this only breaks for people setting up raw py3 services. Enabling it just for the sake of better tracking. The bad unicode test is odd though, because it seems that rather than throwing a nice `UnicodeDecodeError` like thrift py3 does, a very ugly `IndexError` gets doesn't get caught and causes that test to fail even with `brokenInAutoMigrate()`. Worth investigating, but for now I'm just bypassing that test. Reviewed By: yoney Differential Revision: D68870475 fbshipit-source-id: eafa2022d3f7024eabdd37788e6087611fd7b831
1 parent 932f3a3 commit 732ff61

File tree

2 files changed

+46
-15
lines changed

2 files changed

+46
-15
lines changed

thrift/lib/py3/test/auto_migrate/client_server.py

+38-15
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
ClientMetadataTestingServiceInterface,
3636
TestingServiceInterface,
3737
)
38+
from testing.thrift_types import easy as Python_easy
3839
from testing.types import Color, easy, HardError
40+
from thrift.lib.py3.test.auto_migrate.auto_migrate_util import brokenInAutoMigrate
3941
from thrift.py3.client import ClientType, get_client
4042
from thrift.py3.common import Priority, Protocol, RpcOptions
4143
from thrift.py3.exceptions import ApplicationError
@@ -139,6 +141,7 @@ class ClientServerTests(unittest.TestCase):
139141
These are tests where a client and server talk to each other
140142
"""
141143

144+
@brokenInAutoMigrate()
142145
# pyre-fixme[56]: Argument `sys.version_info[slice(None, 2, None)] < (3, 7)` to
143146
# decorator factory `unittest.skipIf` could not be resolved in a global scope.
144147
@unittest.skipIf(sys.version_info[:2] < (3, 7), "Requires py3.7")
@@ -180,6 +183,7 @@ async def outside_context_test() -> None:
180183

181184
loop.run_until_complete(outside_context_test())
182185

186+
@brokenInAutoMigrate()
183187
def test_rpc_headers(self) -> None:
184188
loop = asyncio.get_event_loop()
185189

@@ -195,6 +199,7 @@ async def inner_test() -> None:
195199

196200
loop.run_until_complete(inner_test())
197201

202+
@brokenInAutoMigrate()
198203
def test_client_resolve(self) -> None:
199204
loop = asyncio.get_event_loop()
200205
hostname = socket.gethostname()
@@ -212,6 +217,7 @@ async def inner_test() -> None:
212217

213218
loop.run_until_complete(inner_test())
214219

220+
@brokenInAutoMigrate()
215221
def test_unframed_binary(self) -> None:
216222
loop = asyncio.get_event_loop()
217223

@@ -231,6 +237,7 @@ async def inner_test() -> None:
231237

232238
loop.run_until_complete(inner_test())
233239

240+
@brokenInAutoMigrate()
234241
def test_framed_deprecated(self) -> None:
235242
loop = asyncio.get_event_loop()
236243

@@ -249,6 +256,7 @@ async def inner_test() -> None:
249256

250257
loop.run_until_complete(inner_test())
251258

259+
@brokenInAutoMigrate()
252260
def test_framed_compact(self) -> None:
253261
loop = asyncio.get_event_loop()
254262

@@ -267,6 +275,7 @@ async def inner_test() -> None:
267275

268276
loop.run_until_complete(inner_test())
269277

278+
@brokenInAutoMigrate()
270279
def test_server_localhost(self) -> None:
271280
loop = asyncio.get_event_loop()
272281

@@ -280,6 +289,7 @@ async def inner_test() -> None:
280289

281290
loop.run_until_complete(inner_test())
282291

292+
@brokenInAutoMigrate()
283293
def test_unix_socket(self) -> None:
284294
loop = asyncio.get_event_loop()
285295

@@ -293,6 +303,7 @@ async def inner_test(dir: Path) -> None:
293303
with tempfile.TemporaryDirectory() as tdir:
294304
loop.run_until_complete(inner_test(Path(tdir)))
295305

306+
@brokenInAutoMigrate()
296307
def test_no_client_aexit(self) -> None:
297308
loop = asyncio.get_event_loop()
298309

@@ -309,6 +320,7 @@ async def inner_test() -> None:
309320

310321
loop.run_until_complete(inner_test())
311322

323+
@brokenInAutoMigrate()
312324
def test_client_aexit_no_await(self) -> None:
313325
"""
314326
This actually handles the case if __aexit__ is not awaited
@@ -330,6 +342,7 @@ async def inner_test() -> None:
330342

331343
loop.run_until_complete(inner_test())
332344

345+
@brokenInAutoMigrate()
333346
def test_no_client_no_aenter(self) -> None:
334347
"""
335348
This covers if aenter was canceled since those two are the same really
@@ -346,6 +359,7 @@ async def inner_test() -> None:
346359

347360
loop.run_until_complete(inner_test())
348361

362+
@brokenInAutoMigrate()
349363
def test_derived_service(self) -> None:
350364
"""
351365
This tests calling methods from a derived service
@@ -366,21 +380,7 @@ async def inner_test() -> None:
366380

367381
loop.run_until_complete(inner_test())
368382

369-
def test_non_utf8_exception_message(self) -> None:
370-
loop = asyncio.get_event_loop()
371-
372-
async def inner_test() -> None:
373-
async with TestServer(handler=CppHandler()) as sa:
374-
ip, port = sa.ip, sa.port
375-
assert ip and port
376-
async with get_client(TestingService, host=ip, port=port) as client:
377-
with self.assertRaises(HardError):
378-
await client.hard_error(True)
379-
with self.assertRaises(UnicodeDecodeError):
380-
await client.hard_error(False)
381-
382-
loop.run_until_complete(inner_test())
383-
383+
@brokenInAutoMigrate()
384384
def test_renamed_func(self) -> None:
385385
loop = asyncio.get_event_loop()
386386

@@ -393,6 +393,7 @@ async def inner_test() -> None:
393393

394394
loop.run_until_complete(inner_test())
395395

396+
@brokenInAutoMigrate()
396397
def test_queue_timeout(self) -> None:
397398
"""
398399
This tests whether queue timeout functions properly.
@@ -435,6 +436,7 @@ async def clients_run(server: TestServer) -> None:
435436

436437
loop.run_until_complete(clients_run(testing))
437438

439+
@brokenInAutoMigrate()
438440
def test_cancelled_task(self) -> None:
439441
"""
440442
This tests whether cancelled tasks are handled properly.
@@ -463,6 +465,7 @@ async def inner_test() -> None:
463465

464466
loop.run_until_complete(inner_test())
465467

468+
@brokenInAutoMigrate()
466469
def test_request_with_default_rpc_options(self) -> None:
467470
loop = asyncio.get_event_loop()
468471

@@ -478,6 +481,7 @@ async def inner_test() -> None:
478481

479482
loop.run_until_complete(inner_test())
480483

484+
@brokenInAutoMigrate()
481485
def test_request_with_specified_rpc_options(self) -> None:
482486
loop = asyncio.get_event_loop()
483487

@@ -497,6 +501,22 @@ async def inner_test() -> None:
497501
loop.run_until_complete(inner_test())
498502

499503

504+
class Utf8Test(unittest.IsolatedAsyncioTestCase):
505+
@brokenInAutoMigrate()
506+
async def test_non_utf8_exception_message(self) -> None:
507+
# something about non-utf8 exceptions seems extra broken, I need to skip the test entirely
508+
if Python_easy is easy:
509+
self.assertTrue(False)
510+
async with TestServer(handler=CppHandler()) as sa:
511+
ip, port = sa.ip, sa.port
512+
assert ip and port
513+
async with get_client(TestingService, host=ip, port=port) as client:
514+
with self.assertRaises(HardError):
515+
await client.hard_error(True)
516+
with self.assertRaises(UnicodeDecodeError):
517+
await client.hard_error(False)
518+
519+
500520
class StackHandler(StackServiceInterface):
501521
async def add_to(self, lst: Sequence[int], value: int) -> Sequence[int]:
502522
return [x + value for x in lst]
@@ -532,6 +552,7 @@ class ClientStackServerTests(unittest.TestCase):
532552
These are tests where a client and server(stack_arguments) talk to each other
533553
"""
534554

555+
@brokenInAutoMigrate()
535556
def test_server_localhost(self) -> None:
536557
loop = asyncio.get_event_loop()
537558

@@ -576,6 +597,7 @@ async def getMetadaField(self, key: str) -> str:
576597

577598

578599
class ClientMetadataTestingServiceTests(unittest.TestCase):
600+
@brokenInAutoMigrate()
579601
def test_client_metadata(self) -> None:
580602
loop = asyncio.get_event_loop()
581603
hostname: str = socket.gethostname()
@@ -606,6 +628,7 @@ async def inner_test() -> None:
606628

607629
loop.run_until_complete(inner_test())
608630

631+
@brokenInAutoMigrate()
609632
def test_call_get_metadata_field_with_invalid_key_should_return_empty_field(
610633
self,
611634
) -> None:

thrift/lib/py3/test/auto_migrate/server.py

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from testing.services import TestingServiceInterface
2424
from testing.types import Color, easy
25+
from thrift.lib.py3.test.auto_migrate.auto_migrate_util import brokenInAutoMigrate
2526
from thrift.py3.server import getServiceName, SocketAddress, ThriftServer
2627
from thrift.py3.test.is_overload.helper import OverloadTestHelper
2728

@@ -96,10 +97,12 @@ async def inner() -> None:
9697

9798
loop.run_until_complete(inner())
9899

100+
@brokenInAutoMigrate()
99101
def test_get_service_name(self) -> None:
100102
h = Handler()
101103
self.assertEqual(getServiceName(h), "TestingService")
102104

105+
@brokenInAutoMigrate()
103106
def test_get_address(self) -> None:
104107
loop = asyncio.get_event_loop()
105108
coro = self.get_address(loop)
@@ -113,6 +116,7 @@ async def get_address(self, loop: asyncio.AbstractEventLoop) -> SocketAddress:
113116
await serve_task
114117
return addy
115118

119+
@brokenInAutoMigrate()
116120
def test_annotations(self) -> None:
117121
annotations = TestingServiceInterface.annotations
118122
self.assertIsInstance(annotations, types.MappingProxyType)
@@ -137,6 +141,7 @@ def test_unittest_call_renamed_func(self) -> None:
137141
ret = loop.run_until_complete(h.renamed_func(True))
138142
self.assertTrue(ret)
139143

144+
@brokenInAutoMigrate()
140145
def test_server_manipulate_config(self) -> None:
141146
MAX_REQUESTS = 142
142147
MAX_CONNECTIONS = 132
@@ -170,19 +175,22 @@ def test_server_manipulate_config(self) -> None:
170175
server.set_quick_exit_on_shutdown_timeout(True)
171176
self.assertTrue(server.get_quick_exit_on_shutdown_timeout())
172177

178+
@brokenInAutoMigrate()
173179
def test_server_get_stats(self) -> None:
174180
server = ThriftServer(Handler(), port=0)
175181

176182
active_requests = server.get_active_requests()
177183
self.assertGreaterEqual(active_requests, 0)
178184
self.assertLess(active_requests, 10)
179185

186+
@brokenInAutoMigrate()
180187
def test_set_is_overloaded(self) -> None:
181188
helper = OverloadTestHelper(Handler(), 0)
182189
helper.set_is_overload()
183190
self.assertTrue(helper.check_overload("overloaded_method"))
184191
self.assertFalse(helper.check_overload("not_overloaded_method"))
185192

193+
@brokenInAutoMigrate()
186194
def test_lifecycle_hooks(self) -> None:
187195
async def inner() -> None:
188196
handler = Handler()

0 commit comments

Comments
 (0)