Skip to content

Commit b8d3aa5

Browse files
chore: fixtures: after delete() wait to verify deleted
In our fixtures that create: - groups - project merge requests - projects - users They delete the created objects after use. Now wait to ensure the objects are deleted before continuing as having unexpected objects existing can impact some of our tests.
1 parent fcbced8 commit b8d3aa5

File tree

2 files changed

+55
-27
lines changed

2 files changed

+55
-27
lines changed

tests/functional/conftest.py

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99

1010
import gitlab
1111
import gitlab.base
12-
13-
SLEEP_INTERVAL = 0.5
14-
TIMEOUT = 60 # seconds before timeout will occur
12+
from tests.functional import helpers
1513

1614

1715
@pytest.fixture(scope="session")
@@ -49,7 +47,7 @@ def reset_gitlab(gl):
4947
logging.info(f"Marking for deletion user: {user.username!r}")
5048
user.delete(hard_delete=True)
5149

52-
max_iterations = int(TIMEOUT / SLEEP_INTERVAL)
50+
max_iterations = int(helpers.TIMEOUT / helpers.SLEEP_INTERVAL)
5351

5452
# Ensure everything has been reset
5553
start_time = time.perf_counter()
@@ -68,7 +66,7 @@ def wait_for_list_size(
6866
f"Iteration: {count} Waiting for {description!r} items to be deleted: "
6967
f"{[x.name for x in items]}"
7068
)
71-
time.sleep(SLEEP_INTERVAL)
69+
time.sleep(helpers.SLEEP_INTERVAL)
7270

7371
elapsed_time = time.perf_counter() - start_time
7472
error_message = (
@@ -280,10 +278,7 @@ def group(gl):
280278

281279
yield group
282280

283-
try:
284-
group.delete()
285-
except gitlab.exceptions.GitlabDeleteError as e:
286-
print(f"Group already deleted: {e}")
281+
helpers.safe_delete(object=group)
287282

288283

289284
@pytest.fixture(scope="module")
@@ -296,10 +291,7 @@ def project(gl):
296291

297292
yield project
298293

299-
try:
300-
project.delete()
301-
except gitlab.exceptions.GitlabDeleteError as e:
302-
print(f"Project already deleted: {e}")
294+
helpers.safe_delete(object=project)
303295

304296

305297
@pytest.fixture(scope="function")
@@ -327,7 +319,7 @@ def _merge_request(*, source_branch: str):
327319
assert result is True, "sidekiq process should have terminated but did not"
328320

329321
project.refresh() # Gets us the current default branch
330-
project.branches.create(
322+
mr_branch = project.branches.create(
331323
{"branch": source_branch, "ref": project.default_branch}
332324
)
333325
# NOTE(jlvillal): Must create a commit in the new branch before we can
@@ -359,18 +351,14 @@ def _merge_request(*, source_branch: str):
359351
time.sleep(0.5)
360352
assert mr.merge_status != "checking"
361353

362-
to_delete.append((mr.iid, source_branch))
354+
to_delete.append((mr, mr_branch))
363355
return mr
364356

365357
yield _merge_request
366358

367-
for mr_iid, source_branch in to_delete:
368-
project.mergerequests.delete(mr_iid)
369-
try:
370-
project.branches.delete(source_branch)
371-
except gitlab.exceptions.GitlabDeleteError:
372-
# Ignore if branch was already deleted
373-
pass
359+
for mr, mr_branch in to_delete:
360+
helpers.safe_delete(object=mr)
361+
helpers.safe_delete(object=mr_branch)
374362

375363

376364
@pytest.fixture(scope="module")
@@ -434,11 +422,8 @@ def user(gl):
434422

435423
yield user
436424

437-
try:
438-
# Use `hard_delete=True` or a 'Ghost User' may be created.
439-
user.delete(hard_delete=True)
440-
except gitlab.exceptions.GitlabDeleteError as e:
441-
print(f"User already deleted: {e}")
425+
# Use `hard_delete=True` or a 'Ghost User' may be created.
426+
helpers.safe_delete(object=user, hard_delete=True)
442427

443428

444429
@pytest.fixture(scope="module")

tests/functional/helpers.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import logging
2+
import time
3+
4+
import pytest
5+
6+
import gitlab.base
7+
8+
SLEEP_INTERVAL = 0.5
9+
TIMEOUT = 60 # seconds before timeout will occur
10+
11+
12+
def delete_object(
13+
*, object: gitlab.base.RESTObject, index: int, hard_delete: bool = False
14+
):
15+
if index:
16+
logging.info(f"Attempt {index+1} to delete {object!r}.")
17+
try:
18+
if hard_delete:
19+
object.delete(hard_delete=True)
20+
else:
21+
object.delete()
22+
except gitlab.exceptions.GitlabDeleteError:
23+
logging.info(f"{object!r} already deleted.")
24+
pass
25+
26+
27+
def safe_delete(
28+
*,
29+
object: gitlab.base.RESTObject,
30+
hard_delete: bool = False,
31+
) -> None:
32+
"""Ensure the object specified can not be retrieved. If object still exists after
33+
timeout period, fail the test"""
34+
max_iterations = int(TIMEOUT / SLEEP_INTERVAL)
35+
manager = object.manager
36+
for index in range(max_iterations):
37+
try:
38+
object = manager.get(object.get_id())
39+
except gitlab.exceptions.GitlabGetError:
40+
return
41+
delete_object(object=object, index=index, hard_delete=hard_delete)
42+
time.sleep(SLEEP_INTERVAL)
43+
pytest.fail(f"{object!r} was not deleted")

0 commit comments

Comments
 (0)