@@ -412,11 +412,52 @@ def _create_server(self) -> ManagedProcess:
412412 return server
413413
414414
415+ @pytest .fixture
416+ def store_kv (request ):
417+ """
418+ KV store for runtime. Defaults to "etcd".
419+
420+ To iterate over multiple stores in a test:
421+ @pytest.mark.parametrize("store_kv", ["file", "etcd"], indirect=True)
422+ def test_example(runtime_services):
423+ ...
424+ """
425+ return getattr (request , "param" , "etcd" )
426+
427+
428+ @pytest .fixture
429+ def request_plane (request ):
430+ """
431+ Request plane for runtime. Defaults to "nats".
432+
433+ To iterate over multiple transports in a test:
434+ @pytest.mark.parametrize("request_plane", ["nats", "tcp"], indirect=True)
435+ def test_example(runtime_services):
436+ ...
437+ """
438+ return getattr (request , "param" , "nats" )
439+
440+
415441@pytest .fixture ()
416- def runtime_services (request ):
417- with NatsServer (request ) as nats_process :
442+ def runtime_services (request , store_kv , request_plane ):
443+ """
444+ Start runtime services (NATS and/or etcd) based on store_kv and request_plane.
445+
446+ - If store_kv != "etcd", etcd is not started (returns None)
447+ - If request_plane != "nats", NATS is not started (returns None)
448+ """
449+ if request_plane == "nats" and store_kv == "etcd" :
450+ with NatsServer (request ) as nats_process :
451+ with EtcdServer (request ) as etcd_process :
452+ yield nats_process , etcd_process
453+ elif request_plane == "nats" :
454+ with NatsServer (request ) as nats_process :
455+ yield nats_process , None
456+ elif store_kv == "etcd" :
418457 with EtcdServer (request ) as etcd_process :
419- yield nats_process , etcd_process
458+ yield None , etcd_process
459+ else :
460+ yield None , None
420461
421462
422463@pytest .fixture (scope = "session" )
0 commit comments