Skip to content

Commit 7a86c8d

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 97e0eb9 commit 7a86c8d

File tree

2 files changed

+67
-24
lines changed

2 files changed

+67
-24
lines changed

tests/functional/conftest.py

Lines changed: 23 additions & 24 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 = (
@@ -277,13 +275,11 @@ def group(gl):
277275
"path": f"group-{_id}",
278276
}
279277
group = gl.groups.create(data)
278+
group_id = group.id
280279

281280
yield group
282281

283-
try:
284-
group.delete()
285-
except gitlab.exceptions.GitlabDeleteError as e:
286-
print(f"Group already deleted: {e}")
282+
helpers.safe_delete(manager=gl.groups, object_id=group_id, description="Group")
287283

288284

289285
@pytest.fixture(scope="module")
@@ -296,10 +292,9 @@ def project(gl):
296292

297293
yield project
298294

299-
try:
300-
project.delete()
301-
except gitlab.exceptions.GitlabDeleteError as e:
302-
print(f"Project already deleted: {e}")
295+
helpers.safe_delete(
296+
manager=gl.projects, object_id=project.id, description="Project"
297+
)
303298

304299

305300
@pytest.fixture(scope="function")
@@ -365,12 +360,16 @@ def _merge_request(*, source_branch: str):
365360
yield _merge_request
366361

367362
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
363+
helpers.safe_delete(
364+
manager=project.mergerequests,
365+
object_id=mr_iid,
366+
description="Project mergerequest",
367+
)
368+
helpers.safe_delete(
369+
manager=project.branches,
370+
object_id=source_branch,
371+
description="Project branch",
372+
)
374373

375374

376375
@pytest.fixture(scope="module")
@@ -431,14 +430,14 @@ def user(gl):
431430
password = "fakepassword"
432431

433432
user = gl.users.create(email=email, username=username, name=name, password=password)
433+
user_id = user.id
434434

435435
yield user
436436

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}")
437+
# Use `hard_delete=True` or a 'Ghost User' may be created.
438+
helpers.safe_delete(
439+
manager=gl.users, object_id=user_id, description="User", hard_delete=True
440+
)
442441

443442

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

tests/functional/helpers.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 != 1:
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+
manager: gitlab.base.RESTManager,
30+
object_id: int,
31+
description: str,
32+
hard_delete: bool = False,
33+
) -> None:
34+
"""Ensure the object specified can not be retrieved. If object still exists after
35+
timeout period, fail the test"""
36+
max_iterations = int(TIMEOUT / SLEEP_INTERVAL)
37+
for index in range(max_iterations):
38+
try:
39+
object = manager.get(object_id)
40+
except gitlab.exceptions.GitlabGetError:
41+
return
42+
delete_object(object=object, index=index, hard_delete=hard_delete)
43+
time.sleep(SLEEP_INTERVAL)
44+
pytest.fail(f"{description} {object!r} was not deleted")

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy