test_grpc.py 2.2 KB
Newer Older
P
peng.xu 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
import logging
import opentracing
from mishards.grpc_utils import GrpcSpanDecorator, is_grpc_method
from milvus.grpc_gen import status_pb2, milvus_pb2

logger = logging.getLogger(__name__)


class FakeTracer(opentracing.Tracer):
    pass


class FakeSpan(opentracing.Span):
    def __init__(self, context, tracer, **kwargs):
        super(FakeSpan, self).__init__(tracer, context)
        self.reset()

    def set_tag(self, key, value):
        self.tags.append({key: value})

    def log_kv(self, key_values, timestamp=None):
        self.logs.append(key_values)

    def reset(self):
        self.tags = []
        self.logs = []


class FakeRpcInfo:
    def __init__(self, request, response):
        self.request = request
        self.response = response


class TestGrpcUtils:
    def test_span_deco(self):
        request = 'request'
        OK = status_pb2.Status(error_code=status_pb2.SUCCESS, reason='Success')
        response = OK
        rpc_info = FakeRpcInfo(request=request, response=response)
        span = FakeSpan(context=None, tracer=FakeTracer())
        span_deco = GrpcSpanDecorator()
        span_deco(span, rpc_info)
        assert len(span.logs) == 0
        assert len(span.tags) == 0

        response = milvus_pb2.BoolReply(status=OK, bool_reply=False)
        rpc_info = FakeRpcInfo(request=request, response=response)
        span = FakeSpan(context=None, tracer=FakeTracer())
        span_deco = GrpcSpanDecorator()
        span_deco(span, rpc_info)
        assert len(span.logs) == 0
        assert len(span.tags) == 0

        response = 1
        rpc_info = FakeRpcInfo(request=request, response=response)
        span = FakeSpan(context=None, tracer=FakeTracer())
        span_deco = GrpcSpanDecorator()
        span_deco(span, rpc_info)
        assert len(span.logs) == 1
        assert len(span.tags) == 1

        response = 0
        rpc_info = FakeRpcInfo(request=request, response=response)
        span = FakeSpan(context=None, tracer=FakeTracer())
        span_deco = GrpcSpanDecorator()
        span_deco(span, rpc_info)
        assert len(span.logs) == 0
        assert len(span.tags) == 0

    def test_is_grpc_method(self):
        target = 1
        assert not is_grpc_method(target)
        target = None
        assert not is_grpc_method(target)