예제 #1
0
    def _start(self):
        """Starts this ForeLink.

    This method must be called before attempting to exchange tickets with this
    object.
    """
        with self._condition:
            address = '[::]:%d' % (0 if self._requested_port is None else
                                   self._requested_port)
            self._completion_queue = _low.CompletionQueue()
            if self._root_certificates is None and not self._key_chain_pairs:
                self._server = _low.Server(self._completion_queue, None)
                self._port = self._server.add_http2_addr(address)
            else:
                server_credentials = _low.ServerCredentials(
                    self._root_certificates, self._key_chain_pairs)
                self._server = _low.Server(self._completion_queue,
                                           server_credentials)
                self._port = self._server.add_secure_http2_addr(address)
            self._server.start()

            self._server.service(None)

            self._pool.submit(self._spin, self._completion_queue, self._server)
            self._spinning = True

            return self
예제 #2
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()
        channel = implementations.insecure_channel('localhost', port)
        callback = _Callback()

        try:
            ready_future = utilities.channel_ready_future(channel)
            ready_future.add_done_callback(callback.accept_value)
            self.assertIsNone(ready_future.result(
                test_constants.SHORT_TIMEOUT))
            value_passed_to_callback = callback.block_until_called()
            self.assertIs(ready_future, value_passed_to_callback)
            self.assertFalse(ready_future.cancelled())
            self.assertTrue(ready_future.done())
            self.assertFalse(ready_future.running())
            # Cancellation after maturity has no effect.
            ready_future.cancel()
            self.assertFalse(ready_future.cancelled())
            self.assertTrue(ready_future.done())
            self.assertFalse(ready_future.running())
        finally:
            ready_future.cancel()
            server.shutdown()
            server_completion_queue.shutdown()
            server_completion_queue_thread.join()
예제 #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()
예제 #4
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()
예제 #5
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)
예제 #6
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)
예제 #7
0
 def __init__(self, completion_queue):
   self._internal = _low.Server(completion_queue._internal, [])
   self._internal_cq = completion_queue._internal