Skip to content

Commit

Permalink
test: use MySQL when running unit tests in CI
Browse files Browse the repository at this point in the history
This will run all CI tests against MySQL 8.0. It changes the tox
py38-django{32|42} envs to use a new MySQL settings file. Running pytest
manually will continue to use the in-memory SQLite database.
  • Loading branch information
ormsbee committed Jun 20, 2023
1 parent 084ec21 commit 8ba5c3b
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 55 deletions.
23 changes: 22 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,30 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest] # Add macos-latest later?
python-version: ['3.8']
toxenv: ["py38-django32", "py38-django42"]
# We're only testing against MySQL 8 right now because 5.7 is
# incompatible with Djagno 4.2. We'd have to make the tox.ini file more
# complicated than it's worth given the short expected shelf-life of
# MySQL 5.7 in our stack.
mysql-version: ["8"]
services:
mysql:
image: mysql:${{ matrix.mysql-version }}
ports:
- 3306:3306
env:
MYSQL_DATABASE: "test_oel_db"
MYSQL_USER: "test_oel_user"
MYSQL_PASSWORD: "test_oel_pass"
MYSQL_RANDOM_ROOT_PASSWORD: true
# these options are blatantly copied from edx-platform's values
options: >-
--health-cmd "mysqladmin ping"
--health-interval 10s
--health-timeout 5s
--health-retries 3
steps:
- uses: actions/checkout@v3
- name: setup python
Expand Down
26 changes: 26 additions & 0 deletions mysql_test_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""
This is an extension of the default test_settings.py file that uses MySQL for
the backend. While the openedx-learning apps should run fine using SQLite, they
also do some MySQL-specific things around charset/collation settings and row
compression.
The tox targets for py38-django32 and py38-django42 will use this settings file.
For the most part, you can use test_settings.py instead (that's the default if
you just run "pytest" with no arguments).
"""

from test_settings import *

DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "oel_db",
"USER": "test_oel_user",
"PASSWORD": "test_oel_pass",
"HOST": "127.0.0.1",
"PORT": "3306",
"OPTIONS": {
"charset": "utf8mb4"
}
}
}
4 changes: 3 additions & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
# make upgrade
#
asgiref==3.6.0
asgiref==3.7.2
# via django
django==3.2.19
# via
Expand All @@ -19,3 +19,5 @@ pytz==2023.3
# djangorestframework
sqlparse==0.4.4
# via django
typing-extensions==4.6.3
# via asgiref
8 changes: 4 additions & 4 deletions requirements/ci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ click==8.1.3
# via import-linter
distlib==0.3.6
# via virtualenv
filelock==3.12.0
filelock==3.12.2
# via
# tox
# virtualenv
Expand All @@ -18,7 +18,7 @@ import-linter==1.9.0
# via -r requirements/ci.in
packaging==23.1
# via tox
platformdirs==3.5.1
platformdirs==3.6.0
# via virtualenv
pluggy==1.0.0
# via tox
Expand All @@ -34,9 +34,9 @@ tox==3.28.0
# via
# -c requirements/constraints.txt
# -r requirements/ci.in
typing-extensions==4.5.0
typing-extensions==4.6.3
# via
# grimp
# import-linter
virtualenv==20.23.0
virtualenv==20.23.1
# via tox
39 changes: 21 additions & 18 deletions requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
# make upgrade
#
asgiref==3.6.0
asgiref==3.7.2
# via
# -r requirements/quality.txt
# django
Expand Down Expand Up @@ -49,11 +49,11 @@ code-annotations==1.3.0
# via
# -r requirements/quality.txt
# edx-lint
coverage[toml]==7.2.5
coverage[toml]==7.2.7
# via
# -r requirements/quality.txt
# pytest-cov
diff-cover==7.5.0
diff-cover==7.6.0
# via -r requirements/dev.in
dill==0.3.6
# via
Expand Down Expand Up @@ -86,7 +86,7 @@ exceptiongroup==1.1.1
# via
# -r requirements/quality.txt
# pytest
filelock==3.12.0
filelock==3.12.2
# via
# -r requirements/ci.txt
# tox
Expand All @@ -104,7 +104,7 @@ import-linter==1.9.0
# via
# -r requirements/ci.txt
# -r requirements/quality.txt
importlib-metadata==6.6.0
importlib-metadata==6.7.0
# via
# -r requirements/quality.txt
# keyring
Expand All @@ -130,19 +130,19 @@ jinja2==3.1.2
# -r requirements/quality.txt
# code-annotations
# diff-cover
keyring==23.13.1
keyring==24.0.0
# via
# -r requirements/quality.txt
# twine
lazy-object-proxy==1.9.0
# via
# -r requirements/quality.txt
# astroid
markdown-it-py==2.2.0
markdown-it-py==3.0.0
# via
# -r requirements/quality.txt
# rich
markupsafe==2.1.2
markupsafe==2.1.3
# via
# -r requirements/quality.txt
# jinja2
Expand All @@ -158,6 +158,8 @@ more-itertools==9.1.0
# via
# -r requirements/quality.txt
# jaraco-classes
mysqlclient==2.1.1
# via -r requirements/quality.txt
packaging==23.1
# via
# -r requirements/ci.txt
Expand All @@ -178,7 +180,7 @@ pkginfo==1.9.6
# via
# -r requirements/quality.txt
# twine
platformdirs==3.5.1
platformdirs==3.6.0
# via
# -r requirements/ci.txt
# -r requirements/quality.txt
Expand Down Expand Up @@ -222,7 +224,7 @@ pylint-django==2.5.3
# via
# -r requirements/quality.txt
# edx-lint
pylint-plugin-utils==0.8.1
pylint-plugin-utils==0.8.2
# via
# -r requirements/quality.txt
# pylint-celery
Expand All @@ -231,12 +233,12 @@ pyproject-hooks==1.0.0
# via
# -r requirements/pip-tools.txt
# build
pytest==7.3.1
pytest==7.3.2
# via
# -r requirements/quality.txt
# pytest-cov
# pytest-django
pytest-cov==4.0.0
pytest-cov==4.1.0
# via -r requirements/quality.txt
pytest-django==4.5.2
# via -r requirements/quality.txt
Expand All @@ -254,11 +256,11 @@ pyyaml==6.0
# -r requirements/quality.txt
# code-annotations
# edx-i18n-tools
readme-renderer==37.3
readme-renderer==40.0
# via
# -r requirements/quality.txt
# twine
requests==2.30.0
requests==2.31.0
# via
# -r requirements/quality.txt
# requests-toolbelt
Expand All @@ -271,7 +273,7 @@ rfc3986==2.0.0
# via
# -r requirements/quality.txt
# twine
rich==13.3.5
rich==13.4.2
# via
# -r requirements/quality.txt
# twine
Expand Down Expand Up @@ -324,21 +326,22 @@ tox-battery==0.6.1
# via -r requirements/dev.in
twine==4.0.2
# via -r requirements/quality.txt
typing-extensions==4.5.0
typing-extensions==4.6.3
# via
# -r requirements/ci.txt
# -r requirements/quality.txt
# asgiref
# astroid
# grimp
# import-linter
# pylint
# rich
urllib3==2.0.2
urllib3==2.0.3
# via
# -r requirements/quality.txt
# requests
# twine
virtualenv==20.23.0
virtualenv==20.23.1
# via
# -r requirements/ci.txt
# tox
Expand Down
23 changes: 13 additions & 10 deletions requirements/doc.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ accessible-pygments==0.0.4
# via pydata-sphinx-theme
alabaster==0.7.13
# via sphinx
asgiref==3.6.0
asgiref==3.7.2
# via
# -r requirements/test.txt
# django
Expand All @@ -31,7 +31,7 @@ click==8.1.3
# import-linter
code-annotations==1.3.0
# via -r requirements/test.txt
coverage[toml]==7.2.5
coverage[toml]==7.2.7
# via
# -r requirements/test.txt
# pytest-cov
Expand Down Expand Up @@ -66,7 +66,7 @@ imagesize==1.4.1
# via sphinx
import-linter==1.9.0
# via -r requirements/test.txt
importlib-metadata==6.6.0
importlib-metadata==6.7.0
# via sphinx
iniconfig==2.0.0
# via
Expand All @@ -77,10 +77,12 @@ jinja2==3.1.2
# -r requirements/test.txt
# code-annotations
# sphinx
markupsafe==2.1.2
markupsafe==2.1.3
# via
# -r requirements/test.txt
# jinja2
mysqlclient==2.1.1
# via -r requirements/test.txt
packaging==23.1
# via
# -r requirements/test.txt
Expand All @@ -106,12 +108,12 @@ pygments==2.15.1
# pydata-sphinx-theme
# readme-renderer
# sphinx
pytest==7.3.1
pytest==7.3.2
# via
# -r requirements/test.txt
# pytest-cov
# pytest-django
pytest-cov==4.0.0
pytest-cov==4.1.0
# via -r requirements/test.txt
pytest-django==4.5.2
# via -r requirements/test.txt
Expand All @@ -129,9 +131,9 @@ pyyaml==6.0
# via
# -r requirements/test.txt
# code-annotations
readme-renderer==37.3
readme-renderer==40.0
# via -r requirements/doc.in
requests==2.30.0
requests==2.31.0
# via sphinx
restructuredtext-lint==1.4.0
# via doc8
Expand Down Expand Up @@ -183,13 +185,14 @@ tomli==2.0.1
# doc8
# import-linter
# pytest
typing-extensions==4.5.0
typing-extensions==4.6.3
# via
# -r requirements/test.txt
# asgiref
# grimp
# import-linter
# pydata-sphinx-theme
urllib3==2.0.2
urllib3==2.0.3
# via requests
webencodings==0.5.1
# via bleach
Expand Down
Loading

0 comments on commit 8ba5c3b

Please sign in to comment.