From bbe3f630bd60298e56ae9d0865791ebc3434b741 Mon Sep 17 00:00:00 2001 From: Pavlo Shchelokovskyy Date: Tue, 19 Jan 2021 14:40:13 +0200 Subject: [PATCH] Enable database migration unit tests - Add taskflow backend config option, which is used in case mysql/postgres migrations test. - changes 006_add_persistence_tables migration to be able to use overridden configuration options - add test database setup script to be used on OpenStack CI (copied from Nova repo) - add database packages (mysql, postgresql, sqlite) to bindep.txt as part of test profile Co-Authored-By: Anton Arefiev Change-Id: Ic1482eb4a3758536be6cd831d754e95186ac54d3 --- bindep.txt | 11 ++++ .../versions/006_add_persistence_tables.py | 8 ++- masakari/tests/unit/db/test_migrations.py | 3 +- tools/test-setup.sh | 54 +++++++++++++++++++ 4 files changed, 70 insertions(+), 6 deletions(-) create mode 100755 tools/test-setup.sh diff --git a/bindep.txt b/bindep.txt index 1dd5a2b9..222e28a8 100644 --- a/bindep.txt +++ b/bindep.txt @@ -4,3 +4,14 @@ # libpq-dev is needed by openstack-tox-py37 build only. libpq-dev [platform:dpkg test] python-dev [platform:dpkg test] +libmysqlclient-dev [platform:dpkg test] +mysql [platform:rpm test] +mysql-client [platform:dpkg test] +mysql-devel [platform:rpm test] +mysql-server [test] +postgresql [test] +postgresql-client [platform:dpkg test] +postgresql-devel [platform:rpm test] +postgresql-server [platform:rpm test] +libsqlite3-dev [platform:dpkg test] +sqlite-devel [platform:rpm test] diff --git a/masakari/db/sqlalchemy/migrate_repo/versions/006_add_persistence_tables.py b/masakari/db/sqlalchemy/migrate_repo/versions/006_add_persistence_tables.py index 53b20018..e0a1c71b 100644 --- a/masakari/db/sqlalchemy/migrate_repo/versions/006_add_persistence_tables.py +++ b/masakari/db/sqlalchemy/migrate_repo/versions/006_add_persistence_tables.py @@ -17,8 +17,6 @@ import masakari.conf from masakari.engine import driver CONF = masakari.conf.CONF -NOTIFICATION_DRIVER = CONF.notification_driver -PERSISTENCE_BACKEND = CONF.taskflow.connection def upgrade(migrate_engine): @@ -26,7 +24,7 @@ def upgrade(migrate_engine): # Get the taskflow driver configured, default is 'taskflow_driver', # to load persistence tables to store progress details. - taskflow_driver = driver.load_masakari_driver(NOTIFICATION_DRIVER) + taskflow_driver = driver.load_masakari_driver(CONF.notification_driver) - if PERSISTENCE_BACKEND: - taskflow_driver.upgrade_backend(PERSISTENCE_BACKEND) + if CONF.taskflow.connection: + taskflow_driver.upgrade_backend(CONF.taskflow.connection) diff --git a/masakari/tests/unit/db/test_migrations.py b/masakari/tests/unit/db/test_migrations.py index 282a7afe..0b6dd1bd 100644 --- a/masakari/tests/unit/db/test_migrations.py +++ b/masakari/tests/unit/db/test_migrations.py @@ -62,7 +62,8 @@ class MasakariMigrationsCheckers(test_migrations.WalkVersionsMixin): old_level = migrate_log.level migrate_log.setLevel(logging.WARN) self.addCleanup(migrate_log.setLevel, old_level) - + CONF.set_override('connection', str(self.migrate_engine.url), + group='taskflow') self.useFixture(masakari_fixtures.Timeout( os.environ.get('OS_TEST_TIMEOUT', 0), self.TIMEOUT_SCALING_FACTOR)) diff --git a/tools/test-setup.sh b/tools/test-setup.sh new file mode 100755 index 00000000..5b986ced --- /dev/null +++ b/tools/test-setup.sh @@ -0,0 +1,54 @@ +#!/bin/bash -xe + +# This script will be run by OpenStack CI before unit tests are run, +# it sets up the test system as needed. +# Developers should setup their test systems in a similar way. + +# This setup needs to be run as a user that can run sudo. + +# The root password for the MySQL database; pass it in via +# MYSQL_ROOT_PW. +DB_ROOT_PW=${MYSQL_ROOT_PW:-insecure_slave} + +# This user and its password are used by the tests, if you change it, +# your tests might fail. +DB_USER=openstack_citest +DB_PW=openstack_citest + +sudo -H mysqladmin -u root password $DB_ROOT_PW + +# It's best practice to remove anonymous users from the database. If +# an anonymous user exists, then it matches first for connections and +# other connections from that host will not work. +sudo -H mysql -u root -p$DB_ROOT_PW -h localhost -e " + DELETE FROM mysql.user WHERE User=''; + FLUSH PRIVILEGES; + CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PW'; + GRANT ALL PRIVILEGES ON *.* TO '$DB_USER'@'%' WITH GRANT OPTION;" + +# Now create our database. +mysql -u $DB_USER -p$DB_PW -h 127.0.0.1 -e " + SET default_storage_engine=MYISAM; + DROP DATABASE IF EXISTS openstack_citest; + CREATE DATABASE openstack_citest CHARACTER SET utf8;" + +# Same for PostgreSQL + +# Setup user +root_roles=$(sudo -H -u postgres psql -t -c " + SELECT 'HERE' from pg_roles where rolname='$DB_USER'") +if [[ ${root_roles} == *HERE ]];then + sudo -H -u postgres psql -c "ALTER ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'" +else + sudo -H -u postgres psql -c "CREATE ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'" +fi + +# Store password for tests +cat << EOF > $HOME/.pgpass +*:*:*:$DB_USER:$DB_PW +EOF +chmod 0600 $HOME/.pgpass + +# Now create our database +psql -h 127.0.0.1 -U $DB_USER -d template1 -c "DROP DATABASE IF EXISTS openstack_citest" +createdb -h 127.0.0.1 -U $DB_USER -l C -T template0 -E utf8 openstack_citest