Compare commits

..

14 Commits

Author SHA1 Message Date
Raphael Michel
df3fc1bef1 Remove fail-fast 2024-10-25 13:19:48 +02:00
Raphael Michel
022cd8dff7 Try n=3 but no reruns 2024-10-25 12:54:38 +02:00
Raphael Michel
e9c3af9016 Stable order of event lists 2024-10-25 12:54:38 +02:00
Raphael Michel
6744371417 Fix tz bug 2024-10-25 12:54:38 +02:00
Raphael Michel
b4005b7fe5 Add debug modes for test running 2024-10-25 12:54:38 +02:00
Raphael Michel
ff22b893f1 Experimental fixture 2024-10-25 12:54:38 +02:00
Raphael Michel
e37aba4f80 Remove mention of travis CI, it is long dead 2024-10-25 12:54:38 +02:00
Raphael Michel
f9ae2fd62a Use uv for all jobs 2024-10-25 12:54:38 +02:00
Raphael Michel
621c84951f Add -y to all apt lines 2024-10-25 12:54:38 +02:00
Raphael Michel
4d9f03dd2f use uv pip --system 2024-10-25 12:54:38 +02:00
Raphael Michel
9ac9a5aeef Speed up process with uv 2024-10-25 12:54:38 +02:00
Raphael Michel
d5714e12f8 Allow running with "act" 2024-10-25 12:54:38 +02:00
Raphael Michel
4f2cae5880 Map PostgreSQL port 2024-10-25 12:54:38 +02:00
Raphael Michel
c9913a0153 GH Actions: Fix PostgreSQL issues 2024-10-25 12:54:38 +02:00
7 changed files with 31 additions and 20 deletions

View File

@@ -35,7 +35,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt -y install gettext
run: sudo apt update && sudo apt install -y gettext
- name: Install Dependencies
run: pip3 install uv && uv pip install --system -e ".[dev]"
- name: Compile messages
@@ -60,7 +60,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install enchant-2 hunspell hunspell-de-de aspell-en aspell-de
run: sudo apt update && sudo apt install -y enchant-2 hunspell hunspell-de-de aspell-en aspell-de
- name: Install Dependencies
run: pip3 install uv && uv pip install --system -e ".[dev]"
- name: Spellcheck translations

View File

@@ -22,6 +22,7 @@ jobs:
runs-on: ubuntu-22.04
name: Tests
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11"]
database: [sqlite, postgres]
@@ -70,10 +71,10 @@ jobs:
run: make all compress
- name: Run tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/travis_${{ matrix.database }}.cfg py.test -n 4 -p no:sugar --cov=./ --cov-report=xml --reruns 3 tests --maxfail=100
run: PRETIX_CONFIG_FILE=tests/ci_${{ matrix.database }}.cfg py.test -n 3 --stepwise -vv -p no:sugar --cov=./ --cov-report=xml --reruns 0 tests
- name: Run concurrency tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/travis_${{ matrix.database }}.cfg py.test tests/concurrency_tests/ --reruns 0 --reuse-db
run: PRETIX_CONFIG_FILE=tests/ci_${{ matrix.database }}.cfg py.test tests/concurrency_tests/ --reruns 0 --reuse-db
if: matrix.database == 'postgres'
- name: Upload coverage
uses: codecov/codecov-action@v1

View File

@@ -10,7 +10,7 @@ tests:
- cd src
- python manage.py check
- make all compress
- PRETIX_CONFIG_FILE=tests/travis_sqlite.cfg py.test --reruns 3 -n 3 tests --maxfail=100
- PRETIX_CONFIG_FILE=tests/ci_sqlite.cfg py.test --reruns 3 -n 3 tests --maxfail=100
except:
- pypi
pypi:

View File

@@ -19,7 +19,6 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import os
from contextlib import contextmanager
import fakeredis
@@ -39,9 +38,4 @@ def mocker_context():
def get_redis_connection(alias="default", write=True):
worker_id = os.environ.get("PYTEST_XDIST_WORKER")
if worker_id.startswith("gw"):
redis_port = 1000 + int(worker_id.replace("gw", ""))
else:
redis_port = 1000
return fakeredis.FakeStrictRedis(server=fakeredis.FakeServer.get_server(f"127.0.0.1:{redis_port}:redis:v(7, 0)", (7, 0), server_type="redis"))
return fakeredis.FakeStrictRedis(server=fakeredis.FakeServer.get_server("127.0.0.1:None:v(7, 0)", (7, 0), server_type="redis"))

View File

@@ -23,6 +23,7 @@ import inspect
import os
import pytest
from django.db import connection
from django.test import override_settings
from django.utils import translation
from django_scopes import scopes_disabled
@@ -83,32 +84,27 @@ def reset_locale():
@pytest.fixture
def fakeredis_client(monkeypatch):
worker_id = os.environ.get("PYTEST_XDIST_WORKER")
if worker_id.startswith("gw"):
redis_port = 1000 + int(worker_id.replace("gw", ""))
else:
redis_port = 1000
with override_settings(
HAS_REDIS=True,
REAL_CACHE_USED=True,
CACHES={
'redis': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': f'redis://127.0.0.1:{redis_port}',
'LOCATION': 'redis://127.0.0.1',
'OPTIONS': {
'connection_class': FakeConnection
}
},
'redis_session': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': f'redis://127.0.0.1:{redis_port}',
'LOCATION': 'redis://127.0.0.1',
'OPTIONS': {
'connection_class': FakeConnection
}
},
'default': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': f'redis://127.0.0.1:{redis_port}',
'LOCATION': 'redis://127.0.0.1',
'OPTIONS': {
'connection_class': FakeConnection
}
@@ -119,3 +115,23 @@ def fakeredis_client(monkeypatch):
redis.flushall()
monkeypatch.setattr('django_redis.get_redis_connection', get_redis_connection, raising=False)
yield redis
if os.environ.get("GITHUB_WORKFLOW", ""):
@pytest.fixture(autouse=True)
def ensure_healthy_connection(request):
# We have no idea why this is neccessary. It shouldn't be, and it costs some performance.
# However, in ~August 2024 our tests became really flake on GitHub Actions (failing more than 80% of the time)
# for no apparent reason with some error messages related to PostgreSQL connection issues. This appears to
# work around it...
# Check if the test even has DB access
marker = request.node.get_closest_marker("django_db")
# Run actual test
yield
# If yes, do a dummy query at the end of the test
if marker:
with connection.cursor() as cursor:
cursor.execute("SELECT 1")