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, completion_queue, 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)]
    six.assertCountEqual(self,
        (_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)

    del client_call
    del channel
    del completion_queue
    def testUpAndDown(self):
        channel = _intermediary_low.Channel('nonexistent:54321', None)
        invocation_link = invocation.invocation_link(channel, 'nonexistent',
                                                     {}, {})

        invocation_link.start()
        invocation_link.stop()
  def instantiate(self, serializations, servicer):
    serialization_behaviors = _serialization_behaviors_from_serializations(
        serializations)
    invocation_end_link = implementations.invocation_end_link()
    service_end_link = implementations.service_end_link(
        servicer, test_constants.DEFAULT_TIMEOUT,
        test_constants.MAXIMUM_TIMEOUT)
    service_grpc_link = service.service_link(
        serialization_behaviors.request_deserializers,
        serialization_behaviors.response_serializers)
    port = service_grpc_link.add_port('[::]:0', None)
    channel = _intermediary_low.Channel('localhost:%d' % port, None)
    invocation_grpc_link = invocation.invocation_link(
        channel, b'localhost', None,
        serialization_behaviors.request_serializers,
        serialization_behaviors.response_deserializers)

    invocation_end_link.join_link(invocation_grpc_link)
    invocation_grpc_link.join_link(invocation_end_link)
    service_end_link.join_link(service_grpc_link)
    service_grpc_link.join_link(service_end_link)
    invocation_grpc_link.start()
    service_grpc_link.start()
    return invocation_end_link, service_end_link, (
        invocation_grpc_link, service_grpc_link)
    def _test_lonely_invocation_with_termination(self, termination):
        test_operation_id = object()
        test_group = 'test package.Test Service'
        test_method = 'test method'
        invocation_link_mate = test_utilities.RecordingLink()

        channel = _intermediary_low.Channel('nonexistent:54321', None)
        invocation_link = invocation.invocation_link(
            channel, 'nonexistent',
            {(test_group, test_method): _NULL_BEHAVIOR},
            {(test_group, test_method): _NULL_BEHAVIOR})
        invocation_link.join_link(invocation_link_mate)
        invocation_link.start()

        ticket = links.Ticket(test_operation_id, 0, test_group, test_method,
                              links.Ticket.Subscription.FULL,
                              test_constants.SHORT_TIMEOUT, 1, None, None,
                              None, None, None, termination)
        invocation_link.accept_ticket(ticket)
        invocation_link_mate.block_until_tickets_satisfy(test_cases.terminated)

        invocation_link.stop()

        self.assertIsNot(invocation_link_mate.tickets()[-1].termination,
                         links.Ticket.Termination.COMPLETION)
Ejemplo n.º 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)
Ejemplo n.º 6
0
 def create_transmitting_links(self):
     service_link = service.service_link(
         {self.group_and_method(): self.deserialize_request},
         {self.group_and_method(): self.serialize_response})
     port = service_link.add_port('[::]:0', None)
     service_link.start()
     channel = _intermediary_low.Channel('localhost:%d' % port, None)
     invocation_link = invocation.invocation_link(
         channel, 'localhost', None,
         {self.group_and_method(): self.serialize_request},
         {self.group_and_method(): self.deserialize_response})
     invocation_link.start()
     return invocation_link, service_link
Ejemplo n.º 7
0
def insecure_channel(host, port):
  """Creates an insecure Channel to a remote host.

  Args:
    host: The name of the remote host to which to connect.
    port: The port of the remote host to which to connect.

  Returns:
    A Channel to the remote host through which RPCs may be conducted.
  """
  intermediary_low_channel = _intermediary_low.Channel(
      '%s:%d' % (host, port), None)
  return Channel(intermediary_low_channel._internal, intermediary_low_channel)  # pylint: disable=protected-access
Ejemplo n.º 8
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),
                self._client_credentials,
                server_host_override=self._server_host_override)
        return self
