def test_lonely_channel_connectivity(self): low_channel = _low.Channel('localhost:12345', ()) callback = _Callback() connectivity_channel = _connectivity_channel.ConnectivityChannel( low_channel) connectivity_channel.subscribe(callback.update, try_to_connect=False) first_connectivities = callback.block_until_connectivities_satisfy( bool) connectivity_channel.subscribe(callback.update, try_to_connect=True) second_connectivities = callback.block_until_connectivities_satisfy( lambda connectivities: 2 <= len(connectivities)) # Wait for a connection that will never happen. time.sleep(test_constants.SHORT_TIMEOUT) third_connectivities = callback.connectivities() connectivity_channel.unsubscribe(callback.update) fourth_connectivities = callback.connectivities() connectivity_channel.unsubscribe(callback.update) fifth_connectivities = callback.connectivities() self.assertSequenceEqual((interfaces.ChannelConnectivity.IDLE, ), first_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.READY, second_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.READY, third_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.READY, fourth_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.READY, fifth_connectivities)
def testLonelyClient(self): host = 'nosuchhostexists' port = 54321 method = 'test method' deadline = time.time() + _TIMEOUT after_deadline = deadline + _AFTER_DELAY metadata_tag = object() finish_tag = object() completion_queue = _low.CompletionQueue() channel = _low.Channel('%s:%d' % (host, port), None) client_call = _low.Call(channel, method, host, deadline) client_call.invoke(completion_queue, metadata_tag, finish_tag) first_event = completion_queue.get(after_deadline) self.assertIsNotNone(first_event) second_event = completion_queue.get(after_deadline) self.assertIsNotNone(second_event) kinds = [event.kind for event in (first_event, second_event)] self.assertItemsEqual( (_low.Event.Kind.METADATA_ACCEPTED, _low.Event.Kind.FINISH), kinds) self.assertIsNone(completion_queue.get(after_deadline)) completion_queue.stop() stop_event = completion_queue.get(_FUTURE) self.assertEqual(_low.Event.Kind.STOP, stop_event.kind)
def test_reachable_then_unreachable_channel_connectivity(self): server_completion_queue = _low.CompletionQueue() server = _low.Server(server_completion_queue, []) port = server.add_http2_port('[::]:0') server.start() server_completion_queue_thread = threading.Thread( target=_drive_completion_queue, args=(server_completion_queue, )) server_completion_queue_thread.start() low_channel = _low.Channel('localhost:%d' % port, ()) callback = _Callback() connectivity_channel = _connectivity_channel.ConnectivityChannel( low_channel) connectivity_channel.subscribe(callback.update, try_to_connect=True) callback.block_until_connectivities_satisfy( lambda connectivities: interfaces.ChannelConnectivity.READY in connectivities) # Now take down the server and confirm that channel readiness is repudiated. server.shutdown() callback.block_until_connectivities_satisfy( lambda connectivities: connectivities[ -1] is not interfaces.ChannelConnectivity.READY) connectivity_channel.unsubscribe(callback.update) server.shutdown() server_completion_queue.shutdown() server_completion_queue_thread.join()
def __init__(self, hostport, client_credentials, server_host_override=None): args = [] if server_host_override: args.append((_types.GrpcChannelArgumentKeys.SSL_TARGET_NAME_OVERRIDE.value, server_host_override)) creds = None if client_credentials: creds = client_credentials._internal self._internal = _low.Channel(hostport, args, creds)
def setUp(self): self.server_completion_queue = _low.CompletionQueue() self.server = _low.Server(self.server_completion_queue, []) self.port = self.server.add_http2_port('[::]:0') self.client_completion_queue = _low.CompletionQueue() self.client_channel = _low.Channel('localhost:%d' % self.port, []) self.server.start()
def setUp(self): self.host = 'localhost' self.server_completion_queue = _low.CompletionQueue() self.server = _low.Server(self.server_completion_queue) port = self.server.add_http2_addr('[::]:0') self.server.start() self.client_completion_queue = _low.CompletionQueue() self.channel = _low.Channel('%s:%d' % (self.host, port), None)
def _start(self): """Starts this RearLink. This method must be called before attempting to exchange tickets with this object. """ with self._condition: self._completion_queue = _low.CompletionQueue() self._channel = _low.Channel('%s:%d' % (self._host, self._port)) return self
def test_immediately_connectable_channel_connectivity(self): server_completion_queue = _low.CompletionQueue() server = _low.Server(server_completion_queue, []) port = server.add_http2_port('[::]:0') server.start() server_completion_queue_thread = threading.Thread( target=_drive_completion_queue, args=(server_completion_queue, )) server_completion_queue_thread.start() low_channel = _low.Channel('localhost:%d' % port, ()) first_callback = _Callback() second_callback = _Callback() connectivity_channel = _connectivity_channel.ConnectivityChannel( low_channel) connectivity_channel.subscribe(first_callback.update, try_to_connect=False) first_connectivities = first_callback.block_until_connectivities_satisfy( bool) # Wait for a connection that will never happen because try_to_connect=True # has not yet been passed. time.sleep(test_constants.SHORT_TIMEOUT) second_connectivities = first_callback.connectivities() connectivity_channel.subscribe(second_callback.update, try_to_connect=True) third_connectivities = first_callback.block_until_connectivities_satisfy( lambda connectivities: 2 <= len(connectivities)) fourth_connectivities = second_callback.block_until_connectivities_satisfy( bool) # Wait for a connection that will happen (or may already have happened). first_callback.block_until_connectivities_satisfy( lambda connectivities: interfaces.ChannelConnectivity.READY in connectivities) second_callback.block_until_connectivities_satisfy( lambda connectivities: interfaces.ChannelConnectivity.READY in connectivities) connectivity_channel.unsubscribe(first_callback.update) connectivity_channel.unsubscribe(second_callback.update) server.shutdown() server_completion_queue.shutdown() server_completion_queue_thread.join() self.assertSequenceEqual((interfaces.ChannelConnectivity.IDLE, ), first_connectivities) self.assertSequenceEqual((interfaces.ChannelConnectivity.IDLE, ), second_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.TRANSIENT_FAILURE, third_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.FATAL_FAILURE, third_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.TRANSIENT_FAILURE, fourth_connectivities) self.assertNotIn(interfaces.ChannelConnectivity.FATAL_FAILURE, fourth_connectivities)