mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
fix(docker): modify db configuration for new tests
A user that can create databases is now required for tests, we use the 'root' user in Docker. Added docker services: --------------------- - mariadb_test - host localhost:13307 Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
fa43f6bc3e
commit
fa26c8078b
12 changed files with 53 additions and 79 deletions
|
@ -5,7 +5,7 @@ socket = /var/run/mysqld/mysqld.sock
|
||||||
;port = 3306
|
;port = 3306
|
||||||
name = AUR
|
name = AUR
|
||||||
user = aur
|
user = aur
|
||||||
password = aur
|
;password = aur
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
username_min_len = 3
|
username_min_len = 3
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
; development-specific options too.
|
; development-specific options too.
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
; Options: mysql, sqlite.
|
; PHP options: mysql, sqlite.
|
||||||
|
; FastAPI options: mysql.
|
||||||
backend = mysql
|
backend = mysql
|
||||||
|
|
||||||
; If using sqlite, set name to the database file path.
|
; If using sqlite, set name to the database file path.
|
||||||
|
@ -14,8 +15,8 @@ name = aurweb
|
||||||
|
|
||||||
; MySQL database information. User defaults to root for containerized
|
; MySQL database information. User defaults to root for containerized
|
||||||
; testing with mysqldb. This should be set to a non-root user.
|
; testing with mysqldb. This should be set to a non-root user.
|
||||||
user = aur
|
user = root
|
||||||
password = aur
|
;password = aur
|
||||||
host = localhost
|
host = localhost
|
||||||
;port = 3306
|
;port = 3306
|
||||||
socket = /var/run/mysqld/mysqld.sock
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
|
|
@ -77,6 +77,24 @@ services:
|
||||||
mariadb:
|
mariadb:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
|
mariadb_test:
|
||||||
|
# Test database.
|
||||||
|
image: aurweb:latest
|
||||||
|
init: true
|
||||||
|
environment:
|
||||||
|
- MARIADB_PRIVILEGED=1
|
||||||
|
entrypoint: /docker/mariadb-entrypoint.sh
|
||||||
|
command: /usr/bin/mysqld_safe --datadir=/var/lib/mysql
|
||||||
|
ports:
|
||||||
|
# This will expose mariadbd on 127.0.0.1:13307 in the host.
|
||||||
|
# Ex: `mysql -uaur -paur -h 127.0.0.1 -P 13306 aurweb`
|
||||||
|
- "13307:3306"
|
||||||
|
volumes:
|
||||||
|
- mariadb_test_run:/var/run/mysqld # Bind socket in this volume.
|
||||||
|
healthcheck:
|
||||||
|
test: "bash /docker/health/mariadb.sh"
|
||||||
|
interval: 3s
|
||||||
|
|
||||||
git:
|
git:
|
||||||
image: aurweb:latest
|
image: aurweb:latest
|
||||||
init: true
|
init: true
|
||||||
|
@ -254,10 +272,9 @@ services:
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
git:
|
mariadb_test:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- git_data:/aurweb/aur.git
|
|
||||||
- ./cache:/cache
|
- ./cache:/cache
|
||||||
- ./aurweb:/aurweb/aurweb
|
- ./aurweb:/aurweb/aurweb
|
||||||
- ./migrations:/aurweb/migrations
|
- ./migrations:/aurweb/migrations
|
||||||
|
@ -280,34 +297,12 @@ services:
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mariadb_init:
|
mariadb_test:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
|
tmpfs:
|
||||||
|
- /tmp
|
||||||
volumes:
|
volumes:
|
||||||
- mariadb_run:/var/run/mysqld
|
- mariadb_test_run:/var/run/mysqld
|
||||||
- git_data:/aurweb/aur.git
|
|
||||||
- ./cache:/cache
|
|
||||||
- ./aurweb:/aurweb/aurweb
|
|
||||||
- ./migrations:/aurweb/migrations
|
|
||||||
- ./test:/aurweb/test
|
|
||||||
- ./web/html:/aurweb/web/html
|
|
||||||
- ./web/template:/aurweb/web/template
|
|
||||||
- ./web/lib:/aurweb/web/lib
|
|
||||||
- ./templates:/aurweb/templates
|
|
||||||
|
|
||||||
pytest-sqlite:
|
|
||||||
image: aurweb:latest
|
|
||||||
profiles: ["dev"]
|
|
||||||
init: true
|
|
||||||
environment:
|
|
||||||
- AUR_CONFIG=conf/config.sqlite
|
|
||||||
- TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT}
|
|
||||||
- PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus
|
|
||||||
entrypoint: /docker/test-sqlite-entrypoint.sh
|
|
||||||
command: setup-sqlite.sh run-pytests.sh clean
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
volumes:
|
|
||||||
- git_data:/aurweb/aur.git
|
|
||||||
- ./cache:/cache
|
- ./cache:/cache
|
||||||
- ./aurweb:/aurweb/aurweb
|
- ./aurweb:/aurweb/aurweb
|
||||||
- ./migrations:/aurweb/migrations
|
- ./migrations:/aurweb/migrations
|
||||||
|
@ -325,16 +320,15 @@ services:
|
||||||
- AUR_CONFIG=conf/config
|
- AUR_CONFIG=conf/config
|
||||||
- TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT}
|
- TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT}
|
||||||
- PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus
|
- PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus
|
||||||
entrypoint: /docker/tests-entrypoint.sh
|
entrypoint: /docker/test-mysql-entrypoint.sh
|
||||||
command: setup-sqlite.sh run-tests.sh
|
command: /docker/scripts/run-tests.sh
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mariadb_init:
|
mariadb_test:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- mariadb_run:/var/run/mysqld
|
- mariadb_test_run:/var/run/mysqld
|
||||||
- git_data:/aurweb/aur.git
|
|
||||||
- ./cache:/cache
|
- ./cache:/cache
|
||||||
- ./aurweb:/aurweb/aurweb
|
- ./aurweb:/aurweb/aurweb
|
||||||
- ./migrations:/aurweb/migrations
|
- ./migrations:/aurweb/migrations
|
||||||
|
@ -345,6 +339,7 @@ services:
|
||||||
- ./templates:/aurweb/templates
|
- ./templates:/aurweb/templates
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
mariadb_test_run: {}
|
||||||
mariadb_run: {} # Share /var/run/mysqld/mysqld.sock
|
mariadb_run: {} # Share /var/run/mysqld/mysqld.sock
|
||||||
mariadb_data: {} # Share /var/lib/mysql
|
mariadb_data: {} # Share /var/lib/mysql
|
||||||
git_data: {} # Share aurweb/aur.git
|
git_data: {} # Share aurweb/aur.git
|
||||||
|
|
|
@ -5,6 +5,10 @@ set -eou pipefail
|
||||||
cp -vf conf/config.dev conf/config
|
cp -vf conf/config.dev conf/config
|
||||||
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
||||||
|
|
||||||
|
# Change database user/password.
|
||||||
|
sed -ri "s/^;?(user) = .*$/\1 = aur/" conf/config
|
||||||
|
sed -ri "s/^;?(password) = .*$/\1 = aur/" conf/config
|
||||||
|
|
||||||
sed -ri "s;^(aur_location) = .+;\1 = ${AURWEB_FASTAPI_PREFIX};" conf/config
|
sed -ri "s;^(aur_location) = .+;\1 = ${AURWEB_FASTAPI_PREFIX};" conf/config
|
||||||
|
|
||||||
# Setup Redis for FastAPI.
|
# Setup Redis for FastAPI.
|
||||||
|
|
|
@ -13,23 +13,18 @@ done
|
||||||
|
|
||||||
# Configure databases.
|
# Configure databases.
|
||||||
DATABASE="aurweb" # Persistent database for fastapi/php-fpm.
|
DATABASE="aurweb" # Persistent database for fastapi/php-fpm.
|
||||||
TEST_DB="aurweb_test" # Test database (ephemereal).
|
|
||||||
|
|
||||||
echo "Taking care of primary database '${DATABASE}'..."
|
echo "Taking care of primary database '${DATABASE}'..."
|
||||||
mysql -u root -e "CREATE USER IF NOT EXISTS 'aur'@'localhost' IDENTIFIED BY 'aur';"
|
mysql -u root -e "CREATE USER IF NOT EXISTS 'aur'@'localhost' IDENTIFIED BY 'aur';"
|
||||||
mysql -u root -e "CREATE USER IF NOT EXISTS 'aur'@'%' IDENTIFIED BY 'aur';"
|
mysql -u root -e "CREATE USER IF NOT EXISTS 'aur'@'%' IDENTIFIED BY 'aur';"
|
||||||
mysql -u root -e "CREATE DATABASE IF NOT EXISTS $DATABASE;"
|
mysql -u root -e "CREATE DATABASE IF NOT EXISTS $DATABASE;"
|
||||||
mysql -u root -e "GRANT ALL ON ${DATABASE}.* TO 'aur'@'localhost';"
|
|
||||||
mysql -u root -e "GRANT ALL ON ${DATABASE}.* TO 'aur'@'%';"
|
|
||||||
|
|
||||||
# Drop and create our test database.
|
mysql -u root -e "CREATE USER IF NOT EXISTS 'aur'@'%' IDENTIFIED BY 'aur';"
|
||||||
echo "Dropping test database '$TEST_DB'..."
|
mysql -u root -e "GRANT ALL ON aurweb.* TO 'aur'@'localhost';"
|
||||||
mysql -u root -e "DROP DATABASE IF EXISTS $TEST_DB;"
|
mysql -u root -e "GRANT ALL ON aurweb.* TO 'aur'@'%';"
|
||||||
mysql -u root -e "CREATE DATABASE $TEST_DB;"
|
|
||||||
mysql -u root -e "GRANT ALL ON ${TEST_DB}.* TO 'aur'@'localhost';"
|
|
||||||
mysql -u root -e "GRANT ALL ON ${TEST_DB}.* TO 'aur'@'%';"
|
|
||||||
|
|
||||||
echo "Created new '$TEST_DB'!"
|
mysql -u root -e "CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'aur';"
|
||||||
|
mysql -u root -e "GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;"
|
||||||
|
|
||||||
mysqladmin -uroot shutdown
|
mysqladmin -uroot shutdown
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ set -eou pipefail
|
||||||
# Setup a config for our mysql db.
|
# Setup a config for our mysql db.
|
||||||
cp -vf conf/config.dev conf/config
|
cp -vf conf/config.dev conf/config
|
||||||
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
||||||
|
sed -ri "s/^;?(user) = .*$/\1 = aur/g" conf/config
|
||||||
|
sed -ri "s/^;?(password) = .*$/\1 = aur/g" conf/config
|
||||||
|
|
||||||
python -m aurweb.initdb 2>/dev/null || /bin/true
|
python -m aurweb.initdb 2>/dev/null || /bin/true
|
||||||
|
|
||||||
|
|
|
@ -9,14 +9,19 @@ done
|
||||||
cp -vf conf/config.dev conf/config
|
cp -vf conf/config.dev conf/config
|
||||||
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
||||||
|
|
||||||
sed -ri "s;^(aur_location) = .+;\1 = ${AURWEB_PHP_PREFIX};" conf/config
|
# Change database user/password.
|
||||||
|
sed -ri "s/^;?(user) = .*$/\1 = aur/" conf/config
|
||||||
|
sed -ri "s/^;?(password) = .*$/\1 = aur/" conf/config
|
||||||
|
|
||||||
# Enable memcached.
|
# Enable memcached.
|
||||||
sed -ri 's/^(cache) = .+$/\1 = memcache/' conf/config
|
sed -ri 's/^(cache) = .+$/\1 = memcache/' conf/config
|
||||||
|
|
||||||
|
# Setup various location configurations.
|
||||||
|
sed -ri "s;^(aur_location) = .+;\1 = ${AURWEB_PHP_PREFIX};" conf/config
|
||||||
sed -ri "s|^(git_clone_uri_anon) = .+|\1 = ${AURWEB_PHP_PREFIX}/%s.git|" conf/config.defaults
|
sed -ri "s|^(git_clone_uri_anon) = .+|\1 = ${AURWEB_PHP_PREFIX}/%s.git|" conf/config.defaults
|
||||||
sed -ri "s|^(git_clone_uri_priv) = .+|\1 = ${AURWEB_SSHD_PREFIX}/%s.git|" conf/config.defaults
|
sed -ri "s|^(git_clone_uri_priv) = .+|\1 = ${AURWEB_SSHD_PREFIX}/%s.git|" conf/config.defaults
|
||||||
|
|
||||||
|
# Listen on :9000.
|
||||||
sed -ri 's/^(listen).*/\1 = 0.0.0.0:9000/' /etc/php/php-fpm.d/www.conf
|
sed -ri 's/^(listen).*/\1 = 0.0.0.0:9000/' /etc/php/php-fpm.d/www.conf
|
||||||
sed -ri 's/^;?(clear_env).*/\1 = no/' /etc/php/php-fpm.d/www.conf
|
sed -ri 's/^;?(clear_env).*/\1 = no/' /etc/php/php-fpm.d/www.conf
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eou pipefail
|
set -eou pipefail
|
||||||
|
|
||||||
# Initialize the new database; ignore errors.
|
|
||||||
python -m aurweb.initdb 2>/dev/null || /bin/true
|
|
||||||
|
|
||||||
exec php-fpm --fpm-config /etc/php/php-fpm.conf --nodaemonize
|
exec php-fpm --fpm-config /etc/php/php-fpm.conf --nodaemonize
|
||||||
|
|
|
@ -25,17 +25,8 @@ done
|
||||||
rm -rf $PROMETHEUS_MULTIPROC_DIR
|
rm -rf $PROMETHEUS_MULTIPROC_DIR
|
||||||
mkdir -p $PROMETHEUS_MULTIPROC_DIR
|
mkdir -p $PROMETHEUS_MULTIPROC_DIR
|
||||||
|
|
||||||
# Initialize the new database; ignore errors.
|
|
||||||
python -m aurweb.initdb 2>/dev/null || \
|
|
||||||
(echo "Error: aurweb.initdb failed; already initialized?" && /bin/true)
|
|
||||||
|
|
||||||
# Run test_initdb ahead of time, which clears out the database,
|
|
||||||
# in case of previous failures which stopped the test suite before
|
|
||||||
# finishing the ends of some test fixtures.
|
|
||||||
eatmydata -- pytest test/test_initdb.py
|
|
||||||
|
|
||||||
# Run pytest with optional targets in front of it.
|
# Run pytest with optional targets in front of it.
|
||||||
eatmydata -- make -C test "${PARAMS[@]}" pytest
|
pytest
|
||||||
|
|
||||||
# By default, report coverage and move it into cache.
|
# By default, report coverage and move it into cache.
|
||||||
if [ $COVERAGE -eq 1 ]; then
|
if [ $COVERAGE -eq 1 ]; then
|
||||||
|
|
|
@ -12,12 +12,6 @@ bash $dir/run-sharness.sh
|
||||||
# Pass --silence to avoid reporting coverage. We will do that below.
|
# Pass --silence to avoid reporting coverage. We will do that below.
|
||||||
bash $dir/run-pytests.sh --no-coverage
|
bash $dir/run-pytests.sh --no-coverage
|
||||||
|
|
||||||
# Export SQLite aurweb configuration.
|
|
||||||
export AUR_CONFIG=conf/config.sqlite
|
|
||||||
|
|
||||||
# Run Python tests.
|
|
||||||
bash $dir/run-pytests.sh --no-coverage
|
|
||||||
|
|
||||||
make -C test coverage
|
make -C test coverage
|
||||||
|
|
||||||
# /cache is mounted as a volume. Copy coverage into it.
|
# /cache is mounted as a volume. Copy coverage into it.
|
||||||
|
|
|
@ -1,17 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eou pipefail
|
set -eou pipefail
|
||||||
|
|
||||||
DB_NAME="aurweb_test"
|
|
||||||
|
|
||||||
# Setup a config for our mysql db.
|
# Setup a config for our mysql db.
|
||||||
cp -vf conf/config.dev conf/config
|
cp -vf conf/config.dev conf/config
|
||||||
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config
|
||||||
sed -ri "s/^(name) = .+/\1 = ${DB_NAME}/" conf/config
|
|
||||||
|
|
||||||
# The port can be excluded from use if properly using
|
|
||||||
# volumes to share the mysql socket from the mariadb service.
|
|
||||||
# Example port sed:
|
|
||||||
# sed -i "s/^;?(port = .+)$/\1/" conf/config
|
|
||||||
|
|
||||||
# Continue onto the main command.
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
|
@ -3,6 +3,5 @@ set -eou pipefail
|
||||||
dir="$(dirname $0)"
|
dir="$(dirname $0)"
|
||||||
|
|
||||||
bash $dir/test-mysql-entrypoint.sh
|
bash $dir/test-mysql-entrypoint.sh
|
||||||
bash $dir/test-sqlite-entrypoint.sh
|
|
||||||
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
Loading…
Add table
Reference in a new issue