Skip to content

Commit 1838951

Browse files
wait for all replicasets to be ready
1 parent e44798e commit 1838951

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

newsfragments/629.internal.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
In tests, wait for all replicasets to be ready before checking service endpoints and monitored pods.

tests/integration/lib/helpers.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
SecurityContext,
1616
)
1717
from lightkube.models.meta_v1 import ObjectMeta
18+
from lightkube.resources.apps_v1 import ReplicaSet
1819
from lightkube.resources.core_v1 import ConfigMap, Endpoints, Namespace, Pod, Secret
1920

2021
from ..artifacts import CertKey
@@ -166,3 +167,19 @@ async def run_pod_with_args(kube_client: AsyncClient, namespace, image_name, pod
166167
return log_lines
167168
finally:
168169
await kube_client.delete(Pod, name=pod.metadata.name, namespace=namespace)
170+
171+
172+
async def wait_for_all_replicaset_replicas_ready(kube_client: AsyncClient, namespace: str):
173+
timeout = 30
174+
start_time = time.time()
175+
now = time.time()
176+
while start_time + timeout > now:
177+
now = time.time()
178+
await asyncio.sleep(0.5)
179+
async for rs in kube_client.list(ReplicaSet, namespace=namespace):
180+
if not rs.status or not rs.status.readyReplicas:
181+
break
182+
if rs.status.readyReplicas != rs.status.replicas:
183+
break
184+
else:
185+
return

tests/integration/test_networking.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from prometheus_client.parser import text_string_to_metric_families
1313

1414
from .fixtures.data import ESSData
15-
from .lib.helpers import run_pod_with_args, wait_for_endpoint_ready
15+
from .lib.helpers import run_pod_with_args, wait_for_all_replicaset_replicas_ready, wait_for_endpoint_ready
1616
from .lib.utils import read_service_monitor_kind
1717

1818

@@ -73,6 +73,9 @@ async def test_services_have_endpoints(
7373
kube_client: AsyncClient,
7474
generated_data: ESSData,
7575
):
76+
# Helm will stop waiting when 1 of replicas are ready
77+
# We need to wait for all replicas to be ready to check that services all have endpoints
78+
await wait_for_all_replicaset_replicas_ready(kube_client, generated_data.ess_namespace)
7679
endpoints_to_wait = []
7780
services = {}
7881
async for service in kube_client.list(
@@ -117,6 +120,9 @@ async def test_pods_monitored(
117120
kube_client: AsyncClient,
118121
generated_data: ESSData,
119122
):
123+
# Helm will stop waiting when 1 of replicas are ready
124+
# We need to wait for all replicas to be ready to be able to compute monitorable and monitored pods
125+
await wait_for_all_replicaset_replicas_ready(kube_client, generated_data.ess_namespace)
120126
all_monitorable_pods = set()
121127
async for pod in kube_client.list(
122128
Pod, namespace=generated_data.ess_namespace, labels={"app.kubernetes.io/part-of": op.in_(["matrix-stack"])}

0 commit comments

Comments
 (0)