Skip to content

Commit 8d73124

Browse files
committed
much faster tests
1 parent ed4d322 commit 8d73124

File tree

6 files changed

+12
-38
lines changed

6 files changed

+12
-38
lines changed

packages/pytest-simcore/src/pytest_simcore/redis_service.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import tenacity
1111
from pytest_mock import MockerFixture
1212
from redis.asyncio import Redis, from_url
13-
from servicelib.redis import _constants as redis_constants
1413
from settings_library.basic_types import PortInt
1514
from settings_library.redis import RedisDatabase, RedisSettings
1615
from tenacity.before_sleep import before_sleep_log
@@ -119,6 +118,6 @@ async def wait_till_redis_responsive(redis_url: URL | str) -> None:
119118
@pytest.fixture
120119
def mock_redis_socket_timeout(mocker: MockerFixture) -> None:
121120
# lowered to allow CI to properly shutdown RedisClientSDK instances
122-
mocker.patch.object(
123-
redis_constants, "DEFAULT_SOCKET_TIMEOUT", timedelta(seconds=0.25)
121+
mocker.patch(
122+
"servicelib.redis._client.DEFAULT_SOCKET_TIMEOUT", timedelta(seconds=0.25)
124123
)

packages/service-library/src/servicelib/redis/_client.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,16 @@
1111
from redis.asyncio.retry import Retry
1212
from redis.backoff import ExponentialBackoff
1313
from servicelib.async_utils import cancel_wait_task
14-
from tenacity import retry
15-
from yarl import URL
14+
from servicelib.background_task import periodic
1615

1716
from ..logging_utils import log_catch
18-
from ..retry_policies import RedisRetryPolicyUponInitialization
1917
from ._constants import (
2018
DEFAULT_DECODE_RESPONSES,
2119
DEFAULT_HEALTH_CHECK_INTERVAL,
2220
DEFAULT_LOCK_TTL,
2321
DEFAULT_SOCKET_TIMEOUT,
2422
SHUTDOWN_TIMEOUT_S,
2523
)
26-
from ._errors import CouldNotConnectToRedisError
2724

2825
_logger = logging.getLogger(__name__)
2926

@@ -52,27 +49,24 @@ def __post_init__(self) -> None:
5249
retry_on_error=[
5350
redis.exceptions.BusyLoadingError,
5451
redis.exceptions.ConnectionError,
55-
redis.exceptions.TimeoutError,
5652
],
53+
retry_on_timeout=True,
5754
socket_timeout=DEFAULT_SOCKET_TIMEOUT.total_seconds(),
58-
socket_connect_timeout=DEFAULT_SOCKET_TIMEOUT.total_seconds(),
5955
encoding="utf-8",
6056
decode_responses=self.decode_responses,
6157
client_name=self.client_name,
6258
)
59+
# NOTE: connection is done here already
60+
self._is_healthy = True
6361

64-
@retry(**RedisRetryPolicyUponInitialization(_logger).kwargs)
65-
async def setup(self) -> None:
66-
if not await self.ping():
67-
await self.shutdown()
68-
url_safe = URL(self.redis_dsn).with_password("???")
69-
raise CouldNotConnectToRedisError(dsn=f"{url_safe}")
62+
@periodic(interval=self.health_check_interval)
63+
async def _periodic_check_health() -> None:
64+
self._is_healthy = await self.ping()
7065

7166
self._health_check_task = asyncio.create_task(
72-
self._check_health(),
67+
_periodic_check_health(),
7368
name=f"redis_service_health_check_{self.redis_dsn}__{uuid4()}",
7469
)
75-
self._is_healthy = True
7670

7771
_logger.info(
7872
"Connection to %s succeeded with %s",
@@ -96,14 +90,6 @@ async def ping(self) -> bool:
9690
return True
9791
return False
9892

99-
async def _check_health(self) -> None:
100-
sleep_s = self.health_check_interval.total_seconds()
101-
102-
while self._continue_health_checking:
103-
with log_catch(_logger, reraise=False):
104-
self._is_healthy = await self.ping()
105-
await asyncio.sleep(sleep_s)
106-
10793
@property
10894
def is_healthy(self) -> bool:
10995
"""Returns the result of the last health check.

packages/service-library/src/servicelib/redis/_clients_manager.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ async def setup(self) -> None:
2727
client_name=f"{self.client_name}",
2828
)
2929

30-
for client in self._client_sdks.values():
31-
await client.setup()
32-
3330
async def shutdown(self) -> None:
3431
# NOTE: somehow using logged_gather is not an option
3532
# doing so will make the shutdown procedure hang

packages/service-library/tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ async def _(
8787
assert client
8888
assert client.redis_dsn == redis_resources_dns
8989
assert client.client_name == "pytest"
90-
await client.setup()
9190

9291
yield client
9392

packages/service-library/tests/deferred_tasks/test_deferred_tasks.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
from pytest_mock import MockerFixture
2323
from servicelib.rabbitmq import RabbitMQClient
2424
from servicelib.redis import RedisClientSDK
25-
from servicelib.redis import _constants as redis_client_constants
2625
from servicelib.sequences_utils import partition_gen
2726
from settings_library.rabbit import RabbitSettings
2827
from settings_library.redis import RedisSettings
@@ -389,9 +388,8 @@ async def pause_redis(self) -> AsyncIterator[None]:
389388

390389
@pytest.fixture
391390
def mock_default_socket_timeout(mocker: MockerFixture) -> None:
392-
mocker.patch.object(
393-
redis_client_constants,
394-
"DEFAULT_SOCKET_TIMEOUT",
391+
mocker.patch(
392+
"servicelib.redis._client.DEFAULT_SOCKET_TIMEOUT",
395393
datetime.timedelta(seconds=0.25),
396394
)
397395

packages/service-library/tests/redis/test_client.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,6 @@ async def test_redis_client_sdk_setup_shutdown(
113113
assert client
114114
assert client.redis_dsn == redis_resources_dns
115115

116-
# ensure nothing happens if shutdown is called before setup
117-
await client.shutdown()
118-
119-
await client.setup()
120-
121116
# ensure health check task sets the health to True
122117
client._is_healthy = False # noqa: SLF001
123118
async for attempt in AsyncRetrying(

0 commit comments

Comments
 (0)