11import os
2- import subprocess
32
43import pytest
54from redis .asyncio import Redis
87
98VECTOR_TYPES = ["vector" , "halfvec" ]
109
11- # try:
12- # from testcontainers.compose import DockerCompose
13-
14- # TESTCONTAINERS_AVAILABLE = True
15- # except ImportError:
16- # TESTCONTAINERS_AVAILABLE = False
17-
18- # if TESTCONTAINERS_AVAILABLE:
19-
2010
2111@pytest .fixture (autouse = True )
2212def set_tokenizers_parallelism ():
2313 """Disable tokenizers parallelism in tests to avoid deadlocks"""
2414 os .environ ["TOKENIZERS_PARALLELISM" ] = "false"
2515
26- # @pytest.fixture(scope="session", autouse=True)
27- # def redis_container() -> DockerCompose:
28- # # Set the default Redis version if not already set
29- # os.environ.setdefault("REDIS_VERSION", "edge")
30-
31- # try:
32- # compose = DockerCompose(
33- # "tests", compose_file_name="docker-compose.yml", pull=True
34- # )
35- # compose.start()
36-
37- # redis_host, redis_port = compose.get_service_host_and_port("redis", 6379)
38- # redis_url = f"redis://{redis_host}:{redis_port}"
39- # os.environ["DEFAULT_REDIS_URI"] = redis_url
40-
41- # yield compose
42-
43- # compose.stop()
44- # except subprocess.CalledProcessError:
45- # yield None
46-
4716
4817@pytest .fixture (scope = "session" , autouse = True )
4918def redis_container (request ):
5019 """
51- Create a unique Compose project for each xdist worker by setting
52- COMPOSE_PROJECT_NAME. That prevents collisions on container/volume names.
20+ If using xdist, create a unique Compose project for each xdist worker by
21+ setting COMPOSE_PROJECT_NAME. That prevents collisions on container/volume
22+ names.
5323 """
5424 # In xdist, the config has "workerid" in workerinput
55- worker_id = request .config .workerinput .get ("workerid" , "master" )
25+ workerinput = getattr (request .config , "workerinput" , {})
26+ worker_id = workerinput .get ("workerid" , "master" )
27+
5628
5729 # Set the Compose project name so containers do not clash across workers
5830 os .environ ["COMPOSE_PROJECT_NAME" ] = f"redis_test_{ worker_id } "
59- os .environ .setdefault ("REDIS_VERSION " , "edge " )
31+ os .environ .setdefault ("REDIS_IMAGE " , "redis/redis-stack-server:latest " )
6032
6133 compose = DockerCompose (
6234 context = "tests" ,
@@ -70,11 +42,6 @@ def redis_container(request):
7042 compose .stop ()
7143
7244
73- # @pytest.fixture(scope="session")
74- # def redis_url() -> str:
75- # return os.getenv("DEFAULT_REDIS_URI", "redis://localhost:6379")
76-
77-
7845@pytest .fixture (scope = "session" )
7946def redis_url (redis_container ):
8047 """
@@ -85,6 +52,15 @@ def redis_url(redis_container):
8552 return f"redis://{ host } :{ port } "
8653
8754
55+ @pytest .fixture
56+ async def async_client (redis_url ):
57+ """
58+ An async Redis client that uses the dynamic `redis_url`.
59+ """
60+ async with await RedisConnectionFactory ._get_aredis_connection (redis_url ) as client :
61+ yield client
62+
63+
8864@pytest .fixture
8965def client (redis_url ):
9066 """
0 commit comments