Skip to content

Commit 85a44bb

Browse files
authored
Merge pull request #2 from zliang-akamai/zhiwei/refactor-test
Refactored integration test, will test end to end.
2 parents cf84a40 + d0a46c1 commit 85a44bb

File tree

1 file changed

+31
-56
lines changed

1 file changed

+31
-56
lines changed

test/integration/models/monitor/test_monitor.py

Lines changed: 31 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from linode_api4 import LinodeClient
1111
from linode_api4.objects import (
1212
AlertDefinition,
13+
ApiError,
1314
MonitorDashboard,
1415
MonitorMetricsDefinition,
1516
MonitorService,
@@ -218,6 +219,27 @@ def test_integration_create_get_update_delete_alert_definition(
218219
)
219220

220221
created = None
222+
223+
def wait_for_alert_ready(alert_id, service_type: str):
224+
timeout = 360 # max time alert should take to create
225+
INITIAL_TIMEOUT = 1
226+
start = time.time()
227+
interval = INITIAL_TIMEOUT
228+
alert = client.load(AlertDefinition, alert_id, service_type)
229+
while (
230+
getattr(alert, "status", None) == "in progress"
231+
and (time.time() - start) < timeout
232+
):
233+
time.sleep(interval)
234+
interval *= 2
235+
try:
236+
alert._api_get()
237+
except ApiError as e:
238+
# transient errors while polling; continue until timeout
239+
if e.status != 404:
240+
raise
241+
return alert
242+
221243
try:
222244
# Create the alert definition using API-compliant top-level fields
223245
created = client.monitor.create_alert_definition(
@@ -233,50 +255,13 @@ def test_integration_create_get_update_delete_alert_definition(
233255
assert created.id
234256
assert getattr(created, "label", None) == label
235257

236-
# Wait for server-side processing to complete (status transitions)
237-
timeout = 180 # max time alert should take to create
238-
interval = 10
239-
start = time.time()
240-
while (
241-
getattr(created, "status", None) == "in progress"
242-
and (time.time() - start) < timeout
243-
):
244-
time.sleep(interval)
245-
try:
246-
created = client.load(AlertDefinition, created.id, service_type)
247-
except Exception:
248-
# transient errors while polling; continue until timeout
249-
pass
258+
created = wait_for_alert_ready(created.id, service_type)
250259

251-
update_alert = None
260+
updated = client.load(AlertDefinition, created.id, service_type)
261+
updated.label = f"{label}-updated"
262+
updated.save()
252263

253-
if created:
254-
update_alert = client.load(
255-
AlertDefinition, created.id, service_type
256-
)
257-
update_alert.label = f"{label}-updated"
258-
update_alert.save()
259-
else:
260-
pytest.fail("Alert definition was not created successfully")
261-
262-
if update_alert:
263-
updated = client.load(
264-
AlertDefinition, update_alert.id, service_type
265-
)
266-
while (
267-
getattr(updated, "status", None) == "in progress"
268-
and (time.time() - start) < timeout
269-
):
270-
time.sleep(interval)
271-
try:
272-
updated = client.load(
273-
AlertDefinition, updated.id, service_type
274-
)
275-
except Exception:
276-
# transient errors while polling; continue until timeout
277-
pass
278-
else:
279-
pytest.fail("Alert definition was not updated successfully")
264+
updated = wait_for_alert_ready(updated.id, service_type)
280265

281266
assert created.id == updated.id
282267
assert updated.label == f"{label}-updated"
@@ -285,17 +270,7 @@ def test_integration_create_get_update_delete_alert_definition(
285270
if created:
286271
# Best-effort cleanup; allow transient errors.
287272
# max time alert should take to update
288-
try:
289-
delete_alert = client.load(
290-
AlertDefinition, created.id, service_type
291-
)
292-
delete_alert.delete()
293-
except Exception:
294-
assert False, "Could not delete alert definition during cleanup"
295-
296-
# confirm it's gone (if API returns 404 or raises)
297-
try:
298-
client.load(AlertDefinition, created.id, service_type)
299-
assert False, "Alert definition still retrievable after delete"
300-
except Exception:
301-
pass
273+
delete_alert = client.load(
274+
AlertDefinition, created.id, service_type
275+
)
276+
delete_alert.delete()

0 commit comments

Comments
 (0)