Skip to content

Commit e409638

Browse files
chore: ensure reset_gitlab() succeeds
Ensure reset_gitlab() succeeds by waiting to make sure everything has been deleted as expected. If the timeout is exceeded fail the test. Not using `wait_for_sidekiq` as it didn't work. During testing I didn't see any sidekiq processes as being busy even though not everything was deleted.
1 parent d65ce36 commit e409638

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

tests/functional/conftest.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import pytest
88

99
import gitlab
10+
import gitlab.base
11+
12+
SLEEP_INTERVAL = 0.1
13+
TIMEOUT = 60 # seconds before timeout will occur
1014

1115

1216
@pytest.fixture(scope="session")
@@ -30,6 +34,37 @@ def reset_gitlab(gl):
3034
if user.username != "root":
3135
user.delete(hard_delete=True)
3236

37+
max_iterations = int(TIMEOUT / SLEEP_INTERVAL)
38+
39+
# Ensure everything has been reset
40+
start_time = time.perf_counter()
41+
42+
def wait_for_list_empty(
43+
rest_manager: gitlab.base.RESTManager, description: str
44+
) -> None:
45+
"""Wait for the list() to become empty or fail test if timeout is exceeded"""
46+
for _ in range(max_iterations):
47+
if rest_manager.list() == []:
48+
break
49+
time.sleep(SLEEP_INTERVAL)
50+
assert rest_manager.list() == [], (
51+
f"Did not delete all {description}. "
52+
f"Elapsed_time: {time.perf_counter() - start_time}"
53+
)
54+
55+
wait_for_list_empty(rest_manager=gl.projects, description="projects")
56+
wait_for_list_empty(rest_manager=gl.groups, description="groups")
57+
wait_for_list_empty(rest_manager=gl.variables, description="variables")
58+
59+
for _ in range(max_iterations):
60+
if len(gl.users.list()) <= 1:
61+
break
62+
time.sleep(SLEEP_INTERVAL)
63+
assert [user.username for user in gl.users.list()] == ["root"], (
64+
f"Did not delete all users. "
65+
f"elapsed_time: {time.perf_counter() - start_time}"
66+
)
67+
3368

3469
def set_token(container, fixture_dir):
3570
set_token_rb = fixture_dir / "set_token.rb"

0 commit comments

Comments
 (0)