Example #1
0
    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)
Example #2
0
  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)
Example #3
0
    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()
Example #4
0
 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)
Example #5
0
    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()
Example #6
0
  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)
Example #7
0
    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
Example #8
0
    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)