fix(test): another attempt on flaky tests fixes

- cleanup DB calls for flaky tests
This commit is contained in:
RhodeCode Admin 2026-01-21 07:52:02 +01:00
parent bf9cd8455f
commit cafdf00501
4 changed files with 24 additions and 18 deletions

View file

@ -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,
)

View file

@ -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

View file

@ -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

View file

@ -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)