boulder/test/create_db.sh

109 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -o errexit
cd $(dirname $0)/..
# If you modify DBS or ENVS, you must also modify the corresponding keys in
# sa/db/dbconfig.yml, see: https://github.com/rubenv/sql-migrate#readme
DBS="boulder_sa
incidents_sa"
ENVS="test
integration"
# /path/to/boulder/repo
root_dir=$(dirname $(dirname $(readlink -f "$0")))
# posix compliant escape sequence
esc=$'\033'"["
res="${esc}0m"
function print_heading() {
echo
# newline + bold magenta
echo -e "${esc}0;34;1m${1}${res}"
}
function exit_err() {
if [ ! -z "$1" ]
then
echo $1 > /dev/stderr
fi
exit 1
}
function create_empty_db() {
local db="${1}"
local dbconn="${2}"
create_script="drop database if exists \`${db}\`; create database if not exists \`${db}\`;"
mysql ${dbconn} -e "${create_script}" || exit_err "unable to create ${db}"
}
# set db connection for if running in a separate container or not
dbconn="-u root"
if [[ $MYSQL_CONTAINER ]]
then
dbconn="-u root -h boulder-mysql --port 3306"
fi
# MariaDB sets the default binlog_format to STATEMENT,
# which causes warnings that fail tests. Instead set it
# to the format we use in production, MIXED.
mysql ${dbconn} -e "SET GLOBAL binlog_format = 'MIXED';"
# MariaDB sets the default @@max_connections value to 100. The SA alone is
# configured to use up to 100 connections. We increase the max connections here
# to give headroom for other components (ocsp-responder for example).
mysql ${dbconn} -e "SET GLOBAL max_connections = 500;"
for db in $DBS; do
for env in $ENVS; do
dbname="${db}_${env}"
print_heading "${dbname}"
if mysql ${dbconn} -e 'show databases;' | grep "${dbname}" > /dev/null; then
echo "Already exists - skipping create"
else
echo "Doesn't exist - creating"
create_empty_db "${dbname}" "${dbconn}"
fi
if [[ "${BOULDER_CONFIG_DIR}" == "test/config-next" ]]
then
dbpath="./sa/db-next"
else
dbpath="./sa/db"
fi
# sql-migrate will default to ./dbconfig.yml and treat all configured dirs
# as relative.
cd "${dbpath}"
r=`sql-migrate up -env="${dbname}" | xargs -0 echo`
if [[ "${r}" == "Migration failed"* ]]
then
echo "Migration failed - dropping and recreating"
create_empty_db "${dbname}" "${dbconn}"
sql-migrate up -env="${dbname}" || exit_err "Migration failed after dropping and recreating"
else
echo "${r}"
fi
USERS_SQL="../db-users/${db}.sql"
if [[ ${MYSQL_CONTAINER} ]]
then
sed -e "s/'localhost'/'%'/g" < ${USERS_SQL} | \
mysql ${dbconn} -D "${dbname}" -f || exit_err "Unable to add users from ${USERS_SQL}"
else
sed -e "s/'localhost'/'127.%'/g" < $USERS_SQL | \
mysql ${dbconn} -D "${dbname}" -f < $USERS_SQL || exit_err "Unable to add users from ${USERS_SQL}"
fi
echo "Added users from ${USERS_SQL}"
# return to the root directory
cd "${root_dir}"
done
done
echo
echo "database setup complete"