@@ -32,16 +32,24 @@ cd openespi-authserver && mvn spring-boot:run
3232┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
3333│ Third Party │───▶│ Authorization │───▶│ Data Custodian │
3434│ (Java 21+Jakarta)│ │ Server (SB 3.5) │ │ Server (SB 3.5) │
35+ │ │ │ (Independent) │ │ │
3536└─────────────────┘ └─────────────────┘ └─────────────────┘
36- │ │ │
37- └───────────────────────┼───────────────────────┘
37+ │ │
38+ │ │
39+ └──────────────────────────────────────────────┘
3840 ▼
3941 ┌─────────────────┐
4042 │ OpenESPI Common │
4143 │ (Spring Boot 3.5)│
4244 └─────────────────┘
4345```
4446
47+ ** Module Dependencies:**
48+ - ** openespi-common** : Foundation library (no dependencies on other modules)
49+ - ** openespi-datacustodian** : Depends on openespi-common
50+ - ** openespi-authserver** : ** Independent** (no dependency on openespi-common)
51+ - ** openespi-thirdparty** : Depends on openespi-common
52+
4553## ✨ Migration Achievements
4654
4755** All modules now support:**
@@ -118,22 +126,117 @@ mvn test
118126mvn test -pl openespi-common
119127```
120128
121- ### Integration Tests
129+ ### Integration Tests with TestContainers
130+
131+ ** Prerequisites:**
132+ - Docker Desktop installed and running
133+ - Minimum 4GB RAM allocated to Docker
134+ - Ports 3306 (MySQL) and 5432 (PostgreSQL) available
135+
136+ ** Quick Start:**
122137``` bash
123- # TestContainers integration tests
138+ # Verify Docker is running
139+ docker --version && docker ps
140+
141+ # Run all integration tests (H2, MySQL, PostgreSQL)
124142mvn verify -pl openespi-common -Pintegration-tests
125143
144+ # Run specific database tests
145+ mvn test -Dtest=ComplexRelationshipMySQLIntegrationTest -pl openespi-common
146+ mvn test -Dtest=ComplexRelationshipPostgreSQLIntegrationTest -pl openespi-common
147+
126148# Cross-module integration
127149mvn verify -Pfull-integration
128150```
129151
152+ ** What Gets Tested:**
153+ - ✅ ** H2** : In-memory database with vendor-neutral migrations
154+ - ✅ ** MySQL 8.0** : TestContainers with BLOB column types
155+ - ✅ ** PostgreSQL 15** : TestContainers with BYTEA column types
156+ - ✅ ** Flyway Migrations** : Vendor-specific migration paths
157+ - ✅ ** JPA Relationships** : Complex entity hierarchies
158+ - ✅ ** Transaction Boundaries** : Data consistency across transactions
159+ - ✅ ** Bulk Operations** : saveAll, deleteAll operations
160+
161+ ** TestContainers Configuration:**
162+ - MySQL container: ` mysql:8.0 `
163+ - PostgreSQL container: ` postgres:15-alpine `
164+ - Container reuse enabled for faster test execution
165+ - Automatic cleanup after tests complete
166+
167+ ** Troubleshooting:**
168+ ``` bash
169+ # If containers fail to start
170+ docker system prune # Clean up Docker cache
171+ docker pull mysql:8.0
172+ docker pull postgres:15-alpine
173+
174+ # View running containers during tests
175+ docker ps
176+
177+ # Check container logs
178+ docker logs < container_id>
179+ ```
180+
181+ ## 🗄️ Database Migrations
182+
183+ ### Vendor-Specific Migration Structure
184+
185+ The project uses Flyway with a vendor-specific migration strategy to support H2, MySQL, and PostgreSQL:
186+
187+ ```
188+ openespi-common/src/main/resources/db/
189+ ├── migration/
190+ │ ├── V1__Create_Base_Tables.sql # Vendor-neutral base tables
191+ │ └── V3__Create_additiional_Base_Tables.sql # Additional shared tables
192+ └── vendor/
193+ ├── h2/ # (Future: H2-specific migrations)
194+ ├── mysql/ # (Future: MySQL-specific migrations)
195+ └── postgres/ # (Future: PostgreSQL-specific migrations)
196+ ```
197+
198+ ** Current Implementation:**
199+ - All migrations are currently in the base ` db/migration ` directory
200+ - Tables use vendor-neutral SQL syntax compatible with all three databases
201+ - Future enhancements will move vendor-specific tables to ` /vendor/{database}/ ` paths
202+
203+ ** Migration Locations by Profile:**
204+ - ` test ` (H2): ` classpath:db/migration `
205+ - ` test-mysql ` : ` classpath:db/migration,classpath:db/vendor/mysql `
206+ - ` test-postgresql ` : ` classpath:db/migration,classpath:db/vendor/postgres `
207+ - ` dev-mysql ` : ` classpath:db/migration,classpath:db/vendor/mysql `
208+ - ` dev-postgresql ` : ` classpath:db/migration,classpath:db/vendor/postgres `
209+
210+ ** Vendor-Specific Column Types:**
211+ | Type | H2 | MySQL | PostgreSQL |
212+ | ------| ------| -------| ------------|
213+ | Binary Data | ` BINARY ` | ` BLOB ` | ` BYTEA ` |
214+ | UUID | ` UUID ` | ` CHAR(36) ` | ` UUID ` |
215+ | Timestamps | ` TIMESTAMP ` | ` DATETIME ` | ` TIMESTAMP ` |
216+
217+ ** Running Migrations:**
218+ ``` bash
219+ # Migrations run automatically on application startup
220+ mvn spring-boot:run
221+
222+ # Test migrations with specific database
223+ mvn test -Dtest=ComplexRelationshipMySQLIntegrationTest
224+ mvn test -Dtest=ComplexRelationshipPostgreSQLIntegrationTest
225+
226+ # Validate migration status
227+ mvn flyway:info -pl openespi-common
228+ ```
229+
130230## 🚀 Deployment
131231
132232Each module has independent deployment capabilities:
133- - ** Common** : Maven Central library
134- - ** DataCustodian** : Kubernetes/Docker deployment
135- - ** AuthServer** : Kubernetes/Docker deployment
136- - ** ThirdParty** : WAR deployment or future containerization
233+ - ** Common** : Maven Central library (shared dependency)
234+ - ** DataCustodian** : Kubernetes/Docker deployment (Spring Boot 3.5 JAR)
235+ - ** AuthServer** : Kubernetes/Docker deployment (Spring Boot 3.5 JAR)
236+ - ** ThirdParty** : WAR deployment to Tomcat/Jetty ⚠️ ** Temporary** - awaiting Spring Boot 3.5 migration for containerization
237+
238+ ** Note on ThirdParty Deployment:**
239+ ThirdParty currently uses legacy WAR packaging because it runs on Spring Framework (not Spring Boot) with JSP/JSTL views. Once the Spring Boot 3.5 migration completes, it will switch to executable JAR packaging with embedded server and Docker/Kubernetes deployment like the other modules.
137240
138241### Docker Build
139242``` bash
0 commit comments