Ejemplo n.º 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)
Ejemplo n.º 2
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()
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
 def __init__(self, low_channel, intermediary_low_channel):
     self._low_channel = low_channel
     self._intermediary_low_channel = intermediary_low_channel
     self._connectivity_channel = _connectivity_channel.ConnectivityChannel(
         low_channel)
Ejemplo n.º 5
0
 def __init__(self, low_channel, intermediary_low_channel):
     self._low_channel = low_channel
     self._intermediary_low_channel = intermediary_low_channel
     self._connectivity_channel = _connectivity_channel.ConnectivityChannel(
         low_channel, _LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY)