Skip to content

Commit dd9d354

Browse files
committed
add tests with async grpc server
1 parent 704e1f5 commit dd9d354

File tree

2 files changed

+44
-8
lines changed

2 files changed

+44
-8
lines changed

tests/contrib/grpc/grpc_app/server.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2929
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3030

31+
import asyncio
3132
import logging
33+
import os
3234
import sys
3335
from concurrent import futures
3436

@@ -78,10 +80,24 @@ def serve(port):
7880
server.wait_for_termination()
7981

8082

83+
async def serve_async(port):
84+
apm_client = GRPCApmClient(
85+
service_name="grpc-server", disable_metrics="*", api_request_time="100ms", central_config="False"
86+
)
87+
server = grpc.aio.server()
88+
pb2_grpc.add_TestServiceServicer_to_server(TestService(), server)
89+
server.add_insecure_port(f"[::]:{port}")
90+
await server.start()
91+
await server.wait_for_termination()
92+
93+
8194
if __name__ == "__main__":
8295
if len(sys.argv) > 1:
8396
port = sys.argv[1]
8497
else:
8598
port = "50051"
8699
logging.basicConfig()
87-
serve(port)
100+
if os.environ.get("GRPC_SERVER_ASYNC") == 1:
101+
asyncio.run(serve_async(port))
102+
else:
103+
serve(port)

tests/contrib/grpc/grpc_client_tests.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@
4949
from .grpc_app.testgrpc_pb2_grpc import TestServiceStub
5050

5151

52-
@pytest.fixture()
53-
def grpc_server(validating_httpserver, request):
52+
def setup_env(request, validating_httpserver):
5453
config = getattr(request, "param", {})
5554
env = {f"ELASTIC_APM_{k.upper()}": str(v) for k, v in config.items()}
5655
env.setdefault("ELASTIC_APM_SERVER_URL", validating_httpserver.url)
56+
return env
57+
58+
59+
def setup_grpc_server(env):
5760
free_port = get_free_port()
5861
server_proc = subprocess.Popen(
5962
[os.path.join(sys.prefix, "bin", "python"), "-m", "tests.contrib.grpc.grpc_app.server", str(free_port)],
@@ -62,15 +65,32 @@ def grpc_server(validating_httpserver, request):
6265
env=env,
6366
)
6467
wait_for_open_port(free_port)
65-
yield f"localhost:{free_port}"
66-
server_proc.terminate()
68+
return server_proc, free_port
6769

6870

6971
@pytest.fixture()
70-
def grpc_client_and_server_url(grpc_server):
71-
test_channel = grpc.insecure_channel(grpc_server)
72+
def env_fixture(validating_httpserver, request):
73+
env = setup_env(request, validating_httpserver)
74+
return env
75+
76+
77+
if hasattr(grpc, "aio"):
78+
grpc_server_fixture_params = ["async", "sync"]
79+
else:
80+
grpc_server_fixture_params = ["sync"]
81+
82+
83+
@pytest.fixture(params=grpc_server_fixture_params)
84+
def grpc_client_and_server_url(env_fixture, request):
85+
env = env_fixture
86+
if request.param == "async":
87+
env["GRPC_SERVER_ASYNC"] = 1
88+
server_proc, free_port = setup_grpc_server(env)
89+
server_addr = f"localhost:{free_port}"
90+
test_channel = grpc.insecure_channel(server_addr)
7291
test_client = TestServiceStub(test_channel)
73-
yield test_client, grpc_server
92+
yield test_client, server_addr
93+
server_proc.terminate()
7494

7595

7696
def test_grpc_client_server_instrumentation(instrument, sending_elasticapm_client, grpc_client_and_server_url):

0 commit comments

Comments
 (0)