test(e2e): smoke test через Testcontainers + fix audit_log.ip_address INET bug

Phase 1 e2e — proof framework работает:
- E2ESupport: Postgres 18 (postgis/postgis:18-3.6) + Kafka (cp-kafka 7.6.0)
  через Testcontainers, reuse=true. db-init.sql создаёт postgis+btree_gist
  расширения которые ожидает Liquibase 0001.
- application-test.yml: тушит cloud-config/vault/otel/outbox publishing,
  включает Liquibase autoconfig. Auth disabled для упрощения.
- SmokeE2ETest: full e2e — POST dictionary → POST record → GET record →
  проверка audit_log row. UUID-suffix в dictName для идемпотентности.
- master.xml: relativeToChangelogFile=true для всех include — иначе
  Liquibase из ordinis-app classpath не находит changes/X.xml в JAR.
- pom.xml: testcontainers 1.21.3, surefire env DOCKER_HOST + DOCKER_API_VERSION
  для macOS Docker Desktop.

Найден реальный prod-баг: audit_log.ip_address был INET, Hibernate JPA не
делает автоматический cast String→INET → INSERT падал. AuditLogger.write
обёрнут в try/catch, поэтому тихо съедал ошибку — на staging audit_log
оставался пустым после CRUD.
- 0012-audit-log-ipaddress-varchar.xml: ALTER COLUMN INET → VARCHAR(64)
- AuditLog entity: убрал columnDefinition="inet", length=64.
This commit is contained in:
Zimin A.N.
2026-05-05 19:16:53 +03:00
parent b58f6f400d
commit f535f7544d
9 changed files with 364 additions and 12 deletions
@@ -0,0 +1,58 @@
# Профиль для @SpringBootTest e2e тестов. Тушит весь cloud-config / vault /
# OTel / outbox publishing — оставляем чистый Spring Boot + Postgres + Kafka
# Testcontainers.
spring:
cloud:
config:
enabled: false
vault:
enabled: false
autoconfigure:
exclude:
- org.springframework.cloud.vault.config.VaultAutoConfiguration
- org.springframework.cloud.vault.config.VaultObservationAutoConfiguration
- org.springframework.cloud.vault.config.VaultReactiveAutoConfiguration
jpa:
hibernate:
ddl-auto: none
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.jdbc.lob.non_contextual_creation: true
open-in-view: false
liquibase:
change-log: db/changelog/master.xml
enabled: true
kafka:
producer:
acks: all
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
ordinis:
auth:
issuer-uri: ""
require-authentication: false
allow-query-scope: true
outbox:
enabled: ${ORDINIS_OUTBOX_ENABLED:false}
bundle:
cuod:
auto-import: ${ORDINIS_BUNDLE_AUTOIMPORT:false}
otel:
sdk:
disabled: true
management:
metrics:
export:
prometheus:
enabled: false
logging:
level:
root: WARN
cloud.nstart.terravault.ordinis: INFO
liquibase: WARN
org.hibernate.SQL: WARN
@@ -0,0 +1,6 @@
-- Init SQL для testcontainer Postgres. Liquibase 0001-extensions.xml
-- ожидает postgis + btree_gist уже созданными (в прод-кластере CNPG initdb
-- их создаёт). В тестах создаём вручную.
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS btree_gist;