129 lines
3.6 KiB
Bash
Executable File
129 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Get the directory where the script is located
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
|
|
check_postgres() {
|
|
if docker logs pinepods-test-db 2>&1 | grep -q "database system is ready to accept connections"; then
|
|
echo "PostgreSQL is ready!"
|
|
return 0
|
|
else
|
|
echo "PostgreSQL is not ready"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to start MySQL container
|
|
start_mysql() {
|
|
if ! docker ps | grep -q pinepods-mysql-test; then
|
|
if docker ps -a | grep -q pinepods-mysql-test; then
|
|
docker start pinepods-mysql-test
|
|
else
|
|
docker run --name pinepods-mysql-test \
|
|
-e MYSQL_USER=test_user \
|
|
-e MYSQL_PASSWORD=test_password \
|
|
-e MYSQL_DATABASE=test_db \
|
|
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
|
|
-p 3306:3306 \
|
|
-d mariadb:latest
|
|
|
|
# Wait for MySQL to be ready
|
|
echo "Waiting for MySQL to be ready..."
|
|
sleep 10
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Function to start PostgreSQL container
|
|
start_postgres() {
|
|
if ! docker ps | grep -q pinepods-test-db; then
|
|
if docker ps -a | grep -q pinepods-test-db; then
|
|
docker start pinepods-test-db
|
|
else
|
|
docker run --name pinepods-test-db \
|
|
-e POSTGRES_USER=test_user \
|
|
-e POSTGRES_PASSWORD=test_password \
|
|
-e POSTGRES_DB=test_db \
|
|
-p 5432:5432 \
|
|
-d postgres:latest
|
|
|
|
# Wait for PostgreSQL to be ready
|
|
echo "Waiting for PostgreSQL to be ready..."
|
|
sleep 10
|
|
check_postgres
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Function to setup database schema
|
|
setup_database() {
|
|
local db_type=$1
|
|
|
|
# Export necessary environment variables for the setup script
|
|
export DB_HOST=localhost
|
|
export DB_PORT=5432
|
|
export DB_USER=test_user
|
|
export DB_PASSWORD=test_password
|
|
export DB_NAME=test_db
|
|
export DB_TYPE=$db_type
|
|
|
|
echo "Setting up $db_type schema using new migration system..."
|
|
python3 "${SCRIPT_DIR}/startup/setup_database_new.py"
|
|
}
|
|
|
|
|
|
|
|
# Activate virtual environment
|
|
source "${SCRIPT_DIR}/venv/bin/activate"
|
|
|
|
# Set PYTHONPATH to include the project root
|
|
export PYTHONPATH="${SCRIPT_DIR}:${PYTHONPATH}"
|
|
|
|
# Parse command line arguments
|
|
DB_TYPE=${1:-"postgresql"} # Default to PostgreSQL if no argument provided
|
|
|
|
case $DB_TYPE in
|
|
"postgresql")
|
|
echo "Running tests with PostgreSQL..."
|
|
start_postgres
|
|
export TEST_DB_TYPE=postgresql
|
|
setup_database postgresql
|
|
;;
|
|
"mariadb")
|
|
echo "Running tests with MariaDB..."
|
|
start_mysql
|
|
export TEST_DB_TYPE=mariadb
|
|
setup_database mariadb
|
|
;;
|
|
*)
|
|
echo "Invalid database type. Use 'postgresql' or 'mariadb'"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Function to cleanup containers
|
|
cleanup_containers() {
|
|
local db_type=$1
|
|
if [ "$db_type" == "postgresql" ]; then
|
|
echo "Cleaning up PostgreSQL container..."
|
|
docker stop pinepods-test-db >/dev/null 2>&1
|
|
docker rm pinepods-test-db >/dev/null 2>&1
|
|
else
|
|
echo "Cleaning up MariaDB container..."
|
|
docker stop pinepods-mysql-test >/dev/null 2>&1
|
|
docker rm pinepods-mysql-test >/dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
# Add trap to ensure cleanup happens even if script fails
|
|
trap 'cleanup_containers "$DB_TYPE"' EXIT
|
|
|
|
# Rest of your script remains the same...
|
|
|
|
# Run tests with verbose output
|
|
pytest -v tests/
|
|
|
|
# Cleanup will happen automatically due to trap, but you can also call it explicitly
|
|
cleanup_containers "$DB_TYPE"
|