From 0f7439d997ca6aca54a9babf68fe0f5e4ab016ad Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 26 Apr 2024 16:47:50 +0200
Subject: [PATCH] Avoid race conditions in unit tests

---
 test/cli/test_imports.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/test/cli/test_imports.py b/test/cli/test_imports.py
index f8e5324b..d7598fe0 100644
--- a/test/cli/test_imports.py
+++ b/test/cli/test_imports.py
@@ -1,4 +1,5 @@
 import json
+import time
 from pathlib import Path
 
 import pytest
@@ -191,6 +192,7 @@ def test_import_iptrunk_success(iptrunk_data):
 
     import_iptrunks(iptrunk_data()["path"])
 
+    time.sleep(1)
     assert len(get_subscriptions([ProductType.IMPORTED_IP_TRUNK])) == 0
     assert len(get_active_iptrunk_subscriptions()) == 1
 
@@ -201,6 +203,7 @@ def test_import_site_success(site_data):
 
     import_sites(mock_site_data["path"])
 
+    time.sleep(1)
     assert len(get_subscriptions([ProductType.IMPORTED_SITE])) == 0
     subscription = retrieve_subscription_by_subscription_instance_value(
         resource_type="site_name", value=mock_site_data["data"]["site_name"]
@@ -214,6 +217,7 @@ def test_import_site_twice(site_data, capfd):
     #  Second identical import should print ValidationError to stdout
     import_sites(path_location)
 
+    time.sleep(1)
     out, _ = capfd.readouterr()
     assert (
         """Validation error: 4 validation errors for SiteImportModel
@@ -237,6 +241,7 @@ def test_import_site_with_invalid_data(site_data, capfd):
     assert SubscriptionTable.query.count() == 0
     import_sites(incorrect_site_data["path"])
 
+    time.sleep(1)
     out, _ = capfd.readouterr()
     assert (
         """Validation error: 2 validation errors for SiteImportModel
@@ -252,6 +257,7 @@ site_longitude
 def test_import_router_success(site_subscription_factory, router_data):
     assert SubscriptionTable.query.count() == 0
     import_routers(router_data()["path"])
+    time.sleep(1)
     assert len(get_active_router_subscriptions()) == 1
 
 
@@ -259,6 +265,7 @@ def test_import_router_with_invalid_data(router_data, capfd):
     broken_data = router_data(hostname="", router_lo_ipv6_address="Not an IP address")
     import_routers(broken_data["path"])
     #  Only a Site has been added, no Router
+    time.sleep(1)
     assert SubscriptionTable.query.count() == 1
     out, _ = capfd.readouterr()
     #  The extra space at the end of the next line is required, and not dangling by accident.
@@ -273,6 +280,7 @@ def test_import_router_with_invalid_data(router_data, capfd):
 def test_import_iptrunk_successful(iptrunk_data):
     assert SubscriptionTable.query.count() == 0
     import_iptrunks(iptrunk_data()["path"])
+    time.sleep(1)
     assert SubscriptionTable.query.count() == 5
     assert len(get_active_iptrunk_subscriptions()) == 1
 
@@ -280,6 +288,7 @@ def test_import_iptrunk_successful(iptrunk_data):
 def test_import_iptrunk_invalid_router_id_side_a_and_b(iptrunk_data, capfd):
     broken_data = iptrunk_data(side_a_node="Doesn't exist", side_b_node="Also doesn't exist")
     import_iptrunks(broken_data["path"])
+    time.sleep(1)
     out, _ = capfd.readouterr()
     assert SubscriptionTable.query.count() == 4
     assert len(get_active_iptrunk_subscriptions()) == 0
@@ -299,8 +308,9 @@ def test_import_iptrunk_non_unique_members_side_a_and_b(iptrunk_data, faker, cap
     side_b_members = [duplicate_interface for _ in range(5)]
     broken_data = iptrunk_data(side_a_members=side_a_members, side_b_members=side_b_members)
     import_iptrunks(broken_data["path"])
-    out, _ = capfd.readouterr()
 
+    time.sleep(1)
+    out, _ = capfd.readouterr()
     assert SubscriptionTable.query.count() == 4
     assert len(get_active_iptrunk_subscriptions()) == 0
     assert (
@@ -322,8 +332,9 @@ def test_import_iptrunk_side_a_member_count_mismatch(iptrunk_data, faker, capfd)
     ]
     broken_data = iptrunk_data(side_a_members=side_a_members, side_b_members=side_b_members)
     import_iptrunks(broken_data["path"])
-    out, _ = capfd.readouterr()
+    time.sleep(1)
 
+    out, _ = capfd.readouterr()
     assert SubscriptionTable.query.count() == 4
     assert len(get_active_iptrunk_subscriptions()) == 0
     assert (
@@ -337,6 +348,7 @@ __root__
 def test_import_office_router_success(office_router_data):
     assert SubscriptionTable.query.count() == 0
     import_office_routers(office_router_data()["path"])
+    time.sleep(1)
     assert SubscriptionTable.query.count() == 2
     assert len(get_subscriptions([ProductType.IMPORTED_OFFICE_ROUTER])) == 0
     assert len(get_subscriptions([ProductType.OFFICE_ROUTER])) == 1
@@ -345,6 +357,7 @@ def test_import_office_router_success(office_router_data):
 def test_import_super_pop_switch_success(super_pop_switch_data):
     assert SubscriptionTable.query.count() == 0
     import_super_pop_switches(super_pop_switch_data()["path"])
+    time.sleep(1)
     assert SubscriptionTable.query.count() == 2
     assert len(get_subscriptions([ProductType.IMPORTED_SUPER_POP_SWITCH])) == 0
     assert len(get_subscriptions([ProductType.SUPER_POP_SWITCH])) == 1
-- 
GitLab