From 9a8fe9f1372606e3b776097efb2d4816cdbfafcb Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 00:04:48 +0000 Subject: [PATCH 01/11] refactor: move test environments to tests/environments/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 1 of test framework reorganization. Move Oracle environments from tests/sql/environments/ to tests/environments/ — they are shared infrastructure, not specific to SQL tests. Updated all path references in: - test_e2e.py (env_dir) - vm-env.sh (_PROJECT_ROOT) - checkpoint-restart-test.sh, run.sh, soak-test.sh, setup.sh (path vars) - docker-compose.yaml files (volume mount paths) - AGENTS.md, README.md (documentation) 126/126 redo fixture tests pass. --- AGENTS.md | 4 +--- tests/README.md | 2 +- tests/{sql => }/environments/enterprise-19/.env | 0 tests/{sql => }/environments/enterprise-19/README.md | 0 .../environments/enterprise-19/docker-compose.yaml | 0 .../enterprise-19/oracle-init/01-setup.sh | 0 tests/{sql => }/environments/free-23/.env | 0 .../environments/free-23/docker-compose.yaml | 0 .../environments/free-23/oracle-init/01-setup.sh | 0 tests/{sql => }/environments/rac/.env | 0 tests/{sql => }/environments/rac/debezium/.gitignore | 0 tests/{sql => }/environments/rac/debezium/Makefile | 0 .../rac/debezium/checkpoint-restart-test.sh | 5 ++--- .../debezium/config/application-logminer.properties | 0 .../rac/debezium/config/application-olr.properties | 0 .../environments/rac/debezium/config/olr-config.json | 0 .../environments/rac/debezium/docker-compose.yaml | 8 ++++---- .../rac/debezium/perf/Dockerfile.swingbench | 0 .../environments/rac/debezium/perf/RESULTS.md | 0 .../perf/config/application-logminer.properties | 0 .../debezium/perf/config/application-olr.properties | 0 .../rac/debezium/perf/config/prometheus.yml | 0 .../environments/rac/debezium/perf/dml-generator.sql | 0 .../rac/debezium/perf/docker-compose.yaml | 8 ++++---- .../environments/rac/debezium/perf/olr-config.json | 0 tests/{sql => }/environments/rac/debezium/perf/run.sh | 0 .../environments/rac/debezium/perf/setup.sql | 0 .../environments/rac/debezium/perf/validator.py | 0 tests/{sql => }/environments/rac/debezium/run.sh | 11 +++++------ tests/{sql => }/environments/rac/debezium/setup.sh | 4 ++-- .../{sql => }/environments/rac/debezium/soak-test.sh | 7 +++---- tests/{sql => }/environments/rac/down.sh | 0 tests/{sql => }/environments/rac/up.sh | 0 tests/{sql => }/environments/rac/vm-env.sh | 2 +- tests/{sql => }/environments/xe-21-official/.env | 0 .../environments/xe-21-official/docker-compose.yaml | 0 .../xe-21-official/oracle-init/01-setup.sh | 0 tests/{sql => }/environments/xe-21/.env | 0 .../{sql => }/environments/xe-21/docker-compose.yaml | 0 .../environments/xe-21/oracle-init/01-setup.sh | 0 tests/sql/scripts/generate.sh | 2 +- tests/test_e2e.py | 2 +- 42 files changed, 25 insertions(+), 30 deletions(-) rename tests/{sql => }/environments/enterprise-19/.env (100%) rename tests/{sql => }/environments/enterprise-19/README.md (100%) rename tests/{sql => }/environments/enterprise-19/docker-compose.yaml (100%) rename tests/{sql => }/environments/enterprise-19/oracle-init/01-setup.sh (100%) rename tests/{sql => }/environments/free-23/.env (100%) rename tests/{sql => }/environments/free-23/docker-compose.yaml (100%) rename tests/{sql => }/environments/free-23/oracle-init/01-setup.sh (100%) rename tests/{sql => }/environments/rac/.env (100%) rename tests/{sql => }/environments/rac/debezium/.gitignore (100%) rename tests/{sql => }/environments/rac/debezium/Makefile (100%) rename tests/{sql => }/environments/rac/debezium/checkpoint-restart-test.sh (99%) rename tests/{sql => }/environments/rac/debezium/config/application-logminer.properties (100%) rename tests/{sql => }/environments/rac/debezium/config/application-olr.properties (100%) rename tests/{sql => }/environments/rac/debezium/config/olr-config.json (100%) rename tests/{sql => }/environments/rac/debezium/docker-compose.yaml (73%) rename tests/{sql => }/environments/rac/debezium/perf/Dockerfile.swingbench (100%) rename tests/{sql => }/environments/rac/debezium/perf/RESULTS.md (100%) rename tests/{sql => }/environments/rac/debezium/perf/config/application-logminer.properties (100%) rename tests/{sql => }/environments/rac/debezium/perf/config/application-olr.properties (100%) rename tests/{sql => }/environments/rac/debezium/perf/config/prometheus.yml (100%) rename tests/{sql => }/environments/rac/debezium/perf/dml-generator.sql (100%) rename tests/{sql => }/environments/rac/debezium/perf/docker-compose.yaml (87%) rename tests/{sql => }/environments/rac/debezium/perf/olr-config.json (100%) rename tests/{sql => }/environments/rac/debezium/perf/run.sh (100%) rename tests/{sql => }/environments/rac/debezium/perf/setup.sql (100%) rename tests/{sql => }/environments/rac/debezium/perf/validator.py (100%) rename tests/{sql => }/environments/rac/debezium/run.sh (98%) rename tests/{sql => }/environments/rac/debezium/setup.sh (97%) rename tests/{sql => }/environments/rac/debezium/soak-test.sh (99%) rename tests/{sql => }/environments/rac/down.sh (100%) rename tests/{sql => }/environments/rac/up.sh (100%) rename tests/{sql => }/environments/rac/vm-env.sh (97%) rename tests/{sql => }/environments/xe-21-official/.env (100%) rename tests/{sql => }/environments/xe-21-official/docker-compose.yaml (100%) rename tests/{sql => }/environments/xe-21-official/oracle-init/01-setup.sh (100%) rename tests/{sql => }/environments/xe-21/.env (100%) rename tests/{sql => }/environments/xe-21/docker-compose.yaml (100%) rename tests/{sql => }/environments/xe-21/oracle-init/01-setup.sh (100%) diff --git a/AGENTS.md b/AGENTS.md index bc92c870..e7c4f557 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,9 +25,7 @@ BuildKit cache mounts. Only the OLR compilation layer rebuilds on source changes make test-redo # Run SQL tests against live Oracle -make -C tests/sql/environments/free-23 up -make -C tests/sql/environments/free-23 test-sql -make -C tests/sql/environments/free-23 down +cd tests && pytest test_e2e.py -v --oracle-env=free-23 # Archive generated fixtures for committing make fixtures diff --git a/tests/README.md b/tests/README.md index 7ca7f9ec..136144ff 100644 --- a/tests/README.md +++ b/tests/README.md @@ -61,7 +61,7 @@ fixture automatically starts/stops containers via `docker compose` (or custom `up.sh`/`down.sh` scripts for non-Docker environments like RAC). Environment-specific settings (`DB_CONN`, `PDB_NAME`, `INCLUDE_TAGS`) are -loaded from `sql/environments//.env` if present. +loaded from `environments//.env` if present. ```bash # Generate all fixtures for Oracle Free 23 diff --git a/tests/sql/environments/enterprise-19/.env b/tests/environments/enterprise-19/.env similarity index 100% rename from tests/sql/environments/enterprise-19/.env rename to tests/environments/enterprise-19/.env diff --git a/tests/sql/environments/enterprise-19/README.md b/tests/environments/enterprise-19/README.md similarity index 100% rename from tests/sql/environments/enterprise-19/README.md rename to tests/environments/enterprise-19/README.md diff --git a/tests/sql/environments/enterprise-19/docker-compose.yaml b/tests/environments/enterprise-19/docker-compose.yaml similarity index 100% rename from tests/sql/environments/enterprise-19/docker-compose.yaml rename to tests/environments/enterprise-19/docker-compose.yaml diff --git a/tests/sql/environments/enterprise-19/oracle-init/01-setup.sh b/tests/environments/enterprise-19/oracle-init/01-setup.sh similarity index 100% rename from tests/sql/environments/enterprise-19/oracle-init/01-setup.sh rename to tests/environments/enterprise-19/oracle-init/01-setup.sh diff --git a/tests/sql/environments/free-23/.env b/tests/environments/free-23/.env similarity index 100% rename from tests/sql/environments/free-23/.env rename to tests/environments/free-23/.env diff --git a/tests/sql/environments/free-23/docker-compose.yaml b/tests/environments/free-23/docker-compose.yaml similarity index 100% rename from tests/sql/environments/free-23/docker-compose.yaml rename to tests/environments/free-23/docker-compose.yaml diff --git a/tests/sql/environments/free-23/oracle-init/01-setup.sh b/tests/environments/free-23/oracle-init/01-setup.sh similarity index 100% rename from tests/sql/environments/free-23/oracle-init/01-setup.sh rename to tests/environments/free-23/oracle-init/01-setup.sh diff --git a/tests/sql/environments/rac/.env b/tests/environments/rac/.env similarity index 100% rename from tests/sql/environments/rac/.env rename to tests/environments/rac/.env diff --git a/tests/sql/environments/rac/debezium/.gitignore b/tests/environments/rac/debezium/.gitignore similarity index 100% rename from tests/sql/environments/rac/debezium/.gitignore rename to tests/environments/rac/debezium/.gitignore diff --git a/tests/sql/environments/rac/debezium/Makefile b/tests/environments/rac/debezium/Makefile similarity index 100% rename from tests/sql/environments/rac/debezium/Makefile rename to tests/environments/rac/debezium/Makefile diff --git a/tests/sql/environments/rac/debezium/checkpoint-restart-test.sh b/tests/environments/rac/debezium/checkpoint-restart-test.sh similarity index 99% rename from tests/sql/environments/rac/debezium/checkpoint-restart-test.sh rename to tests/environments/rac/debezium/checkpoint-restart-test.sh index 3e71b440..04b5da76 100755 --- a/tests/sql/environments/rac/debezium/checkpoint-restart-test.sh +++ b/tests/environments/rac/debezium/checkpoint-restart-test.sh @@ -21,10 +21,9 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -SQL_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" -TESTS_DIR="$(cd "$SQL_DIR/.." && pwd)" +TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$SQL_DIR/scripts" +SCRIPTS_DIR="$TESTS_DIR/sql/scripts" KILL_COUNT="${1:-3}" diff --git a/tests/sql/environments/rac/debezium/config/application-logminer.properties b/tests/environments/rac/debezium/config/application-logminer.properties similarity index 100% rename from tests/sql/environments/rac/debezium/config/application-logminer.properties rename to tests/environments/rac/debezium/config/application-logminer.properties diff --git a/tests/sql/environments/rac/debezium/config/application-olr.properties b/tests/environments/rac/debezium/config/application-olr.properties similarity index 100% rename from tests/sql/environments/rac/debezium/config/application-olr.properties rename to tests/environments/rac/debezium/config/application-olr.properties diff --git a/tests/sql/environments/rac/debezium/config/olr-config.json b/tests/environments/rac/debezium/config/olr-config.json similarity index 100% rename from tests/sql/environments/rac/debezium/config/olr-config.json rename to tests/environments/rac/debezium/config/olr-config.json diff --git a/tests/sql/environments/rac/debezium/docker-compose.yaml b/tests/environments/rac/debezium/docker-compose.yaml similarity index 73% rename from tests/sql/environments/rac/debezium/docker-compose.yaml rename to tests/environments/rac/debezium/docker-compose.yaml index bc9e9fb0..d13ec3b1 100644 --- a/tests/sql/environments/rac/debezium/docker-compose.yaml +++ b/tests/environments/rac/debezium/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../../scripts/debezium-receiver.py:/app/debezium-receiver.py:ro + - ../../../sql/scripts/debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data volumes: diff --git a/tests/sql/environments/rac/debezium/perf/Dockerfile.swingbench b/tests/environments/rac/debezium/perf/Dockerfile.swingbench similarity index 100% rename from tests/sql/environments/rac/debezium/perf/Dockerfile.swingbench rename to tests/environments/rac/debezium/perf/Dockerfile.swingbench diff --git a/tests/sql/environments/rac/debezium/perf/RESULTS.md b/tests/environments/rac/debezium/perf/RESULTS.md similarity index 100% rename from tests/sql/environments/rac/debezium/perf/RESULTS.md rename to tests/environments/rac/debezium/perf/RESULTS.md diff --git a/tests/sql/environments/rac/debezium/perf/config/application-logminer.properties b/tests/environments/rac/debezium/perf/config/application-logminer.properties similarity index 100% rename from tests/sql/environments/rac/debezium/perf/config/application-logminer.properties rename to tests/environments/rac/debezium/perf/config/application-logminer.properties diff --git a/tests/sql/environments/rac/debezium/perf/config/application-olr.properties b/tests/environments/rac/debezium/perf/config/application-olr.properties similarity index 100% rename from tests/sql/environments/rac/debezium/perf/config/application-olr.properties rename to tests/environments/rac/debezium/perf/config/application-olr.properties diff --git a/tests/sql/environments/rac/debezium/perf/config/prometheus.yml b/tests/environments/rac/debezium/perf/config/prometheus.yml similarity index 100% rename from tests/sql/environments/rac/debezium/perf/config/prometheus.yml rename to tests/environments/rac/debezium/perf/config/prometheus.yml diff --git a/tests/sql/environments/rac/debezium/perf/dml-generator.sql b/tests/environments/rac/debezium/perf/dml-generator.sql similarity index 100% rename from tests/sql/environments/rac/debezium/perf/dml-generator.sql rename to tests/environments/rac/debezium/perf/dml-generator.sql diff --git a/tests/sql/environments/rac/debezium/perf/docker-compose.yaml b/tests/environments/rac/debezium/perf/docker-compose.yaml similarity index 87% rename from tests/sql/environments/rac/debezium/perf/docker-compose.yaml rename to tests/environments/rac/debezium/perf/docker-compose.yaml index d460b534..4e780a7e 100644 --- a/tests/sql/environments/rac/debezium/perf/docker-compose.yaml +++ b/tests/environments/rac/debezium/perf/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../../../scripts/debezium-receiver.py:/app/debezium-receiver.py:ro + - ../../../../sql/scripts/debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data swingbench: diff --git a/tests/sql/environments/rac/debezium/perf/olr-config.json b/tests/environments/rac/debezium/perf/olr-config.json similarity index 100% rename from tests/sql/environments/rac/debezium/perf/olr-config.json rename to tests/environments/rac/debezium/perf/olr-config.json diff --git a/tests/sql/environments/rac/debezium/perf/run.sh b/tests/environments/rac/debezium/perf/run.sh similarity index 100% rename from tests/sql/environments/rac/debezium/perf/run.sh rename to tests/environments/rac/debezium/perf/run.sh diff --git a/tests/sql/environments/rac/debezium/perf/setup.sql b/tests/environments/rac/debezium/perf/setup.sql similarity index 100% rename from tests/sql/environments/rac/debezium/perf/setup.sql rename to tests/environments/rac/debezium/perf/setup.sql diff --git a/tests/sql/environments/rac/debezium/perf/validator.py b/tests/environments/rac/debezium/perf/validator.py similarity index 100% rename from tests/sql/environments/rac/debezium/perf/validator.py rename to tests/environments/rac/debezium/perf/validator.py diff --git a/tests/sql/environments/rac/debezium/run.sh b/tests/environments/rac/debezium/run.sh similarity index 98% rename from tests/sql/environments/rac/debezium/run.sh rename to tests/environments/rac/debezium/run.sh index 6233007f..6e895d89 100755 --- a/tests/sql/environments/rac/debezium/run.sh +++ b/tests/environments/rac/debezium/run.sh @@ -18,10 +18,9 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -SQL_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" -TESTS_DIR="$(cd "$SQL_DIR/.." && pwd)" +TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$SQL_DIR/scripts" +SCRIPTS_DIR="$TESTS_DIR/sql/scripts" SCENARIO="${1:?Usage: $0 }" @@ -149,9 +148,9 @@ _run_rac_blocks() { } # ---- Find scenario SQL ---- -SCENARIO_SQL="$SQL_DIR/inputs/${SCENARIO}.sql" +SCENARIO_SQL="$TESTS_DIR/sql/inputs/${SCENARIO}.sql" if [[ ! -f "$SCENARIO_SQL" ]]; then - SCENARIO_SQL="$SQL_DIR/inputs/${SCENARIO}.rac.sql" + SCENARIO_SQL="$TESTS_DIR/sql/inputs/${SCENARIO}.rac.sql" fi if [[ ! -f "$SCENARIO_SQL" ]]; then echo "ERROR: Scenario file not found: $SCENARIO" >&2 @@ -184,7 +183,7 @@ echo "--- Stage 1: Verify services ---" # Check receiver if ! curl -sf "$RECEIVER_URL/health" > /dev/null 2>&1; then echo "ERROR: Receiver not responding at $RECEIVER_URL" >&2 - echo "Run: make -C tests/sql/environments/rac/debezium up" >&2 + echo "Run: make -C tests/environments/rac/debezium up" >&2 exit 1 fi echo " Receiver: OK" diff --git a/tests/sql/environments/rac/debezium/setup.sh b/tests/environments/rac/debezium/setup.sh similarity index 97% rename from tests/sql/environments/rac/debezium/setup.sh rename to tests/environments/rac/debezium/setup.sh index fd287a93..b6847ec9 100755 --- a/tests/sql/environments/rac/debezium/setup.sh +++ b/tests/environments/rac/debezium/setup.sh @@ -1,14 +1,14 @@ #!/usr/bin/env bash # One-time setup: create c##dbzuser + grants + sentinel table on RAC. # Run from the project root: -# tests/sql/environments/rac/debezium/setup.sh +# tests/environments/rac/debezium/setup.sh # # Prerequisites: RAC VM running with containers started. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../../.." && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)" VM_HOST="${VM_HOST:-192.168.122.248}" VM_KEY="${VM_KEY:-$PROJECT_ROOT/oracle-rac/assets/vm-key}" diff --git a/tests/sql/environments/rac/debezium/soak-test.sh b/tests/environments/rac/debezium/soak-test.sh similarity index 99% rename from tests/sql/environments/rac/debezium/soak-test.sh rename to tests/environments/rac/debezium/soak-test.sh index 259e8004..06a0c2c0 100755 --- a/tests/sql/environments/rac/debezium/soak-test.sh +++ b/tests/environments/rac/debezium/soak-test.sh @@ -20,10 +20,9 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -SQL_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" -TESTS_DIR="$(cd "$SQL_DIR/.." && pwd)" +TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$SQL_DIR/scripts" +SCRIPTS_DIR="$TESTS_DIR/sql/scripts" DURATION_MINUTES="${1:-30}" DURATION_SECONDS=$(( DURATION_MINUTES * 60 )) @@ -96,7 +95,7 @@ echo "--- Stage 1: Verify services ---" if ! curl -sf "$RECEIVER_URL/health" > /dev/null 2>&1; then echo "ERROR: Receiver not responding at $RECEIVER_URL" >&2 - echo "Run: make -C tests/sql/environments/rac/debezium up" >&2 + echo "Run: make -C tests/environments/rac/debezium up" >&2 exit 1 fi echo " Receiver: OK" diff --git a/tests/sql/environments/rac/down.sh b/tests/environments/rac/down.sh similarity index 100% rename from tests/sql/environments/rac/down.sh rename to tests/environments/rac/down.sh diff --git a/tests/sql/environments/rac/up.sh b/tests/environments/rac/up.sh similarity index 100% rename from tests/sql/environments/rac/up.sh rename to tests/environments/rac/up.sh diff --git a/tests/sql/environments/rac/vm-env.sh b/tests/environments/rac/vm-env.sh similarity index 97% rename from tests/sql/environments/rac/vm-env.sh rename to tests/environments/rac/vm-env.sh index 3dc123d8..8e736da9 100644 --- a/tests/sql/environments/rac/vm-env.sh +++ b/tests/environments/rac/vm-env.sh @@ -7,7 +7,7 @@ # Exports: VM_HOST, VM_KEY, VM_USER, _SSH_OPTS _RAC_ENV_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -_PROJECT_ROOT="$(cd "$_RAC_ENV_DIR/../../../.." && pwd)" +_PROJECT_ROOT="$(cd "$_RAC_ENV_DIR/../../.." && pwd)" VM_KEY="${VM_KEY:-$_PROJECT_ROOT/oracle-rac/assets/vm-key}" VM_USER="${VM_USER:-root}" diff --git a/tests/sql/environments/xe-21-official/.env b/tests/environments/xe-21-official/.env similarity index 100% rename from tests/sql/environments/xe-21-official/.env rename to tests/environments/xe-21-official/.env diff --git a/tests/sql/environments/xe-21-official/docker-compose.yaml b/tests/environments/xe-21-official/docker-compose.yaml similarity index 100% rename from tests/sql/environments/xe-21-official/docker-compose.yaml rename to tests/environments/xe-21-official/docker-compose.yaml diff --git a/tests/sql/environments/xe-21-official/oracle-init/01-setup.sh b/tests/environments/xe-21-official/oracle-init/01-setup.sh similarity index 100% rename from tests/sql/environments/xe-21-official/oracle-init/01-setup.sh rename to tests/environments/xe-21-official/oracle-init/01-setup.sh diff --git a/tests/sql/environments/xe-21/.env b/tests/environments/xe-21/.env similarity index 100% rename from tests/sql/environments/xe-21/.env rename to tests/environments/xe-21/.env diff --git a/tests/sql/environments/xe-21/docker-compose.yaml b/tests/environments/xe-21/docker-compose.yaml similarity index 100% rename from tests/sql/environments/xe-21/docker-compose.yaml rename to tests/environments/xe-21/docker-compose.yaml diff --git a/tests/sql/environments/xe-21/oracle-init/01-setup.sh b/tests/environments/xe-21/oracle-init/01-setup.sh similarity index 100% rename from tests/sql/environments/xe-21/oracle-init/01-setup.sh rename to tests/environments/xe-21/oracle-init/01-setup.sh diff --git a/tests/sql/scripts/generate.sh b/tests/sql/scripts/generate.sh index 435f4ec5..3d5fd5be 100755 --- a/tests/sql/scripts/generate.sh +++ b/tests/sql/scripts/generate.sh @@ -12,7 +12,7 @@ # # Prerequisites: # - Oracle accessible via the selected driver (default: docker) -# - For docker driver: containers running via make -C tests/sql/environments/$ORACLE_TARGET up +# - For docker driver: containers running via docker compose up in tests/environments/$ORACLE_TARGET # # Environment variables: # ORACLE_DRIVER — Driver to use: docker (default), local, or rac diff --git a/tests/test_e2e.py b/tests/test_e2e.py index 97ec9a7a..5306478c 100644 --- a/tests/test_e2e.py +++ b/tests/test_e2e.py @@ -29,7 +29,7 @@ def _load_env_file(env_dir): @pytest.fixture(scope="session", autouse=True) def oracle_lifecycle(oracle_env): """Start Oracle environment before tests, stop after.""" - env_dir = os.path.join(TESTS_DIR, "sql", "environments", oracle_env) + env_dir = os.path.join(TESTS_DIR, "environments", oracle_env) _load_env_file(env_dir) up_script = os.path.join(env_dir, "up.sh") From e7d8721143e58fc0646a5ec51619ab59f4169015 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 12:08:07 +0000 Subject: [PATCH 02/11] refactor: consolidate Debezium tests into tests/dbz-twin/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 2 of test framework reorganization. - tests/debezium/ → tests/dbz-twin/ (single-instance twin-test) - tests/environments/rac/debezium/ → tests/dbz-twin/rac/ (RAC twin-test) - tests/environments/rac/debezium/perf/ → tests/dbz-twin/rac/perf/ - tests/sql/scripts/debezium-receiver.py → tests/dbz-twin/ - tests/sql/scripts/compare-debezium.py → tests/dbz-twin/ - tests/sql/scripts/run-debezium.sh → tests/dbz-twin/ Updated all docker-compose volume mounts and script path references. 126/126 redo fixture tests pass. --- tests/LOGMINER-VS-OLR.md | 2 +- tests/{debezium => dbz-twin}/.gitignore | 0 tests/{debezium => dbz-twin}/Makefile | 0 tests/{debezium => dbz-twin}/checkpoint-restart-test.sh | 6 +++--- tests/{sql/scripts => dbz-twin}/compare-debezium.py | 0 .../config/application-logminer.properties | 0 .../config/application-olr.properties | 0 tests/{debezium => dbz-twin}/config/olr-config.json | 0 tests/{sql/scripts => dbz-twin}/debezium-receiver.py | 0 tests/{debezium => dbz-twin}/docker-compose.yaml | 2 +- tests/{debezium => dbz-twin}/oracle-init/01-setup.sh | 0 .../oracle-init/02-debezium-setup.sh | 0 .../rac/debezium => dbz-twin/rac}/.gitignore | 0 .../{environments/rac/debezium => dbz-twin/rac}/Makefile | 0 .../debezium => dbz-twin/rac}/checkpoint-restart-test.sh | 3 ++- .../rac}/config/application-logminer.properties | 0 .../rac}/config/application-olr.properties | 0 .../rac/debezium => dbz-twin/rac}/config/olr-config.json | 0 .../rac/debezium => dbz-twin/rac}/docker-compose.yaml | 8 ++++---- .../debezium => dbz-twin/rac}/perf/Dockerfile.swingbench | 0 .../rac/debezium => dbz-twin/rac}/perf/RESULTS.md | 0 .../rac}/perf/config/application-logminer.properties | 0 .../rac}/perf/config/application-olr.properties | 0 .../debezium => dbz-twin/rac}/perf/config/prometheus.yml | 0 .../rac/debezium => dbz-twin/rac}/perf/dml-generator.sql | 0 .../debezium => dbz-twin/rac}/perf/docker-compose.yaml | 8 ++++---- .../rac/debezium => dbz-twin/rac}/perf/olr-config.json | 0 .../rac/debezium => dbz-twin/rac}/perf/run.sh | 0 .../rac/debezium => dbz-twin/rac}/perf/setup.sql | 0 .../rac/debezium => dbz-twin/rac}/perf/validator.py | 0 tests/{environments/rac/debezium => dbz-twin/rac}/run.sh | 3 ++- .../{environments/rac/debezium => dbz-twin/rac}/setup.sh | 0 .../rac/debezium => dbz-twin/rac}/soak-test.sh | 3 ++- tests/{sql/scripts => dbz-twin}/run-debezium.sh | 4 ++-- 34 files changed, 21 insertions(+), 18 deletions(-) rename tests/{debezium => dbz-twin}/.gitignore (100%) rename tests/{debezium => dbz-twin}/Makefile (100%) rename tests/{debezium => dbz-twin}/checkpoint-restart-test.sh (98%) rename tests/{sql/scripts => dbz-twin}/compare-debezium.py (100%) rename tests/{debezium => dbz-twin}/config/application-logminer.properties (100%) rename tests/{debezium => dbz-twin}/config/application-olr.properties (100%) rename tests/{debezium => dbz-twin}/config/olr-config.json (100%) rename tests/{sql/scripts => dbz-twin}/debezium-receiver.py (100%) rename tests/{debezium => dbz-twin}/docker-compose.yaml (96%) rename tests/{debezium => dbz-twin}/oracle-init/01-setup.sh (100%) rename tests/{debezium => dbz-twin}/oracle-init/02-debezium-setup.sh (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/.gitignore (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/Makefile (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/checkpoint-restart-test.sh (99%) rename tests/{environments/rac/debezium => dbz-twin/rac}/config/application-logminer.properties (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/config/application-olr.properties (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/config/olr-config.json (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/docker-compose.yaml (73%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/Dockerfile.swingbench (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/RESULTS.md (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/config/application-logminer.properties (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/config/application-olr.properties (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/config/prometheus.yml (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/dml-generator.sql (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/docker-compose.yaml (87%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/olr-config.json (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/run.sh (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/setup.sql (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/perf/validator.py (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/run.sh (99%) rename tests/{environments/rac/debezium => dbz-twin/rac}/setup.sh (100%) rename tests/{environments/rac/debezium => dbz-twin/rac}/soak-test.sh (99%) rename tests/{sql/scripts => dbz-twin}/run-debezium.sh (98%) diff --git a/tests/LOGMINER-VS-OLR.md b/tests/LOGMINER-VS-OLR.md index 77d7ef5d..8cf179da 100644 --- a/tests/LOGMINER-VS-OLR.md +++ b/tests/LOGMINER-VS-OLR.md @@ -9,7 +9,7 @@ These differences affect any system that compares or consumes output from both sources — including the test comparison scripts in this repository: - `tests/sql/scripts/compare.py` — fixture generator (raw JSON comparison) -- `tests/sql/scripts/compare-debezium.py` — Debezium twin-test (Kafka Connect envelope comparison) +- `tests/dbz-twin/compare-debezium.py` — Debezium twin-test (Kafka Connect envelope comparison) --- diff --git a/tests/debezium/.gitignore b/tests/dbz-twin/.gitignore similarity index 100% rename from tests/debezium/.gitignore rename to tests/dbz-twin/.gitignore diff --git a/tests/debezium/Makefile b/tests/dbz-twin/Makefile similarity index 100% rename from tests/debezium/Makefile rename to tests/dbz-twin/Makefile diff --git a/tests/debezium/checkpoint-restart-test.sh b/tests/dbz-twin/checkpoint-restart-test.sh similarity index 98% rename from tests/debezium/checkpoint-restart-test.sh rename to tests/dbz-twin/checkpoint-restart-test.sh index a8cddc0a..d609cb2a 100755 --- a/tests/debezium/checkpoint-restart-test.sh +++ b/tests/dbz-twin/checkpoint-restart-test.sh @@ -10,7 +10,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -SCRIPTS_DIR="$(cd "$SCRIPT_DIR/../sql/scripts" && pwd)" +SCRIPTS_DIR="$SCRIPT_DIR" KILL_COUNT="${1:-3}" RECEIVER_URL="http://localhost:8080" @@ -215,13 +215,13 @@ echo "" echo "--- Stage 1: Verify services ---" if ! docker ps --format '{{.Names}}' | grep -q "^${ORACLE_CONTAINER}$"; then - echo "ERROR: Oracle container not running. Run: cd tests/debezium && docker compose up -d oracle" >&2 + echo "ERROR: Oracle container not running. Run: cd tests/dbz-twin && docker compose up -d oracle" >&2 exit 1 fi echo " Oracle: OK" if ! curl -sf "$RECEIVER_URL/health" > /dev/null 2>&1; then - echo "ERROR: Receiver not responding. Run: cd tests/debezium && docker compose up -d receiver" >&2 + echo "ERROR: Receiver not responding. Run: cd tests/dbz-twin && docker compose up -d receiver" >&2 exit 1 fi echo " Receiver: OK" diff --git a/tests/sql/scripts/compare-debezium.py b/tests/dbz-twin/compare-debezium.py similarity index 100% rename from tests/sql/scripts/compare-debezium.py rename to tests/dbz-twin/compare-debezium.py diff --git a/tests/debezium/config/application-logminer.properties b/tests/dbz-twin/config/application-logminer.properties similarity index 100% rename from tests/debezium/config/application-logminer.properties rename to tests/dbz-twin/config/application-logminer.properties diff --git a/tests/debezium/config/application-olr.properties b/tests/dbz-twin/config/application-olr.properties similarity index 100% rename from tests/debezium/config/application-olr.properties rename to tests/dbz-twin/config/application-olr.properties diff --git a/tests/debezium/config/olr-config.json b/tests/dbz-twin/config/olr-config.json similarity index 100% rename from tests/debezium/config/olr-config.json rename to tests/dbz-twin/config/olr-config.json diff --git a/tests/sql/scripts/debezium-receiver.py b/tests/dbz-twin/debezium-receiver.py similarity index 100% rename from tests/sql/scripts/debezium-receiver.py rename to tests/dbz-twin/debezium-receiver.py diff --git a/tests/debezium/docker-compose.yaml b/tests/dbz-twin/docker-compose.yaml similarity index 96% rename from tests/debezium/docker-compose.yaml rename to tests/dbz-twin/docker-compose.yaml index abf2c3a3..8d5607b7 100644 --- a/tests/debezium/docker-compose.yaml +++ b/tests/dbz-twin/docker-compose.yaml @@ -26,7 +26,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../sql/scripts/debezium-receiver.py:/app/debezium-receiver.py:ro + - ./debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output olr: diff --git a/tests/debezium/oracle-init/01-setup.sh b/tests/dbz-twin/oracle-init/01-setup.sh similarity index 100% rename from tests/debezium/oracle-init/01-setup.sh rename to tests/dbz-twin/oracle-init/01-setup.sh diff --git a/tests/debezium/oracle-init/02-debezium-setup.sh b/tests/dbz-twin/oracle-init/02-debezium-setup.sh similarity index 100% rename from tests/debezium/oracle-init/02-debezium-setup.sh rename to tests/dbz-twin/oracle-init/02-debezium-setup.sh diff --git a/tests/environments/rac/debezium/.gitignore b/tests/dbz-twin/rac/.gitignore similarity index 100% rename from tests/environments/rac/debezium/.gitignore rename to tests/dbz-twin/rac/.gitignore diff --git a/tests/environments/rac/debezium/Makefile b/tests/dbz-twin/rac/Makefile similarity index 100% rename from tests/environments/rac/debezium/Makefile rename to tests/dbz-twin/rac/Makefile diff --git a/tests/environments/rac/debezium/checkpoint-restart-test.sh b/tests/dbz-twin/rac/checkpoint-restart-test.sh similarity index 99% rename from tests/environments/rac/debezium/checkpoint-restart-test.sh rename to tests/dbz-twin/rac/checkpoint-restart-test.sh index 04b5da76..8a8045b8 100755 --- a/tests/environments/rac/debezium/checkpoint-restart-test.sh +++ b/tests/dbz-twin/rac/checkpoint-restart-test.sh @@ -24,6 +24,7 @@ RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" KILL_COUNT="${1:-3}" @@ -499,7 +500,7 @@ with open(sys.argv[2], 'w') as f: f.write(json.dumps(r) + '\n') " "$OLR_FILE" "$WORK_DIR/olr-sorted.jsonl" - if python3 "$SCRIPTS_DIR/compare-debezium.py" "$WORK_DIR/logminer-sorted.jsonl" "$WORK_DIR/olr-sorted.jsonl"; then + if python3 "$DBZ_TWIN_DIR/compare-debezium.py" "$WORK_DIR/logminer-sorted.jsonl" "$WORK_DIR/olr-sorted.jsonl"; then echo " Data accuracy: PASS" else echo " Data accuracy: FAIL" diff --git a/tests/environments/rac/debezium/config/application-logminer.properties b/tests/dbz-twin/rac/config/application-logminer.properties similarity index 100% rename from tests/environments/rac/debezium/config/application-logminer.properties rename to tests/dbz-twin/rac/config/application-logminer.properties diff --git a/tests/environments/rac/debezium/config/application-olr.properties b/tests/dbz-twin/rac/config/application-olr.properties similarity index 100% rename from tests/environments/rac/debezium/config/application-olr.properties rename to tests/dbz-twin/rac/config/application-olr.properties diff --git a/tests/environments/rac/debezium/config/olr-config.json b/tests/dbz-twin/rac/config/olr-config.json similarity index 100% rename from tests/environments/rac/debezium/config/olr-config.json rename to tests/dbz-twin/rac/config/olr-config.json diff --git a/tests/environments/rac/debezium/docker-compose.yaml b/tests/dbz-twin/rac/docker-compose.yaml similarity index 73% rename from tests/environments/rac/debezium/docker-compose.yaml rename to tests/dbz-twin/rac/docker-compose.yaml index d13ec3b1..8706f59f 100644 --- a/tests/environments/rac/debezium/docker-compose.yaml +++ b/tests/dbz-twin/rac/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../../sql/scripts/debezium-receiver.py:/app/debezium-receiver.py:ro + - ../../debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data volumes: diff --git a/tests/environments/rac/debezium/perf/Dockerfile.swingbench b/tests/dbz-twin/rac/perf/Dockerfile.swingbench similarity index 100% rename from tests/environments/rac/debezium/perf/Dockerfile.swingbench rename to tests/dbz-twin/rac/perf/Dockerfile.swingbench diff --git a/tests/environments/rac/debezium/perf/RESULTS.md b/tests/dbz-twin/rac/perf/RESULTS.md similarity index 100% rename from tests/environments/rac/debezium/perf/RESULTS.md rename to tests/dbz-twin/rac/perf/RESULTS.md diff --git a/tests/environments/rac/debezium/perf/config/application-logminer.properties b/tests/dbz-twin/rac/perf/config/application-logminer.properties similarity index 100% rename from tests/environments/rac/debezium/perf/config/application-logminer.properties rename to tests/dbz-twin/rac/perf/config/application-logminer.properties diff --git a/tests/environments/rac/debezium/perf/config/application-olr.properties b/tests/dbz-twin/rac/perf/config/application-olr.properties similarity index 100% rename from tests/environments/rac/debezium/perf/config/application-olr.properties rename to tests/dbz-twin/rac/perf/config/application-olr.properties diff --git a/tests/environments/rac/debezium/perf/config/prometheus.yml b/tests/dbz-twin/rac/perf/config/prometheus.yml similarity index 100% rename from tests/environments/rac/debezium/perf/config/prometheus.yml rename to tests/dbz-twin/rac/perf/config/prometheus.yml diff --git a/tests/environments/rac/debezium/perf/dml-generator.sql b/tests/dbz-twin/rac/perf/dml-generator.sql similarity index 100% rename from tests/environments/rac/debezium/perf/dml-generator.sql rename to tests/dbz-twin/rac/perf/dml-generator.sql diff --git a/tests/environments/rac/debezium/perf/docker-compose.yaml b/tests/dbz-twin/rac/perf/docker-compose.yaml similarity index 87% rename from tests/environments/rac/debezium/perf/docker-compose.yaml rename to tests/dbz-twin/rac/perf/docker-compose.yaml index 4e780a7e..16dc2787 100644 --- a/tests/environments/rac/debezium/perf/docker-compose.yaml +++ b/tests/dbz-twin/rac/perf/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../../../sql/scripts/debezium-receiver.py:/app/debezium-receiver.py:ro + - ../../../debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../../../debezium/lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../../../debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data swingbench: diff --git a/tests/environments/rac/debezium/perf/olr-config.json b/tests/dbz-twin/rac/perf/olr-config.json similarity index 100% rename from tests/environments/rac/debezium/perf/olr-config.json rename to tests/dbz-twin/rac/perf/olr-config.json diff --git a/tests/environments/rac/debezium/perf/run.sh b/tests/dbz-twin/rac/perf/run.sh similarity index 100% rename from tests/environments/rac/debezium/perf/run.sh rename to tests/dbz-twin/rac/perf/run.sh diff --git a/tests/environments/rac/debezium/perf/setup.sql b/tests/dbz-twin/rac/perf/setup.sql similarity index 100% rename from tests/environments/rac/debezium/perf/setup.sql rename to tests/dbz-twin/rac/perf/setup.sql diff --git a/tests/environments/rac/debezium/perf/validator.py b/tests/dbz-twin/rac/perf/validator.py similarity index 100% rename from tests/environments/rac/debezium/perf/validator.py rename to tests/dbz-twin/rac/perf/validator.py diff --git a/tests/environments/rac/debezium/run.sh b/tests/dbz-twin/rac/run.sh similarity index 99% rename from tests/environments/rac/debezium/run.sh rename to tests/dbz-twin/rac/run.sh index 6e895d89..0d897445 100755 --- a/tests/environments/rac/debezium/run.sh +++ b/tests/dbz-twin/rac/run.sh @@ -21,6 +21,7 @@ RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" SCENARIO="${1:?Usage: $0 }" @@ -438,7 +439,7 @@ if [[ ! -s "$OLR_FILE" ]]; then exit 1 fi -if python3 "$SCRIPTS_DIR/compare-debezium.py" "$LM_FILE" "$OLR_FILE"; then +if python3 "$DBZ_TWIN_DIR/compare-debezium.py" "$LM_FILE" "$OLR_FILE"; then echo "" echo "=== PASS: Debezium RAC twin-test '$SCENARIO' ===" else diff --git a/tests/environments/rac/debezium/setup.sh b/tests/dbz-twin/rac/setup.sh similarity index 100% rename from tests/environments/rac/debezium/setup.sh rename to tests/dbz-twin/rac/setup.sh diff --git a/tests/environments/rac/debezium/soak-test.sh b/tests/dbz-twin/rac/soak-test.sh similarity index 99% rename from tests/environments/rac/debezium/soak-test.sh rename to tests/dbz-twin/rac/soak-test.sh index 06a0c2c0..ffeb088a 100755 --- a/tests/environments/rac/debezium/soak-test.sh +++ b/tests/dbz-twin/rac/soak-test.sh @@ -23,6 +23,7 @@ RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" DURATION_MINUTES="${1:-30}" DURATION_SECONDS=$(( DURATION_MINUTES * 60 )) @@ -556,7 +557,7 @@ if [[ ! -s "$LM_FILE" ]]; then elif [[ ! -s "$OLR_FILE" ]]; then echo "ERROR: OLR output is empty: $OLR_FILE" >&2 COMPARE_RESULT=1 -elif python3 "$SCRIPTS_DIR/compare-debezium.py" "$LM_FILE" "$OLR_FILE"; then +elif python3 "$DBZ_TWIN_DIR/compare-debezium.py" "$LM_FILE" "$OLR_FILE"; then echo " Data accuracy: PASS" else echo " Data accuracy: FAIL" diff --git a/tests/sql/scripts/run-debezium.sh b/tests/dbz-twin/run-debezium.sh similarity index 98% rename from tests/sql/scripts/run-debezium.sh rename to tests/dbz-twin/run-debezium.sh index e4721dd2..895182f4 100755 --- a/tests/sql/scripts/run-debezium.sh +++ b/tests/dbz-twin/run-debezium.sh @@ -9,7 +9,7 @@ # Example: ./run-debezium.sh basic-crud # # Prerequisites: -# - Services running: make -C tests/debezium up +# - Services running: make -C tests/dbz-twin up # - OLR image built: make build set -euo pipefail @@ -58,7 +58,7 @@ echo "--- Stage 1: Verify services ---" # Check receiver if ! curl -sf "$RECEIVER_URL/health" > /dev/null 2>&1; then echo "ERROR: Receiver not responding at $RECEIVER_URL" >&2 - echo "Run: make -C tests/debezium up" >&2 + echo "Run: make -C tests/dbz-twin up" >&2 exit 1 fi echo " Receiver: OK" From 9678ba38de4ee30c015cde7dc9a08725d91baba4 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 12:15:12 +0000 Subject: [PATCH 03/11] refactor: move pytest files to their test directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 3 of test framework reorganization. - tests/test_e2e.py → tests/sql/test_e2e.py - tests/test_fixtures.py → tests/fixtures/test_fixtures.py - pytest.ini: add testpaths = sql fixtures 126/126 redo fixture tests pass. --- tests/{ => fixtures}/test_fixtures.py | 3 ++- tests/pytest.ini | 1 + tests/{ => sql}/test_e2e.py | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) rename tests/{ => fixtures}/test_fixtures.py (98%) rename tests/{ => sql}/test_e2e.py (94%) diff --git a/tests/test_fixtures.py b/tests/fixtures/test_fixtures.py similarity index 98% rename from tests/test_fixtures.py rename to tests/fixtures/test_fixtures.py index 3512bdf3..6c16b101 100644 --- a/tests/test_fixtures.py +++ b/tests/fixtures/test_fixtures.py @@ -14,7 +14,8 @@ from conftest import discover_fixtures -TESTS_DIR = os.path.dirname(os.path.abspath(__file__)) +FIXTURES_DIR = os.path.dirname(os.path.abspath(__file__)) +TESTS_DIR = os.path.dirname(FIXTURES_DIR) OLR_IMAGE = os.environ.get("OLR_IMAGE", "olr-dev:latest") diff --git a/tests/pytest.ini b/tests/pytest.ini index b3fb49da..b3c473fa 100644 --- a/tests/pytest.ini +++ b/tests/pytest.ini @@ -1,4 +1,5 @@ [pytest] +testpaths = sql fixtures markers = rac: RAC multi-thread scenarios ddl: DDL schema change scenarios diff --git a/tests/test_e2e.py b/tests/sql/test_e2e.py similarity index 94% rename from tests/test_e2e.py rename to tests/sql/test_e2e.py index 5306478c..01dab332 100644 --- a/tests/test_e2e.py +++ b/tests/sql/test_e2e.py @@ -7,8 +7,9 @@ from conftest import discover_scenarios -TESTS_DIR = os.path.dirname(os.path.abspath(__file__)) -GENERATE_SH = os.path.join(TESTS_DIR, "sql", "scripts", "generate.sh") +SQL_DIR = os.path.dirname(os.path.abspath(__file__)) +TESTS_DIR = os.path.dirname(SQL_DIR) +GENERATE_SH = os.path.join(SQL_DIR, "scripts", "generate.sh") def _load_env_file(env_dir): From a5070979ec356365ae4c56530ef2bd4b6288fb5a Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 12:53:12 +0000 Subject: [PATCH 04/11] fix: update remaining paths missed in environment move MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker-compose volume mounts: 4 levels up → 3 levels up - generate.sh: ENV_DIR uses TESTS_DIR instead of SQL_DIR free-23: 36 passed, xe-21: 36 passed. --- tests/environments/enterprise-19/docker-compose.yaml | 8 ++++---- tests/environments/enterprise-19/oracle-init/01-setup.sh | 5 +++++ tests/environments/free-23/docker-compose.yaml | 2 +- tests/environments/xe-21-official/docker-compose.yaml | 2 +- tests/environments/xe-21/docker-compose.yaml | 2 +- tests/sql/scripts/generate.sh | 2 +- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/environments/enterprise-19/docker-compose.yaml b/tests/environments/enterprise-19/docker-compose.yaml index 2a53017c..dcfa05b5 100644 --- a/tests/environments/enterprise-19/docker-compose.yaml +++ b/tests/environments/enterprise-19/docker-compose.yaml @@ -4,7 +4,7 @@ services: entrypoint: [] command: ["sleep", "infinity"] volumes: - - ../../../..:/opt/OpenLogReplicator-local + - ../../..:/opt/OpenLogReplicator-local oracle: image: container-registry.oracle.com/database/enterprise:19.3.0.0 @@ -20,11 +20,11 @@ services: - ./oracle-init:/opt/oracle/scripts/startup - oradata:/opt/oracle/oradata healthcheck: - test: ["CMD-SHELL", "echo 'SELECT 1 FROM dual;' | sqlplus -S \"${DB_CONN}\" | grep -q 1"] + test: ["CMD-SHELL", "echo 'SELECT 42 FROM dual;' | sqlplus -S olr_test/olr_test@//localhost:1521/ORCLPDB1 | grep -q 42"] interval: 30s - timeout: 10s + timeout: 30s retries: 60 - start_period: 600s + start_period: 900s volumes: oradata: diff --git a/tests/environments/enterprise-19/oracle-init/01-setup.sh b/tests/environments/enterprise-19/oracle-init/01-setup.sh index 534e342a..b2e9fdd6 100755 --- a/tests/environments/enterprise-19/oracle-init/01-setup.sh +++ b/tests/environments/enterprise-19/oracle-init/01-setup.sh @@ -6,6 +6,11 @@ set -e +# Register PDB service with listener (needed for external connections) +sqlplus -S / as sysdba <<'SQL' +ALTER SYSTEM REGISTER; +SQL + # Enable supplemental logging (idempotent) sqlplus -S / as sysdba <<'SQL' WHENEVER SQLERROR EXIT SQL.SQLCODE diff --git a/tests/environments/free-23/docker-compose.yaml b/tests/environments/free-23/docker-compose.yaml index 553a04d9..4a1601e2 100644 --- a/tests/environments/free-23/docker-compose.yaml +++ b/tests/environments/free-23/docker-compose.yaml @@ -4,7 +4,7 @@ services: entrypoint: [] command: ["sleep", "infinity"] volumes: - - ../../../..:/opt/OpenLogReplicator-local + - ../../..:/opt/OpenLogReplicator-local oracle: image: gvenzl/oracle-free:23-slim-faststart diff --git a/tests/environments/xe-21-official/docker-compose.yaml b/tests/environments/xe-21-official/docker-compose.yaml index aa572239..8284b0c0 100644 --- a/tests/environments/xe-21-official/docker-compose.yaml +++ b/tests/environments/xe-21-official/docker-compose.yaml @@ -4,7 +4,7 @@ services: entrypoint: [] command: ["sleep", "infinity"] volumes: - - ../../../..:/opt/OpenLogReplicator-local + - ../../..:/opt/OpenLogReplicator-local oracle: image: container-registry.oracle.com/database/express:21.3.0-xe diff --git a/tests/environments/xe-21/docker-compose.yaml b/tests/environments/xe-21/docker-compose.yaml index 7d495e6c..7f93a017 100644 --- a/tests/environments/xe-21/docker-compose.yaml +++ b/tests/environments/xe-21/docker-compose.yaml @@ -4,7 +4,7 @@ services: entrypoint: [] command: ["sleep", "infinity"] volumes: - - ../../../..:/opt/OpenLogReplicator-local + - ../../..:/opt/OpenLogReplicator-local oracle: image: gvenzl/oracle-xe:21.3.0-slim-faststart diff --git a/tests/sql/scripts/generate.sh b/tests/sql/scripts/generate.sh index 3d5fd5be..9d2fc4df 100755 --- a/tests/sql/scripts/generate.sh +++ b/tests/sql/scripts/generate.sh @@ -34,7 +34,7 @@ PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" # Oracle target environment (used by docker driver) ORACLE_TARGET="${ORACLE_TARGET:-free-23}" -ENV_DIR="$SQL_DIR/environments/$ORACLE_TARGET" +ENV_DIR="$TESTS_DIR/environments/$ORACLE_TARGET" # Source environment .env file if present (provides DB_CONN, PDB_NAME, etc.) if [[ -f "$ENV_DIR/.env" ]]; then From ef70e00c53c9f9a76bf0d361d0c5ffa13cff240b Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 14:29:20 +0000 Subject: [PATCH 05/11] fix: correct paths in dbz-twin/rac scripts after refactor RAC_ENV_DIR, volume mounts, and PROJECT_ROOT calculations were wrong after moving directories in the refactoring. --- tests/dbz-twin/rac/checkpoint-restart-test.sh | 6 +++--- tests/dbz-twin/rac/docker-compose.yaml | 8 ++++---- tests/dbz-twin/rac/perf/docker-compose.yaml | 8 ++++---- tests/dbz-twin/rac/perf/run.sh | 6 ++++-- tests/dbz-twin/rac/run.sh | 6 +++--- tests/dbz-twin/rac/setup.sh | 2 +- tests/dbz-twin/rac/soak-test.sh | 6 +++--- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/tests/dbz-twin/rac/checkpoint-restart-test.sh b/tests/dbz-twin/rac/checkpoint-restart-test.sh index 8a8045b8..f1844c04 100755 --- a/tests/dbz-twin/rac/checkpoint-restart-test.sh +++ b/tests/dbz-twin/rac/checkpoint-restart-test.sh @@ -20,11 +20,11 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" -DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +RAC_ENV_DIR="$TESTS_DIR/environments/rac" KILL_COUNT="${1:-3}" diff --git a/tests/dbz-twin/rac/docker-compose.yaml b/tests/dbz-twin/rac/docker-compose.yaml index 8706f59f..c085be73 100644 --- a/tests/dbz-twin/rac/docker-compose.yaml +++ b/tests/dbz-twin/rac/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../debezium-receiver.py:/app/debezium-receiver.py:ro + - ../debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data volumes: diff --git a/tests/dbz-twin/rac/perf/docker-compose.yaml b/tests/dbz-twin/rac/perf/docker-compose.yaml index 16dc2787..beec67f2 100644 --- a/tests/dbz-twin/rac/perf/docker-compose.yaml +++ b/tests/dbz-twin/rac/perf/docker-compose.yaml @@ -7,7 +7,7 @@ services: environment: OUTPUT_DIR: /app/output volumes: - - ../../../debezium-receiver.py:/app/debezium-receiver.py:ro + - ../../debezium-receiver.py:/app/debezium-receiver.py:ro - ./output:/app/output dbz-logminer: @@ -19,7 +19,7 @@ services: condition: service_started volumes: - ./config/application-logminer.properties:/debezium/config/application.properties:ro - - ../../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - dbz-logminer-data:/debezium/data dbz-olr: @@ -32,8 +32,8 @@ services: condition: service_started volumes: - ./config/application-olr.properties:/debezium/config/application.properties:ro - - ../../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro - - ../../../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro + - ../../lib/ojdbc8.jar:/debezium/lib/ojdbc8.jar:ro + - ../../lib/debezium-connector-oracle-3.5.0.Beta1.jar:/debezium/lib/debezium-connector-oracle-3.5.0.Beta1.jar:ro - dbz-olr-data:/debezium/data swingbench: diff --git a/tests/dbz-twin/rac/perf/run.sh b/tests/dbz-twin/rac/perf/run.sh index 52a133fb..82347901 100755 --- a/tests/dbz-twin/rac/perf/run.sh +++ b/tests/dbz-twin/rac/perf/run.sh @@ -11,8 +11,10 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -DEBEZIUM_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -RAC_ENV_DIR="$(cd "$DEBEZIUM_DIR/.." && pwd)" +DBZ_RAC_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +DBZ_TWIN_DIR="$(cd "$DBZ_RAC_DIR/.." && pwd)" +TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" +RAC_ENV_DIR="$TESTS_DIR/environments/rac" source "$RAC_ENV_DIR/vm-env.sh" diff --git a/tests/dbz-twin/rac/run.sh b/tests/dbz-twin/rac/run.sh index 0d897445..5be59b2a 100755 --- a/tests/dbz-twin/rac/run.sh +++ b/tests/dbz-twin/rac/run.sh @@ -17,11 +17,11 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" -DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +RAC_ENV_DIR="$TESTS_DIR/environments/rac" SCENARIO="${1:?Usage: $0 }" diff --git a/tests/dbz-twin/rac/setup.sh b/tests/dbz-twin/rac/setup.sh index b6847ec9..fef8cd51 100755 --- a/tests/dbz-twin/rac/setup.sh +++ b/tests/dbz-twin/rac/setup.sh @@ -8,7 +8,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" VM_HOST="${VM_HOST:-192.168.122.248}" VM_KEY="${VM_KEY:-$PROJECT_ROOT/oracle-rac/assets/vm-key}" diff --git a/tests/dbz-twin/rac/soak-test.sh b/tests/dbz-twin/rac/soak-test.sh index ffeb088a..3bab5578 100755 --- a/tests/dbz-twin/rac/soak-test.sh +++ b/tests/dbz-twin/rac/soak-test.sh @@ -19,11 +19,11 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -RAC_ENV_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -TESTS_DIR="$(cd "$RAC_ENV_DIR/../.." && pwd)" +DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" SCRIPTS_DIR="$TESTS_DIR/sql/scripts" -DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +RAC_ENV_DIR="$TESTS_DIR/environments/rac" DURATION_MINUTES="${1:-30}" DURATION_SECONDS=$(( DURATION_MINUTES * 60 )) From 36a0b03af0ae29c5e37fdf204d87d94bc8c761b7 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 14:53:02 +0000 Subject: [PATCH 06/11] fix: add RAC network and SCAN DNS to OLR container startup OLR container on VM needs --network rac_pub1_nw to reach SCAN VIPs and --add-host to resolve racnodepc1-scan hostname. Also switch run.sh to use vm-env.sh for auto-detected VM IP. --- tests/dbz-twin/rac/checkpoint-restart-test.sh | 6 ++++++ tests/dbz-twin/rac/perf/run.sh | 5 +++++ tests/dbz-twin/rac/run.sh | 13 +++++++------ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/tests/dbz-twin/rac/checkpoint-restart-test.sh b/tests/dbz-twin/rac/checkpoint-restart-test.sh index f1844c04..c2284cab 100755 --- a/tests/dbz-twin/rac/checkpoint-restart-test.sh +++ b/tests/dbz-twin/rac/checkpoint-restart-test.sh @@ -95,8 +95,14 @@ _start_olr() { # Ensure no leftover container ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ "podman rm -f $OLR_CONTAINER 2>/dev/null; true" + # OLR needs RAC public network to reach SCAN VIPs and redo log shares + local SCAN_IP + SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ + "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ + --network rac_pub1_nw \ + --add-host racnodepc1-scan:${SCAN_IP} \ -p 5000:5000 \ -v /root/olr-debezium/config:/config:ro,Z \ -v /root/olr-debezium/checkpoint:/olr-data/checkpoint:Z \ diff --git a/tests/dbz-twin/rac/perf/run.sh b/tests/dbz-twin/rac/perf/run.sh index 82347901..dcd6d101 100755 --- a/tests/dbz-twin/rac/perf/run.sh +++ b/tests/dbz-twin/rac/perf/run.sh @@ -103,8 +103,13 @@ for i in $(seq 1 90); do done # Start OLR on VM, then adapter (adapter must connect before OLR processes) +# OLR needs RAC public network to reach SCAN VIPs and redo log shares +SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ + "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ + --network rac_pub1_nw \ + --add-host racnodepc1-scan:${SCAN_IP} \ -p 5000:5000 \ -v /root/olr-debezium/config:/config:ro,Z \ -v /root/olr-debezium/checkpoint:/olr-data/checkpoint:Z \ diff --git a/tests/dbz-twin/rac/run.sh b/tests/dbz-twin/rac/run.sh index 5be59b2a..c013b73e 100755 --- a/tests/dbz-twin/rac/run.sh +++ b/tests/dbz-twin/rac/run.sh @@ -25,10 +25,8 @@ RAC_ENV_DIR="$TESTS_DIR/environments/rac" SCENARIO="${1:?Usage: $0 }" -# ---- RAC configuration ---- -VM_HOST="${VM_HOST:-192.168.122.248}" -VM_KEY="${VM_KEY:-$PROJECT_ROOT/oracle-rac/assets/vm-key}" -VM_USER="${VM_USER:-root}" +# ---- RAC configuration (auto-detect VM IP) ---- +source "$RAC_ENV_DIR/vm-env.sh" OLR_IMAGE="${OLR_IMAGE:-docker.io/library/olr-dev:latest}" RAC_NODE1="${RAC_NODE1:-racnodep1}" RAC_NODE2="${RAC_NODE2:-racnodep2}" @@ -41,8 +39,6 @@ OLR_CONTAINER="olr-debezium" RECEIVER_URL="${RECEIVER_URL:-http://localhost:8080}" POLL_TIMEOUT="${POLL_TIMEOUT:-120}" -_SSH_OPTS="-i $VM_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR" - # ---- SSH helpers (same pattern as rac.sh driver) ---- _vm_sqlplus() { local node="$1" sid="$2" conn="$3" sql_file="$4" @@ -278,8 +274,13 @@ ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "rm -rf /root/olr-debezium/checkpoint/* & # Start OLR on VM with network writer echo " Starting OLR on RAC VM..." +# OLR needs RAC public network to reach SCAN VIPs and redo log shares +SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ + "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ + --network rac_pub1_nw \ + --add-host racnodepc1-scan:${SCAN_IP} \ -p 5000:5000 \ -v /root/olr-debezium/config:/config:ro,Z \ -v /root/olr-debezium/checkpoint:/olr-data/checkpoint:Z \ From e280f49cc4d78bde4662c6953d78078f2fd4d0d9 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Thu, 26 Mar 2026 16:05:32 +0000 Subject: [PATCH 07/11] fix: add RAC network and vm-env.sh to soak-test.sh Same OLR container network fix as other RAC scripts, plus switch from hardcoded VM_HOST to auto-detected via vm-env.sh. --- tests/dbz-twin/rac/soak-test.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/dbz-twin/rac/soak-test.sh b/tests/dbz-twin/rac/soak-test.sh index 3bab5578..e8038ea6 100755 --- a/tests/dbz-twin/rac/soak-test.sh +++ b/tests/dbz-twin/rac/soak-test.sh @@ -28,10 +28,8 @@ RAC_ENV_DIR="$TESTS_DIR/environments/rac" DURATION_MINUTES="${1:-30}" DURATION_SECONDS=$(( DURATION_MINUTES * 60 )) -# ---- RAC configuration ---- -VM_HOST="${VM_HOST:-192.168.122.248}" -VM_KEY="${VM_KEY:-$PROJECT_ROOT/oracle-rac/assets/vm-key}" -VM_USER="${VM_USER:-root}" +# ---- RAC configuration (auto-detect VM IP) ---- +source "$RAC_ENV_DIR/vm-env.sh" OLR_IMAGE="${OLR_IMAGE:-docker.io/library/olr-dev:latest}" RAC_NODE1="${RAC_NODE1:-racnodep1}" RAC_NODE2="${RAC_NODE2:-racnodep2}" @@ -44,8 +42,6 @@ OLR_CONTAINER="olr-debezium" RECEIVER_URL="${RECEIVER_URL:-http://localhost:8080}" POLL_TIMEOUT="${POLL_TIMEOUT:-180}" -_SSH_OPTS="-i $VM_KEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR" - # ---- SSH helpers ---- _vm_sqlplus() { local node="$1" sid="$2" conn="$3" sql_file="$4" @@ -192,10 +188,14 @@ ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "mkdir -p /root/olr-debezium/config /root scp $_SSH_OPTS "$SCRIPT_DIR/config/olr-config.json" "${VM_USER}@${VM_HOST}:/root/olr-debezium/config/" ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "rm -rf /root/olr-debezium/checkpoint/* && chown -R 1000:54335 /root/olr-debezium/checkpoint" -# Start OLR +# Start OLR — needs RAC public network to reach SCAN VIPs echo " Starting OLR on RAC VM..." +SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ + "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ + --network rac_pub1_nw \ + --add-host racnodepc1-scan:${SCAN_IP} \ -p 5000:5000 \ -v /root/olr-debezium/config:/config:ro,Z \ -v /root/olr-debezium/checkpoint:/olr-data/checkpoint:Z \ From fe70e69b26ac16cbd3b4d2bc23b38546003fc523 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Fri, 27 Mar 2026 13:49:37 +0000 Subject: [PATCH 08/11] fix: address CodeRabbit review findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix pytest path in AGENTS.md: test_e2e.py → sql/test_e2e.py - Add SCAN_IP validation before podman --add-host in all RAC scripts - Fix stale path in setup.sh comment --- AGENTS.md | 2 +- tests/dbz-twin/rac/checkpoint-restart-test.sh | 4 ++++ tests/dbz-twin/rac/perf/run.sh | 4 ++++ tests/dbz-twin/rac/run.sh | 4 ++++ tests/dbz-twin/rac/setup.sh | 2 +- tests/dbz-twin/rac/soak-test.sh | 4 ++++ 6 files changed, 18 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e7c4f557..0e952ecb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,7 +25,7 @@ BuildKit cache mounts. Only the OLR compilation layer rebuilds on source changes make test-redo # Run SQL tests against live Oracle -cd tests && pytest test_e2e.py -v --oracle-env=free-23 +cd tests && pytest sql/test_e2e.py -v --oracle-env=free-23 # Archive generated fixtures for committing make fixtures diff --git a/tests/dbz-twin/rac/checkpoint-restart-test.sh b/tests/dbz-twin/rac/checkpoint-restart-test.sh index c2284cab..01759947 100755 --- a/tests/dbz-twin/rac/checkpoint-restart-test.sh +++ b/tests/dbz-twin/rac/checkpoint-restart-test.sh @@ -99,6 +99,10 @@ _start_olr() { local SCAN_IP SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) + if [[ -z "$SCAN_IP" ]]; then + echo "ERROR: Failed to resolve racnodepc1-scan IP from RAC VM" >&2 + return 1 + fi ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ --network rac_pub1_nw \ diff --git a/tests/dbz-twin/rac/perf/run.sh b/tests/dbz-twin/rac/perf/run.sh index dcd6d101..ed6004f9 100755 --- a/tests/dbz-twin/rac/perf/run.sh +++ b/tests/dbz-twin/rac/perf/run.sh @@ -106,6 +106,10 @@ done # OLR needs RAC public network to reach SCAN VIPs and redo log shares SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) +if [[ -z "$SCAN_IP" ]]; then + echo "ERROR: Failed to resolve racnodepc1-scan IP from RAC VM" >&2 + exit 1 +fi ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ --network rac_pub1_nw \ diff --git a/tests/dbz-twin/rac/run.sh b/tests/dbz-twin/rac/run.sh index c013b73e..33dc78b7 100755 --- a/tests/dbz-twin/rac/run.sh +++ b/tests/dbz-twin/rac/run.sh @@ -277,6 +277,10 @@ echo " Starting OLR on RAC VM..." # OLR needs RAC public network to reach SCAN VIPs and redo log shares SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) +if [[ -z "$SCAN_IP" ]]; then + echo "ERROR: Failed to resolve racnodepc1-scan IP from RAC VM" >&2 + exit 1 +fi ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ --network rac_pub1_nw \ diff --git a/tests/dbz-twin/rac/setup.sh b/tests/dbz-twin/rac/setup.sh index fef8cd51..c449e46b 100755 --- a/tests/dbz-twin/rac/setup.sh +++ b/tests/dbz-twin/rac/setup.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # One-time setup: create c##dbzuser + grants + sentinel table on RAC. # Run from the project root: -# tests/environments/rac/debezium/setup.sh +# tests/dbz-twin/rac/setup.sh # # Prerequisites: RAC VM running with containers started. diff --git a/tests/dbz-twin/rac/soak-test.sh b/tests/dbz-twin/rac/soak-test.sh index e8038ea6..89d29877 100755 --- a/tests/dbz-twin/rac/soak-test.sh +++ b/tests/dbz-twin/rac/soak-test.sh @@ -192,6 +192,10 @@ ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "rm -rf /root/olr-debezium/checkpoint/* & echo " Starting OLR on RAC VM..." SCAN_IP=$(ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" \ "podman exec racnodep1 getent hosts racnodepc1-scan 2>/dev/null | head -1 | awk '{print \$1}'" 2>/dev/null) +if [[ -z "$SCAN_IP" ]]; then + echo "ERROR: Failed to resolve racnodepc1-scan IP from RAC VM" >&2 + exit 1 +fi ssh $_SSH_OPTS "${VM_USER}@${VM_HOST}" "podman run -d --name $OLR_CONTAINER \ --user 1000:54335 \ --network rac_pub1_nw \ From a6ad6dfe06998a8cbdb1a232675d842e76840154 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Fri, 27 Mar 2026 15:42:12 +0000 Subject: [PATCH 09/11] fix: address remaining CodeRabbit review findings - Add SQLERROR/OSERROR guards to enterprise-19 ALTER SYSTEM REGISTER - Update README directory tree to reflect new layout --- tests/README.md | 17 ++++++++++------- .../enterprise-19/oracle-init/01-setup.sh | 3 +++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/README.md b/tests/README.md index 136144ff..8551973e 100644 --- a/tests/README.md +++ b/tests/README.md @@ -114,11 +114,17 @@ archives are gitignored (except `example-*` bootstrapping fixtures). ``` tests/ conftest.py # Fixture discovery + SQL tag → pytest marker mapping - test_fixtures.py # Redo log regression tests - test_e2e.py # End-to-end tests (requires live Oracle) pytest.ini # Marker registration + environments/ # Oracle container environments + free-23/ # Oracle Free 23c + xe-21/ # Oracle XE 21c + xe-21-official/ # Oracle XE 21c (official image) + enterprise-19/ # Oracle Enterprise 19c + rac/ # Oracle RAC (VM-based) + fixtures/ # Local fixture cache (mostly gitignored) + test_fixtures.py # Redo log regression tests .tar.gz # Compressed fixture (gitignored, generated by `make fixtures`) / # Extracted (gitignored) redo/*.dbf @@ -126,15 +132,12 @@ tests/ expected/output.json sql/ # SQL test infrastructure (requires live Oracle) + test_e2e.py # End-to-end tests (requires live Oracle) inputs/ # SQL scenarios basic-crud.sql # Single-file format example/ # Split format (setup.sql + test.sql) setup.sql test.sql - environments/ # Oracle container environments - free-23/ # Oracle Free 23c - xe-21/ # Oracle XE 21c - xe-21-official/ # Oracle XE 21c (official image) scripts/ generate.sh # Generate + validate one fixture compare.py # OLR vs LogMiner comparison @@ -146,7 +149,7 @@ tests/ rac.sh # RAC: SSH + podman exec to RAC VM generated/ # Locally generated fixtures (gitignored) - debezium/ # Debezium twin-test (OLR vs LogMiner adapters) + dbz-twin/ # Debezium twin-test (OLR vs LogMiner adapters) ``` ## Input Formats diff --git a/tests/environments/enterprise-19/oracle-init/01-setup.sh b/tests/environments/enterprise-19/oracle-init/01-setup.sh index b2e9fdd6..f5c1aac5 100755 --- a/tests/environments/enterprise-19/oracle-init/01-setup.sh +++ b/tests/environments/enterprise-19/oracle-init/01-setup.sh @@ -8,7 +8,10 @@ set -e # Register PDB service with listener (needed for external connections) sqlplus -S / as sysdba <<'SQL' +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT FAILURE ALTER SYSTEM REGISTER; +EXIT SQL # Enable supplemental logging (idempotent) From 6d47e302b810b6d3da92892b7420435e21ee884e Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Fri, 27 Mar 2026 21:38:57 +0000 Subject: [PATCH 10/11] fix: update test_fixtures.py path in Makefile after move --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a106e1d6..f5a76ead 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ tests/fixtures/%: tests/fixtures/%.tar.gz extract-fixtures: $(FIXTURE_DIRS) ## Extract fixture archives test-redo: extract-fixtures ## Run redo log regression tests (no Oracle needed) - cd tests && OLR_IMAGE=$(OLR_IMAGE) pytest test_fixtures.py -v --tb=short $(PYTEST_ARGS) + cd tests && OLR_IMAGE=$(OLR_IMAGE) pytest fixtures/test_fixtures.py -v --tb=short $(PYTEST_ARGS) fixtures: ## Archive generated fixtures as tar.gz for committing @for dir in tests/sql/generated/*/; do \ From 28725e7463bae3cfad5d67414c4c2ee37c0f06fd Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Fri, 27 Mar 2026 21:41:49 +0000 Subject: [PATCH 11/11] chore: remove unused PROJECT_ROOT and SCRIPTS_DIR variables --- tests/dbz-twin/rac/checkpoint-restart-test.sh | 2 -- tests/dbz-twin/rac/run.sh | 2 -- tests/dbz-twin/rac/soak-test.sh | 2 -- 3 files changed, 6 deletions(-) diff --git a/tests/dbz-twin/rac/checkpoint-restart-test.sh b/tests/dbz-twin/rac/checkpoint-restart-test.sh index 01759947..ccd2c8d9 100755 --- a/tests/dbz-twin/rac/checkpoint-restart-test.sh +++ b/tests/dbz-twin/rac/checkpoint-restart-test.sh @@ -22,8 +22,6 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" -PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$TESTS_DIR/sql/scripts" RAC_ENV_DIR="$TESTS_DIR/environments/rac" KILL_COUNT="${1:-3}" diff --git a/tests/dbz-twin/rac/run.sh b/tests/dbz-twin/rac/run.sh index 33dc78b7..55e799b8 100755 --- a/tests/dbz-twin/rac/run.sh +++ b/tests/dbz-twin/rac/run.sh @@ -19,8 +19,6 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" -PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$TESTS_DIR/sql/scripts" RAC_ENV_DIR="$TESTS_DIR/environments/rac" SCENARIO="${1:?Usage: $0 }" diff --git a/tests/dbz-twin/rac/soak-test.sh b/tests/dbz-twin/rac/soak-test.sh index 89d29877..8f553173 100755 --- a/tests/dbz-twin/rac/soak-test.sh +++ b/tests/dbz-twin/rac/soak-test.sh @@ -21,8 +21,6 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DBZ_TWIN_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" TESTS_DIR="$(cd "$DBZ_TWIN_DIR/.." && pwd)" -PROJECT_ROOT="$(cd "$TESTS_DIR/.." && pwd)" -SCRIPTS_DIR="$TESTS_DIR/sql/scripts" RAC_ENV_DIR="$TESTS_DIR/environments/rac" DURATION_MINUTES="${1:-30}"