Skip to content

Commit 47e1283

Browse files
committed
Retry retries
1 parent a7cf1de commit 47e1283

2 files changed

Lines changed: 21 additions & 15 deletions

File tree

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ TEST_CMD := APIGEE_ACCESS_TOKEN="$(APIGEE_ACCESS_TOKEN)" \
134134
STATUS_ENDPOINT_API_KEY="$(STATUS_ENDPOINT_API_KEY)" \
135135
PYTHONPATH=. poetry run pytest --disable-warnings -vv \
136136
--color=yes \
137+
-n 4 \
137138
--api-name=nhs-notify-supplier \
138139
--proxy-name="$(PROXY_NAME)" \
139140
-s \

tests/e2e-tests/lib/letters.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,31 @@ def get_pending_letter_ids(
5151
headers: dict,
5252
letters_endpoint: str,
5353
limit: int = 1,
54-
timeout_s: int = 60,
55-
interval_s: int = 5,
54+
timeout_s: int = 20,
55+
interval_s: int = 2,
56+
retries: int = 5,
5657
) -> list:
57-
"""Poll GET /letters until the requested number of PENDING letters are returned.
58+
"""Injects the given number of pending letters as test data, then waits for them to become
59+
visible via the letters endpoint. Retries to account for other tests running in parallel stealing the letters
5860
5961
Returns a list of letter ID strings.
60-
Raises TimeoutError if fewer than `limit` letters are returned within timeout_s.
62+
Raises TimeoutError if fewer than `limit` letters are returned after all retries are exhausted.
6163
"""
62-
deadline = time.monotonic() + timeout_s
63-
while time.monotonic() < deadline:
64-
response = requests.get(
65-
f"{url}/{letters_endpoint}?limit={limit}", headers=headers
66-
)
67-
response.raise_for_status()
68-
data = response.json().get("data", [])
69-
if len(data) >= limit:
70-
return [item.get("id") for item in data]
71-
time.sleep(interval_s)
64+
65+
for _ in range(retries):
66+
create_test_data(limit)
67+
deadline = time.monotonic() + timeout_s
68+
while time.monotonic() < deadline:
69+
response = requests.get(
70+
f"{url}/{letters_endpoint}?limit={limit}", headers=headers
71+
)
72+
response.raise_for_status()
73+
data = response.json().get("data", [])
74+
if len(data) >= limit:
75+
return [item.get("id") for item in data]
76+
time.sleep(interval_s)
7277

7378
raise TimeoutError(
74-
f"Timed out after {timeout_s}s waiting for {limit} PENDING letter(s) at "
79+
f"Timed out after {retries} retries waiting for {limit} PENDING letter(s) at "
7580
f"{url}/{letters_endpoint}"
7681
)

0 commit comments

Comments
 (0)