Ejemplo n.º 9
0
def secure_channel(host, port, client_credentials):
  """Creates a secure Channel to a remote host.

  Args:
    host: The name of the remote host to which to connect.
    port: The port of the remote host to which to connect.
    client_credentials: A ClientCredentials.

  Returns:
    A secure Channel to the remote host through which RPCs may be conducted.
  """
  intermediary_low_channel = _intermediary_low.Channel(
      '%s:%d' % (host, port), client_credentials._intermediary_low_credentials)
  return Channel(intermediary_low_channel._internal, intermediary_low_channel)  # pylint: disable=protected-access
    def instantiate(self, methods, method_implementations,
                    multi_method_implementation):
        pool = logging_pool.pool(test_constants.POOL_SIZE)
        servicer = crust_implementations.servicer(method_implementations,
                                                  multi_method_implementation,
                                                  pool)
        serialization_behaviors = _serialization_behaviors_from_test_methods(
            methods)
        invocation_end_link = core_implementations.invocation_end_link()
        service_end_link = core_implementations.service_end_link(
            servicer, test_constants.DEFAULT_TIMEOUT,
            test_constants.MAXIMUM_TIMEOUT)
        service_grpc_link = service.service_link(
            serialization_behaviors.request_deserializers,
            serialization_behaviors.response_serializers)
        port = service_grpc_link.add_port('[::]:0', None)
        channel = _intermediary_low.Channel('localhost:%d' % port, None)
        invocation_grpc_link = invocation.invocation_link(
            channel, b'localhost', None,
            serialization_behaviors.request_serializers,
            serialization_behaviors.response_deserializers)

        invocation_end_link.join_link(invocation_grpc_link)
        invocation_grpc_link.join_link(invocation_end_link)
        service_grpc_link.join_link(service_end_link)
        service_end_link.join_link(service_grpc_link)
        service_end_link.start()
        invocation_end_link.start()
        invocation_grpc_link.start()
        service_grpc_link.start()

        generic_stub = crust_implementations.generic_stub(
            invocation_end_link, pool)
        # TODO(nathaniel): Add a "groups" attribute to _digest.TestServiceDigest.
        group = next(iter(methods))[0]
        # TODO(nathaniel): Add a "cardinalities_by_group" attribute to
        # _digest.TestServiceDigest.
        cardinalities = {
            method: method_object.cardinality()
            for (group, method), method_object in six.iteritems(methods)
        }
        dynamic_stub = crust_implementations.dynamic_stub(
            invocation_end_link, group, cardinalities, pool)

        return generic_stub, {
            group: dynamic_stub
        }, (invocation_end_link, invocation_grpc_link, service_grpc_link,
            service_end_link, pool)
Ejemplo n.º 11
0
    def testZeroMessageRoundTrip(self):
        test_operation_id = object()
        test_group = 'test package.Test Group'
        test_method = 'test method'
        identity_transformation = {(test_group, test_method): _IDENTITY}
        test_code = beta_interfaces.StatusCode.OK
        test_message = 'a test message'

        service_link = service.service_link(identity_transformation,
                                            identity_transformation)
        service_mate = test_utilities.RecordingLink()
        service_link.join_link(service_mate)
        port = service_link.add_port('[::]:0', None)
        service_link.start()
        channel = _intermediary_low.Channel('localhost:%d' % port, None)
        invocation_link = invocation.invocation_link(channel, None, None,
                                                     identity_transformation,
                                                     identity_transformation)
        invocation_mate = test_utilities.RecordingLink()
        invocation_link.join_link(invocation_mate)
        invocation_link.start()

        invocation_ticket = links.Ticket(
            test_operation_id, 0, test_group, test_method,
            links.Ticket.Subscription.FULL, test_constants.LONG_TIMEOUT, None,
            None, None, None, None, None, links.Ticket.Termination.COMPLETION,
            None)
        invocation_link.accept_ticket(invocation_ticket)
        service_mate.block_until_tickets_satisfy(test_cases.terminated)

        service_ticket = links.Ticket(service_mate.tickets()[-1].operation_id,
                                      0, None, None, None, None, None, None,
                                      None, None, test_code, test_message,
                                      links.Ticket.Termination.COMPLETION,
                                      None)
        service_link.accept_ticket(service_ticket)
        invocation_mate.block_until_tickets_satisfy(test_cases.terminated)

        invocation_link.stop()
        service_link.begin_stop()
        service_link.end_stop()

        self.assertIs(service_mate.tickets()[-1].termination,
                      links.Ticket.Termination.COMPLETION)
        self.assertIs(invocation_mate.tickets()[-1].termination,
                      links.Ticket.Termination.COMPLETION)
        self.assertIs(invocation_mate.tickets()[-1].code, test_code)
        self.assertEqual(invocation_mate.tickets()[-1].message, test_message)
