From 247bf8ab4c7fd4ba2881d2de138802fb48a485e5 Mon Sep 17 00:00:00 2001 From: Maciej Wilk Date: Fri, 13 Feb 2026 16:08:30 +0100 Subject: [PATCH 1/3] Add waits for Linodes to improve flaky tests --- .../models/account/test_account.py | 19 ++++++++++++++----- test/integration/models/domain/test_domain.py | 4 ++-- test/integration/models/linode/test_linode.py | 6 ++++++ .../models/networking/test_networking.py | 9 ++++++--- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/test/integration/models/account/test_account.py b/test/integration/models/account/test_account.py index 5833a9344..45104f1fe 100644 --- a/test/integration/models/account/test_account.py +++ b/test/integration/models/account/test_account.py @@ -1,7 +1,5 @@ import time from datetime import datetime -from test.integration.conftest import get_region -from test.integration.helpers import get_test_label, retry_sending_request import pytest @@ -13,6 +11,12 @@ Login, User, ) +from test.integration.conftest import get_region +from test.integration.helpers import ( + get_test_label, + retry_sending_request, + wait_for_condition +) @pytest.mark.smoke @@ -102,13 +106,18 @@ def test_latest_get_event(test_linode_client, e2e_test_firewall): firewall=e2e_test_firewall, ) - events = client.load(Event, "") + def get_linode_status(): + return linode.status == "running" + + # To ensure the Linode is running and the 'event' key has been populated + wait_for_condition(3, 100, get_linode_status) - latest_events = events._raw_json.get("data") + events = client.load(Event, "") + latest_events = events._raw_json.get("data")[:15] linode.delete() - for event in latest_events[:15]: + for event in latest_events: if label == event["entity"]["label"]: break else: diff --git a/test/integration/models/domain/test_domain.py b/test/integration/models/domain/test_domain.py index 9dc180a6e..d7956d421 100644 --- a/test/integration/models/domain/test_domain.py +++ b/test/integration/models/domain/test_domain.py @@ -43,10 +43,10 @@ def test_clone(test_linode_client, test_domain): dom = "example.clone-" + timestamp + "-inttestsdk.org" domain.clone(dom) - ds = test_linode_client.domains() - time.sleep(1) + ds = test_linode_client.domains() + domains = [i.domain for i in ds] assert dom in domains diff --git a/test/integration/models/linode/test_linode.py b/test/integration/models/linode/test_linode.py index 574d5d9d2..de4c2306e 100644 --- a/test/integration/models/linode/test_linode.py +++ b/test/integration/models/linode/test_linode.py @@ -611,6 +611,12 @@ def test_linode_initate_migration(test_linode_client, e2e_test_firewall): migration_type=MigrationType.COLD, ) + def get_linode_status(): + return linode.status == "offline" + + # To verify if Linode's status changed before deletion (during migration status equals to 'offline') + wait_for_condition(5, 60, get_linode_status) + res = linode.delete() assert res diff --git a/test/integration/models/networking/test_networking.py b/test/integration/models/networking/test_networking.py index 0edd5bd0a..27ffbb444 100644 --- a/test/integration/models/networking/test_networking.py +++ b/test/integration/models/networking/test_networking.py @@ -32,7 +32,7 @@ ) -def create_linode(test_linode_client): +def create_linode_func(test_linode_client): client = test_linode_client label = get_test_label() @@ -49,7 +49,7 @@ def create_linode(test_linode_client): @pytest.fixture def create_linode_for_ip_share(test_linode_client): - linode = create_linode(test_linode_client) + linode = create_linode_func(test_linode_client) yield linode @@ -58,7 +58,7 @@ def create_linode_for_ip_share(test_linode_client): @pytest.fixture def create_linode_to_be_shared_with_ips(test_linode_client): - linode = create_linode(test_linode_client) + linode = create_linode_func(test_linode_client) yield linode @@ -302,6 +302,8 @@ def test_create_and_delete_vlan(test_linode_client, linode_for_vlan_tests): wait_for_condition(3, 100, get_status, linode, "rebooting") assert linode.status == "rebooting" + wait_for_condition(3, 100, get_status, linode, "running") + # Delete the VLAN is_deleted = test_linode_client.networking.delete_vlan( vlan_label, linode.region @@ -334,6 +336,7 @@ def test_get_global_firewall_settings(test_linode_client): def test_ip_info(test_linode_client, create_linode): linode = create_linode + wait_for_condition(3, 100, get_status, linode, "running") ip_info = test_linode_client.load(IPAddress, linode.ipv4[0]) From af6b1033d08650b3cf32265bdbc6c197fd2f7eab Mon Sep 17 00:00:00 2001 From: Maciej Wilk Date: Mon, 16 Feb 2026 11:44:45 +0100 Subject: [PATCH 2/3] Increase timeout for Linode's 'offline' status --- test/integration/models/linode/test_linode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/models/linode/test_linode.py b/test/integration/models/linode/test_linode.py index de4c2306e..9f6194fa9 100644 --- a/test/integration/models/linode/test_linode.py +++ b/test/integration/models/linode/test_linode.py @@ -614,8 +614,8 @@ def test_linode_initate_migration(test_linode_client, e2e_test_firewall): def get_linode_status(): return linode.status == "offline" - # To verify if Linode's status changed before deletion (during migration status equals to 'offline') - wait_for_condition(5, 60, get_linode_status) + # To verify that Linode's status changed before deletion (during migration status is set to 'offline') + wait_for_condition(5, 120, get_linode_status) res = linode.delete() From 1eacc5b5edaf621721224c0c46cf141bdef915ec Mon Sep 17 00:00:00 2001 From: Maciej Wilk Date: Tue, 17 Feb 2026 12:16:41 +0100 Subject: [PATCH 3/3] Revert import changes in test_account.py --- test/integration/models/account/test_account.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/integration/models/account/test_account.py b/test/integration/models/account/test_account.py index 45104f1fe..4c4dcc134 100644 --- a/test/integration/models/account/test_account.py +++ b/test/integration/models/account/test_account.py @@ -1,5 +1,11 @@ import time from datetime import datetime +from test.integration.conftest import get_region +from test.integration.helpers import ( + get_test_label, + retry_sending_request, + wait_for_condition, +) import pytest @@ -11,12 +17,6 @@ Login, User, ) -from test.integration.conftest import get_region -from test.integration.helpers import ( - get_test_label, - retry_sending_request, - wait_for_condition -) @pytest.mark.smoke