14 """Defines a number of module-scope gRPC scenarios to test server shutdown."""
17 from concurrent
import futures
24 from six.moves
import queue
31 RESPONSE = b
'response'
33 SERVER_RAISES_EXCEPTION =
'server_raises_exception'
34 SERVER_DEALLOCATED =
'server_deallocated'
35 SERVER_FORK_CAN_EXIT =
'server_fork_can_exit'
37 FORK_EXIT =
'/test/ForkExit'
50 if handler_call_details.method == FORK_EXIT:
57 server = test_common.test_server()
58 port = server.add_insecure_port(
'[::]:0')
68 if args.scenario == SERVER_RAISES_EXCEPTION:
69 server = test_common.test_server()
72 elif args.scenario == SERVER_DEALLOCATED:
73 server = test_common.test_server()
76 while server._state.stage != grpc._server._ServerStage.STOPPED:
78 elif args.scenario == SERVER_FORK_CAN_EXIT:
79 port_queue = queue.Queue()
80 thread = threading.Thread(target=run_server, args=(port_queue,))
83 port = port_queue.get()
85 multi_callable = channel.unary_unary(FORK_EXIT)
86 result, call = multi_callable.with_call(REQUEST, wait_for_ready=
True)
89 raise ValueError(
'unknown test scenario')
92 if __name__ ==
'__main__':
94 parser = argparse.ArgumentParser()
95 parser.add_argument(
'scenario', type=str)
96 args = parser.parse_args()