Ejemplo n.º 12
0
def secure_channel(host, port, channel_credentials):
  """Creates a secure Channel to a remote host.

  Args:
    host: The name of the remote host to which to connect.
    port: The port of the remote host to which to connect.
      If None only the 'host' part will be used.
    channel_credentials: A ChannelCredentials.

  Returns:
    A secure Channel to the remote host through which RPCs may be conducted.
  """
  intermediary_low_channel = _intermediary_low.Channel(
      '%s:%d' % (host, port) if port else host,
      channel_credentials._low_credentials)
  return Channel(intermediary_low_channel._internal, intermediary_low_channel)  # pylint: disable=protected-access
  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.server_events = queue.Queue()
    self.server_completion_queue_thread = threading.Thread(
        target=_drive_completion_queue,
        args=(self.server_completion_queue, self.server_events))
    self.server_completion_queue_thread.start()

    self.client_completion_queue = _low.CompletionQueue()
    self.channel = _low.Channel('%s:%d' % (self.host, port), None)
    self.client_events = queue.Queue()
    self.client_completion_queue_thread = threading.Thread(
        target=_drive_completion_queue,
        args=(self.client_completion_queue, self.client_events))
    self.client_completion_queue_thread.start()
Ejemplo n.º 14
0
def create_not_really_secure_channel(host, port, client_credentials,
                                     server_host_override):
    """Creates an insecure Channel to a remote host.

  Args:
    host: The name of the remote host to which to connect.
    port: The port of the remote host to which to connect.
    client_credentials: The beta.ClientCredentials with which to connect.
    server_host_override: The target name used for SSL host name checking.

  Returns:
    A beta.Channel to the remote host through which RPCs may be conducted.
  """
    hostport = '%s:%d' % (host, port)
    intermediary_low_channel = _intermediary_low.Channel(
        hostport,
        client_credentials._intermediary_low_credentials,
        server_host_override=server_host_override)
    return beta.Channel(intermediary_low_channel._internal,
                        intermediary_low_channel)
Ejemplo n.º 15
0
    def _perform_scenario_test(self, scenario):
        test_operation_id = object()
        test_group, test_method = scenario.group_and_method()
        test_code = _intermediary_low.Code.OK
        test_message = 'a scenario test message'

        service_link = service.service_link(
            {(test_group, test_method): scenario.deserialize_request},
            {(test_group, test_method): scenario.serialize_response})
        service_mate = test_utilities.RecordingLink()
        service_link.join_link(service_mate)
        port = service_link.add_port('[::]:0', None)
        service_link.start()
        channel = _intermediary_low.Channel('localhost:%d' % port, None)
        invocation_link = invocation.invocation_link(
            channel, 'localhost', None,
            {(test_group, test_method): scenario.serialize_request},
            {(test_group, test_method): scenario.deserialize_response})
        invocation_mate = test_utilities.RecordingLink()
        invocation_link.join_link(invocation_mate)
        invocation_link.start()

        invocation_ticket = links.Ticket(test_operation_id, 0, test_group,
                                         test_method,
                                         links.Ticket.Subscription.FULL,
                                         test_constants.LONG_TIMEOUT, None,
                                         None, None, None, None, None, None,
                                         None)
        invocation_link.accept_ticket(invocation_ticket)
        requests = scenario.requests()
        for request_index, request in enumerate(requests):
            request_ticket = links.Ticket(test_operation_id, 1 + request_index,
                                          None, None, None, None, 1, None,
                                          request, None, None, None, None,
                                          None)
            invocation_link.accept_ticket(request_ticket)
            service_mate.block_until_tickets_satisfy(
                test_cases.at_least_n_payloads_received_predicate(
                    1 + request_index))
            response_ticket = links.Ticket(
                service_mate.tickets()[0].operation_id, request_index, None,
                None, None, None, 1, None,
                scenario.response_for_request(request), None, None, None, None,
                None)
            service_link.accept_ticket(response_ticket)
            invocation_mate.block_until_tickets_satisfy(
                test_cases.at_least_n_payloads_received_predicate(
                    1 + request_index))
        request_count = len(requests)
        invocation_completion_ticket = links.Ticket(
            test_operation_id, request_count + 1, None, None, None, None, None,
            None, None, None, None, None, links.Ticket.Termination.COMPLETION,
            None)
        invocation_link.accept_ticket(invocation_completion_ticket)
        service_mate.block_until_tickets_satisfy(test_cases.terminated)
        service_completion_ticket = links.Ticket(
            service_mate.tickets()[0].operation_id, request_count, None, None,
            None, None, None, None, None, None, test_code, test_message,
            links.Ticket.Termination.COMPLETION, None)
        service_link.accept_ticket(service_completion_ticket)
        invocation_mate.block_until_tickets_satisfy(test_cases.terminated)

        invocation_link.stop()
        service_link.begin_stop()
        service_link.end_stop()

        observed_requests = tuple(ticket.payload
                                  for ticket in service_mate.tickets()
                                  if ticket.payload is not None)
        observed_responses = tuple(ticket.payload
                                   for ticket in invocation_mate.tickets()
                                   if ticket.payload is not None)
        self.assertTrue(scenario.verify_requests(observed_requests))
        self.assertTrue(scenario.verify_responses(observed_responses))