You are helping a user set up database containers for SnapLogic pipeline testing. Provide guidance based on these conventions.
Available Databases
| Database | Container Name | Port | Make Commands |
|---|---|---|---|
| Oracle | oracle-db | 1521 | make oracle-* |
| PostgreSQL | postgres-db | 5432 | make postgres-* |
| MySQL | mysql-db | 3306 | make mysql-* |
| SQL Server | sqlserver-db | 1433 | make sqlserver-* |
| DB2 | db2-db | 50000 | make db2-* |
| Teradata | teradata-db | 1025 | make teradata-* |
| Snowflake (Mock) | snowflake-mock | 8080 | make snowflake-* |
Quick Start
Oracle Database
# Start Oracle make oracle-start # Check status (wait for "healthy") make oracle-status # View logs make oracle-logs # Load test data make oracle-load-data # Connect to database make oracle-shell # Or: docker compose exec oracle-db sqlplus testuser/testpass@//localhost:1521/FREEPDB1 # Stop Oracle make oracle-stop
PostgreSQL
# Start PostgreSQL make postgres-start # Check status make postgres-status # Load test data make postgres-load-data # Connect to database make postgres-shell # Or: docker compose exec postgres-db psql -U testuser -d testdb # Stop PostgreSQL make postgres-stop
MySQL
# Start MySQL make mysql-start # Check status make mysql-status # Load test data make mysql-load-data # Connect to database make mysql-shell # Or: docker compose exec mysql-db mysql -u testuser -ptestpass testdb # Stop MySQL make mysql-stop
SQL Server
# Start SQL Server make sqlserver-start # Check status make sqlserver-status # Connect to database make sqlserver-shell # Stop SQL Server make sqlserver-stop
Snowflake (Mock)
# Start Snowflake mock service make snowflake-mock-start # Check status make snowflake-status # Stop Snowflake mock make snowflake-mock-stop
Environment Configuration
Database Credentials
Add to your .env file:
# Oracle ORACLE_USER=testuser ORACLE_PASSWORD=testpass ORACLE_DATABASE=FREEPDB1 ORACLE_HOST=oracle-db ORACLE_PORT=1521 # PostgreSQL POSTGRES_USER=testuser POSTGRES_PASSWORD=testpass POSTGRES_DATABASE=testdb POSTGRES_HOST=postgres-db POSTGRES_PORT=5432 # MySQL MYSQL_USER=testuser MYSQL_PASSWORD=testpass MYSQL_DATABASE=testdb MYSQL_HOST=mysql-db MYSQL_PORT=3306 # SQL Server SQLSERVER_USER=sa SQLSERVER_PASSWORD=YourStrong!Passw0rd SQLSERVER_DATABASE=testdb SQLSERVER_HOST=sqlserver-db SQLSERVER_PORT=1433 # Snowflake SNOWFLAKE_ACCOUNT=mock_account SNOWFLAKE_USER=testuser SNOWFLAKE_PASSWORD=testpass SNOWFLAKE_DATABASE=testdb SNOWFLAKE_WAREHOUSE=test_wh
Service-Specific Environment Files
For complex configurations, create files in env_files/:
env_files/ ├── .env.oracle ├── .env.postgres ├── .env.mysql └── .env.snowflake
Loading Test Data
From SQL Files
# Oracle - load from SQL file docker compose exec oracle-db sqlplus testuser/testpass@//localhost:1521/FREEPDB1 @/path/to/script.sql # PostgreSQL - load from SQL file docker compose exec postgres-db psql -U testuser -d testdb -f /path/to/script.sql # MySQL - load from SQL file docker compose exec mysql-db mysql -u testuser -ptestpass testdb < /path/to/script.sql
Using Make Targets
# Load predefined test data make oracle-load-data make postgres-load-data make mysql-load-data
Custom Data Loading
Create a test data SQL file in test/suite/test_data/ and reference it in your tests:
*** Keywords ***
Load Custom Test Data
[Arguments] ${sql_file}
${result}= Run Process docker compose exec -T oracle-db
... sqlplus testuser/testpass@//localhost:1521/FREEPDB1 @${sql_file}
Should Be Equal As Integers ${result.rc} 0
Troubleshooting
Container Won't Start
# Check for port conflicts lsof -i :1521 # Oracle lsof -i :5432 # PostgreSQL lsof -i :3306 # MySQL # Check Docker resources docker system df docker stats # Remove and recreate make oracle-stop docker compose rm -f oracle-db make oracle-start
Connection Refused
# 1. Verify container is running make oracle-status # 2. Check container logs for errors make oracle-logs # 3. Verify network connectivity docker compose exec tools ping -c 3 oracle-db docker compose exec tools nc -zv oracle-db 1521 # 4. Check environment variables docker compose exec tools env | grep ORACLE
Oracle Specific Issues
Initialization takes too long: Oracle can take 5-10 minutes on first start. Check logs:
make oracle-logs | grep -i "database ready"
ORA-12514: TNS listener does not currently know of service:
# Wait for database to fully initialize # Check listener status docker compose exec oracle-db lsnrctl status
PostgreSQL Specific Issues
FATAL: database "testdb" does not exist:
# Create the database docker compose exec postgres-db createdb -U testuser testdb
MySQL Specific Issues
Access denied for user:
# Reset user permissions docker compose exec mysql-db mysql -u root -p # Then: GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'%';
Database Schema Management
Creating Tables
*** Keywords ***
Create Test Table
[Arguments] ${table_name}
${sql}= Catenate SEPARATOR=\n
... CREATE TABLE ${table_name} (
... id NUMBER PRIMARY KEY,
... name VARCHAR2(100),
... value NUMBER,
... created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
... )
Execute SQL ${sql}
Dropping Tables
*** Keywords ***
Drop Test Table If Exists
[Arguments] ${table_name}
Run Keyword And Ignore Error
... Execute SQL DROP TABLE ${table_name}
Best Practices
1. Use Unique Table Names
${unique_id}= Get Unique Id
${table_name}= Set Variable test_table_${unique_id}
2. Clean Up After Tests
[Teardown] Run Keywords
... Drop Test Table If Exists ${table_name}
... AND Close Database Connection
3. Wait for Database Ready
*** Keywords ***
Wait For Database Ready
[Arguments] ${timeout}=120
Wait Until Keyword Succeeds ${timeout} 10s
... Test Database Connection
4. Use Connection Pooling
For tests that make many database calls, consider connection reuse rather than opening new connections for each operation.
5. Isolate Test Data
Each test should create and clean up its own data to avoid interference with other tests.