4949from .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 = {k : v for k , v in env_fixture .items ()}
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
7696def test_grpc_client_server_instrumentation (instrument , sending_elasticapm_client , grpc_client_and_server_url ):
@@ -200,7 +220,7 @@ def test_grpc_client_unsampled_span(instrument, sending_elasticapm_client, grpc_
200220
201221
202222@pytest .mark .parametrize (
203- "grpc_server " ,
223+ "env_fixture " ,
204224 [
205225 {
206226 "recording" : "False" ,
0 commit comments