def call_next(request):
    """Call the next service given by request.service_hops."""

    if not request.service_hops:
        raise ValueError()

    new_request = pb2.TestRequest(id=request.id,
                                  name=request.name,
                                  service_hops=request.service_hops[1:])

    next_hop = request.service_hops[0]
    transport = next_hop.service.spec.transport
    prop = next_hop.service.spec.propagation
    host = next_hop.service.host
    port = next_hop.service.port

    if (transport == pb2.Spec.HTTP and prop == pb2.Spec.B3_FORMAT_PROPAGATION):
        return call_http_b3(host, port, new_request)
    if (transport == pb2.Spec.HTTP
            and prop == pb2.Spec.TRACE_CONTEXT_FORMAT_PROPAGATION):
        return call_http_tracecontext(host, port, new_request)
    if (transport == pb2.Spec.GRPC
            and prop == pb2.Spec.BINARY_FORMAT_PROPAGATION):
        return call_grpc_binary(host, port, new_request)
    raise ValueError("No service for transport/propagation")
Exemple #2
0
def test_server(port=pb2.PYTHON_HTTP_TRACECONTEXT_PROPAGATION_PORT):
    """Send a single multi-hop request to the server and shut it down."""

    test_request = pb2.TestRequest(
        name="python:http:tracecontext",
        service_hops=[
            pb2.ServiceHop(
                service=pb2.Service(
                    name="python:http:tracecontext",
                    port=port,
                    host="0.0.0.0",
                    spec=pb2.Spec(
                        transport=pb2.Spec.HTTP,
                        propagation=pb2.Spec.
                        TRACE_CONTEXT_FORMAT_PROPAGATION))),
            pb2.ServiceHop(
                service=pb2.Service(
                    name="python:http:tracecontext",
                    port=port,
                    host="0.0.0.0",
                    spec=pb2.Spec(
                        transport=pb2.Spec.HTTP,
                        propagation=pb2.Spec.
                        TRACE_CONTEXT_FORMAT_PROPAGATION)))
        ])

    with serve_http_tracecontext():
        return service.call_http_tracecontext("0.0.0.0", port, test_request)
def test_server(port=pb2.PYTHON_GRPC_BINARY_PROPAGATION_PORT):
    """Send a single multi-hop request to the server and shut it down."""

    test_request = pb2.TestRequest(
        name="python:grpc:binary",
        service_hops=[
            pb2.ServiceHop(
                service=pb2.Service(
                    name="python:grpc:binary",
                    port=port,
                    host="0.0.0.0",
                    spec=pb2.Spec(
                        transport=pb2.Spec.GRPC,
                        propagation=pb2.Spec.BINARY_FORMAT_PROPAGATION))),
            pb2.ServiceHop(
                service=pb2.Service(
                    name="python:grpc:binary",
                    port=port,
                    host="0.0.0.0",
                    spec=pb2.Spec(
                        transport=pb2.Spec.GRPC,
                        propagation=pb2.Spec.BINARY_FORMAT_PROPAGATION)))
        ])

    with serve_grpc_binary():
        return service.call_grpc_binary("0.0.0.0", port, test_request)
def build_request(hops, id_=None):
    if id_ is None:
        id_ = service.rand63()

    def build_service_hop(hop):
        return pb2.ServiceHop(service=pb2.Service(name=get_name(hop),
                                                  port=hop.port,
                                                  host=hop.host,
                                                  spec=pb2.Spec(
                                                      transport=hop.transport,
                                                      propagation=hop.prop,
                                                  )))

    return pb2.TestRequest(
        id=id_,
        name=get_name(hops[0]),
        service_hops=[build_service_hop(hop) for hop in hops])