From cafdf005010b130d4ad30f639262ba841739de50 Mon Sep 17 00:00:00 2001 From: RhodeCode Admin Date: Wed, 21 Jan 2026 07:52:02 +0100 Subject: [PATCH] fix(test): another attempt on flaky tests fixes - cleanup DB calls for flaky tests --- rhodecode/model/db.py | 3 ++- rhodecode/tests/fixtures/fixture_utils.py | 18 ++++++++++++------ rhodecode/tests/vcs_operations/conftest.py | 16 ++++++++++------ .../test_vcs_operations_branch_protection.py | 5 ----- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py index 32c61dcc..a5b8e5e4 100644 --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -2693,6 +2693,7 @@ class Repository(Base, BaseModel): empty_date = datetime.datetime.fromtimestamp(0) repo_commit_count = 0 + repo_name = self.repo_name if cs_cache is None: # use no-cache version here @@ -2767,7 +2768,7 @@ class Repository(Base, BaseModel): log.debug( "updated repo `%s` with new commit cache %s, and last update_date: %s", - self.repo_name, + repo_name, cs_cache, _date_latest, ) diff --git a/rhodecode/tests/fixtures/fixture_utils.py b/rhodecode/tests/fixtures/fixture_utils.py index d72b1b44..00883c21 100644 --- a/rhodecode/tests/fixtures/fixture_utils.py +++ b/rhodecode/tests/fixtures/fixture_utils.py @@ -26,13 +26,14 @@ import socket import subprocess import time import uuid +import string +import random from contextlib import contextmanager from copy import copy, deepcopy import dateutil.tz import logging import functools -import textwrap import mock import pyramid.testing @@ -1131,7 +1132,7 @@ def user_util(request, db_connection): # TODO: johbo: Split this up into utilities per domain or something similar class UserUtility(object): def __init__(self, test_name="test"): - self._test_name = self._sanitize_name(test_name) + self._test_name = self._sanitize_name(test_name, random_suffix=True) self.fixture = Fixture() self.repo_group_ids = [] self.repos_ids = [] @@ -1145,20 +1146,25 @@ class UserUtility(object): self.user_group_user_group_permission_ids = [] self.user_permissions = [] - def _sanitize_name(self, name): + def _sanitize_name(self, name, random_suffix=True): for char in ["[", "]"]: - name = name.replace(char, "_") + name = name.replace(char, "-").replace("_", "-").replace(".", "-") + if random_suffix: + length = 4 + letters = string.ascii_lowercase + random_suffix = "".join(random.choice(letters) for i in range(length)).capitalize() + name = random_suffix + name return name def create_repo_group(self, owner=TEST_USER_ADMIN_LOGIN, auto_cleanup=True): - group_name = f"{self._test_name}_repogroup_{len(self.repo_group_ids)}" + group_name = f"{self._test_name}-repogroup-{len(self.repo_group_ids)}" repo_group = self.fixture.create_repo_group(group_name, cur_user=owner) if auto_cleanup: self.repo_group_ids.append(repo_group.group_id) return repo_group def create_repo(self, owner=TEST_USER_ADMIN_LOGIN, parent=None, auto_cleanup=True, repo_type="hg", bare=False): - repo_name = f"{self._test_name}_repository_{len(self.repos_ids)}" + repo_name = f"{self._test_name}-repository-{len(self.repos_ids)}" repository = self.fixture.create_repo( repo_name, cur_user=owner, repo_group=parent, repo_type=repo_type, bare=bare diff --git a/rhodecode/tests/vcs_operations/conftest.py b/rhodecode/tests/vcs_operations/conftest.py index 135a2b6b..02b477fa 100644 --- a/rhodecode/tests/vcs_operations/conftest.py +++ b/rhodecode/tests/vcs_operations/conftest.py @@ -379,12 +379,16 @@ def branch_permission_setter(request): def cleanup(): # Clean up ALL created rules and permissions, not just the last ones # Critical for PostgreSQL where orphaned rows cause duplicate results - for rule in created_rules: - Session().delete(rule) - Session().commit() + if created_rules: + for rule in created_rules: + Session().delete(rule) - for write_perm in created_write_perms: - Session().delete(write_perm) - Session().commit() + Session().commit() + + if created_write_perms: + for write_perm in created_write_perms: + Session().delete(write_perm) + + Session().commit() return _branch_permissions_setter diff --git a/rhodecode/tests/vcs_operations/test_vcs_operations_branch_protection.py b/rhodecode/tests/vcs_operations/test_vcs_operations_branch_protection.py index 35ecf829..cb7a147e 100644 --- a/rhodecode/tests/vcs_operations/test_vcs_operations_branch_protection.py +++ b/rhodecode/tests/vcs_operations/test_vcs_operations_branch_protection.py @@ -56,11 +56,6 @@ class TestVCSOperations(object): branch_permission_setter(repo_name, username, permission=branch_perm) clone_url = rcstack.repo_clone_url(repo.repo_name, user=username, passwd=password) - # Give VCSServer time to initialize the empty Mercurial repository - # Empty hg repos (unlike git bare repos) need a moment to be fully indexed - # This prevents intermittent "repository is unrelated" errors - time.sleep(0.2) - repo.scm_instance(cache=False) # Force load in VCSServer Command(os.path.dirname(tmpdir.strpath)).execute("hg clone", clone_url, tmpdir.strpath)