summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJohn L. Villalovos <john@sodarock.com>2022-07-21 18:01:19 -0700
committerJohn L. Villalovos <john@sodarock.com>2022-07-21 18:01:19 -0700
commit1f73b6b20f08a0fe4ce4cf9195702a03656a54e1 (patch)
tree1f354334a3b2ace47cc73e4bbee45c9d74167f33 /tests
parent201298d7b5795b7d7338793da8033dc6c71d6572 (diff)
downloadgitlab-1f73b6b20f08a0fe4ce4cf9195702a03656a54e1.tar.gz
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.
Diffstat (limited to 'tests')
-rw-r--r--tests/functional/conftest.py40
-rw-r--r--tests/functional/helpers.py39
2 files changed, 50 insertions, 29 deletions
diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py
index 22457ba..8ecbcdf 100644
--- a/tests/functional/conftest.py
+++ b/tests/functional/conftest.py
@@ -9,9 +9,7 @@ import pytest
import gitlab
import gitlab.base
-
-SLEEP_INTERVAL = 0.5
-TIMEOUT = 60 # seconds before timeout will occur
+from tests.functional import helpers
@pytest.fixture(scope="session")
@@ -49,8 +47,6 @@ def reset_gitlab(gl):
logging.info(f"Marking for deletion user: {user.username!r}")
user.delete(hard_delete=True)
- max_iterations = int(TIMEOUT / SLEEP_INTERVAL)
-
# Ensure everything has been reset
start_time = time.perf_counter()
@@ -60,7 +56,7 @@ def reset_gitlab(gl):
"""Wait for the list() length to be no greater than expected maximum or fail
test if timeout is exceeded"""
logging.info(f"Checking {description!r} has no more than {max_length} items")
- for count in range(max_iterations):
+ for count in range(helpers.MAX_ITERATIONS):
items = rest_manager.list()
if len(items) <= max_length:
break
@@ -68,7 +64,7 @@ def reset_gitlab(gl):
f"Iteration: {count} Waiting for {description!r} items to be deleted: "
f"{[x.name for x in items]}"
)
- time.sleep(SLEEP_INTERVAL)
+ time.sleep(helpers.SLEEP_INTERVAL)
elapsed_time = time.perf_counter() - start_time
error_message = (
@@ -280,10 +276,7 @@ def group(gl):
yield group
- try:
- group.delete()
- except gitlab.exceptions.GitlabDeleteError as e:
- print(f"Group already deleted: {e}")
+ helpers.safe_delete(group)
@pytest.fixture(scope="module")
@@ -296,10 +289,7 @@ def project(gl):
yield project
- try:
- project.delete()
- except gitlab.exceptions.GitlabDeleteError as e:
- print(f"Project already deleted: {e}")
+ helpers.safe_delete(project)
@pytest.fixture(scope="function")
@@ -327,7 +317,7 @@ def merge_request(project, wait_for_sidekiq):
assert result is True, "sidekiq process should have terminated but did not"
project.refresh() # Gets us the current default branch
- project.branches.create(
+ mr_branch = project.branches.create(
{"branch": source_branch, "ref": project.default_branch}
)
# NOTE(jlvillal): Must create a commit in the new branch before we can
@@ -359,18 +349,13 @@ def merge_request(project, wait_for_sidekiq):
time.sleep(0.5)
assert mr.merge_status != "checking"
- to_delete.append((mr.iid, source_branch))
+ to_delete.extend([mr, mr_branch])
return mr
yield _merge_request
- for mr_iid, source_branch in to_delete:
- project.mergerequests.delete(mr_iid)
- try:
- project.branches.delete(source_branch)
- except gitlab.exceptions.GitlabDeleteError:
- # Ignore if branch was already deleted
- pass
+ for object in to_delete:
+ helpers.safe_delete(object)
@pytest.fixture(scope="module")
@@ -434,11 +419,8 @@ def user(gl):
yield user
- try:
- # Use `hard_delete=True` or a 'Ghost User' may be created.
- user.delete(hard_delete=True)
- except gitlab.exceptions.GitlabDeleteError as e:
- print(f"User already deleted: {e}")
+ # Use `hard_delete=True` or a 'Ghost User' may be created.
+ helpers.safe_delete(user, hard_delete=True)
@pytest.fixture(scope="module")
diff --git a/tests/functional/helpers.py b/tests/functional/helpers.py
new file mode 100644
index 0000000..972ca2f
--- /dev/null
+++ b/tests/functional/helpers.py
@@ -0,0 +1,39 @@
+import logging
+import time
+
+import pytest
+
+import gitlab.base
+
+SLEEP_INTERVAL = 0.5
+TIMEOUT = 60 # seconds before timeout will occur
+MAX_ITERATIONS = int(TIMEOUT / SLEEP_INTERVAL)
+
+
+def safe_delete(
+ object: gitlab.base.RESTObject,
+ *,
+ hard_delete: bool = False,
+) -> None:
+ """Ensure the object specified can not be retrieved. If object still exists after
+ timeout period, fail the test"""
+ manager = object.manager
+ for index in range(MAX_ITERATIONS):
+ try:
+ object = manager.get(object.get_id())
+ except gitlab.exceptions.GitlabGetError:
+ return
+
+ if index:
+ logging.info(f"Attempt {index+1} to delete {object!r}.")
+ try:
+ if hard_delete:
+ object.delete(hard_delete=True)
+ else:
+ object.delete()
+ except gitlab.exceptions.GitlabDeleteError:
+ logging.info(f"{object!r} already deleted.")
+ pass
+
+ time.sleep(SLEEP_INTERVAL)
+ pytest.fail(f"{object!r} was not deleted")