def test_no_keys():
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()

    values = get_keys_values(request, context, [])

    assert values == []
Exemple #2
0
def test_ratelimit_reached_for_different_groups(clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    server = FakeGRPCServer()
    with freeze_time(datetime.utcfromtimestamp(14)):
        assert server.Foo(request, context)
        assert server.Foo(request, context)
        assert server.Foo(request, context)

        with pytest.raises(Exception):
            server.Foo(request, context)

        assert context.abort_status == grpc.StatusCode.RESOURCE_EXHAUSTED
        assert context.abort_message == (
            "Reached limit of 3 calls per 10 seconds. "
            "Resource will be available in 6 seconds.")

    with freeze_time(datetime.utcfromtimestamp(17)):
        assert server.Bar(request, context)
        assert server.Bar(request, context)

        with pytest.raises(Exception):
            server.Bar(request, context)

        assert context.abort_status == grpc.StatusCode.RESOURCE_EXHAUSTED
        assert context.abort_message == (
            "Reached limit of 2 calls per 5 seconds. "
            "Resource will be available in 3 seconds.")
def test_get_request_field():
    request = helloworld_pb2.HelloRequest(name="Aleksandr")
    context = FakeServicerContext()

    values = get_keys_values(request, context, ["request:name"])

    assert values == ["Aleksandr"]
Exemple #4
0
def test_call_method_under_limit(clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    server = FakeGRPCServer()
    with freeze_time(datetime.utcfromtimestamp(14)):
        assert server.Foo(request, context)
        assert server.Foo(request, context)
        assert server.Foo(request, context)
def test_get_metadata_value():
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    context.set_invocation_metadata((("user-agent", "Python 3.7 client"), ))

    values = get_keys_values(request, context, ["metadata:user-agent"])

    assert values == ["Python 3.7 client"]
def test_key_is_function():
    request = helloworld_pb2.HelloRequest(name="Aleksandr")
    context = FakeServicerContext()

    values = get_keys_values(request, context,
                             [lambda request, context: request.name])

    assert values == ["Aleksandr"]
Exemple #7
0
def test_record_new_call(clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    with freeze_time(datetime.utcfromtimestamp(14)):
        count, time_left = record_call(FakeGRPCServer.Foo,
                                       request,
                                       context,
                                       time_period=10)

    assert count == 1
    assert time_left == 6
Exemple #8
0
def test_record_same_group_but_different_keys(clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    with freeze_time(datetime.utcfromtimestamp(14)):
        count, time_left = record_call(FakeGRPCServer.Foo,
                                       request,
                                       context,
                                       time_period=10)

    assert count == 1
    assert time_left == 6

    with freeze_time(datetime.utcfromtimestamp(16)):
        count, time_left = record_call(
            FakeGRPCServer.Bar,
            helloworld_pb2.HelloRequest(name="Aleksandr"),
            context,
            time_period=10,
            group="FakeGRPCServer.Foo",
            keys=["request:name"],
        )

    assert count == 1
    assert time_left == 4
Exemple #9
0
def test_multiple_rpc_with_the_same_group_with_multiple_decorators(
        clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    server = FakeGRPCServer()
    with freeze_time(datetime.utcfromtimestamp(14)):
        assert server.Foo(request, context)
        assert server.Foo(request, context)
        assert server.Foo(request, context)

    with freeze_time(datetime.utcfromtimestamp(17)):
        server.Baz(request, context)
        server.Baz(request, context)

        with pytest.raises(Exception):
            server.Baz(request, context)

        assert context.abort_status == grpc.StatusCode.RESOURCE_EXHAUSTED
        assert context.abort_message == (
            "Reached limit of 5 calls per 10 seconds. "
            "Resource will be available in 3 seconds.")
Exemple #10
0
def test_rpc_with_multiple_decorators(clear_cache):
    request = helloworld_pb2.HelloRequest()
    context = FakeServicerContext()
    context.set_invocation_metadata((("user-agent", "Python 3.9 client"), ))
    server = FakeGRPCServer()

    with freeze_time(datetime.utcfromtimestamp(17)):
        assert server.Baz(request, context)
        assert server.Baz(request, context)

        with pytest.raises(Exception):
            server.Baz(request, context)

        assert context.abort_status == grpc.StatusCode.RESOURCE_EXHAUSTED
        assert context.abort_message == (
            "Reached limit of 2 calls per 5 seconds. "
            "Resource will be available in 3 seconds.")

    context1 = FakeServicerContext()
    context1.set_invocation_metadata((("user-agent", "Python 3.10 client"), ))
    with freeze_time(datetime.utcfromtimestamp(17)):
        assert server.Baz(request, context1)
        assert server.Baz(request, context1)
Exemple #11
0
def call_hello_method(addr, name):
    with grpc.insecure_channel(addr) as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response, call = stub.SayHello.with_call(
            helloworld_pb2.HelloRequest(name=name))
        return response.message