Skip to content
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f7ee305
chore: add integration test cases for 2pc
vaibhav-datazip Mar 12, 2026
652d926
fix: logical issue in cdc check condition
vaibhav-datazip Mar 12, 2026
e461a6a
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip Mar 19, 2026
6ee9bfd
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip Mar 24, 2026
1fd2f83
chore: resolve merge conflict
vaibhav-datazip Apr 13, 2026
64658bc
fix: improve testcases
vaibhav-datazip Apr 13, 2026
85f7f4f
fix: skip postgres lsn check when all streams are finished
vaibhav-datazip Apr 15, 2026
631689e
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip Apr 15, 2026
80f0ccc
chore: increase integration test timeout
vaibhav-datazip Apr 16, 2026
ccf2f90
fix: mssql incremental integration test
vaibhav-datazip Apr 16, 2026
54c2bde
chore: replace unnecessary blank sync case as pre setup command
vaibhav-datazip Apr 17, 2026
a387c3a
fix: mongo recovery sync behaviour
vaibhav-datazip Apr 17, 2026
865afc6
Merge branch 'staging' into feat/2pc-integration-tests
hash-data Apr 21, 2026
2061855
fix: add comments for test cases
vaibhav-datazip Apr 22, 2026
5c77aa7
fix: trivy vulnerability error for pgx
vaibhav-datazip Apr 22, 2026
e9a7b35
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip Apr 27, 2026
548da83
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip May 8, 2026
c6ccaf8
chore: separate 2pc cases workflow
vaibhav-datazip May 8, 2026
4f1cd09
chore: resolve merge conflict
vaibhav-datazip May 8, 2026
663a3e9
fix: non utf 8 fields for insert 2pc
vaibhav-datazip May 8, 2026
44828a1
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip May 8, 2026
e07688f
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip May 8, 2026
6e6fe08
fix: remove schema validation during 2pc tests
vaibhav-datazip May 8, 2026
8706e7f
fix: bump up toolchain versions for 2pc tests
vaibhav-datazip May 8, 2026
4b2ea89
fix: remove Integration from 2pc test to avoid incorrect string matching
vaibhav-datazip May 8, 2026
53a0ab6
fix: 2pc table name
vaibhav-datazip May 8, 2026
05af31d
Merge branch 'staging' into feat/2pc-integration-tests
vaibhav-datazip May 18, 2026
49bd1c3
chore: removal of unused code
vaibhav-datazip May 18, 2026
41d846e
chore: abstract 2pc and integration test
vaibhav-datazip May 19, 2026
9f0c6e4
fix: run tests separately abstract out the code
vaibhav-datazip May 19, 2026
465379e
chore: add log for recovery lsn validation skip
vaibhav-datazip May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/workflows/2pc-integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: 2PC Integration Tests
Comment thread
vikaxsh marked this conversation as resolved.

on:
push:
branches:
- "master"
paths:
- '**/*.go'
- '**/*.java'
pull_request:
branches:
- "*"
paths:
- '**/*.go'
- '**/*.java'

jobs:
twopc-integration-tests:
uses: ./.github/workflows/integration-tests-runner.yml
with:
test_type: 2pc
179 changes: 179 additions & 0 deletions .github/workflows/integration-tests-runner.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: Integration Test Runner

on:
workflow_call:
inputs:
test_type:
description: 'Type of tests to run: integration or 2pc'
required: true
type: string

env:
MYSQL_ROOT_PASSWORD: root1234

jobs:
run-tests:
name: ${{ inputs.test_type == '2pc' && '2PC Integration Tests' || 'Integration Tests' }}
environment: integration_tests
runs-on: 32gb-runner
timeout-minutes: 45
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version-file: "go.mod"

- name: Set up Java for Maven
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

- name: Install DB2 CLI Driver
run: |
go run github.com/ibmdb/go_ibm_db/installer@v0.5.4
cp -r "$(go env GOPATH)/pkg/mod/github.com/ibmdb/clidriver" ./clidriver
IBM_DB_HOME="$(pwd)/clidriver"
echo "IBM_DB_HOME=$IBM_DB_HOME" >> $GITHUB_ENV
echo "CGO_CFLAGS=-I$IBM_DB_HOME/include" >> $GITHUB_ENV
echo "CGO_LDFLAGS=-L$IBM_DB_HOME/lib -Wl,-rpath,$IBM_DB_HOME/lib" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$IBM_DB_HOME/lib" >> $GITHUB_ENV

- name: Start Test Infrastructure
run: |
docker compose -f ./drivers/mysql/docker-compose.yml up -d
docker compose -f ./drivers/postgres/docker-compose.yml up -d
docker compose -f ./drivers/mongodb/docker-compose.yml up -d
docker compose -f ./drivers/oracle/docker-compose.yml up -d
docker compose -f ./drivers/db2/docker-compose.yml up -d
docker compose -f ./drivers/mssql/docker-compose.yml up -d
docker compose -f ./destination/iceberg/local-test/docker-compose.yml up minio mc postgres spark-iceberg -d

- name: Start Kafka
if: inputs.test_type == 'integration'
run: docker compose -f ./drivers/kafka/docker-compose.yml up -d

- name: Wait for MySQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake_mysql-test mysql -h localhost -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -e "SELECT 1"

- name: Wait for PostgreSQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake_postgres-test psql -h localhost -U postgres -d postgres -c "SELECT 1"

- name: Wait for MongoDB
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec primary_mongo mongosh --host localhost --port 27017 -u mongodb -p secure_password123 --authenticationDatabase admin --eval "db.adminCommand('ping')"

- name: Wait for Oracle
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec oracle-23c bash -c "echo 'SELECT 1 FROM dual;' | sqlplus -s system/secret1234@//localhost:1521/ORCL"

- name: Wait for DB2
uses: nick-fields/retry@v2
with:
timeout_minutes: 10
max_attempts: 30
retry_wait_seconds: 25
command: |
docker exec db2-test bash -c "su - db2inst1 -c 'db2 connect to TESTDB'"

- name: Wait for Kafka
if: inputs.test_type == 'integration'
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec kafkaJson kafka-topics --bootstrap-server localhost:9092 --list
docker exec kafkaAvro kafka-topics --bootstrap-server localhost:9092 --list
curl -f http://localhost:8081/subjects

- name: Wait for MSSQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Password!123' -C -Q "SELECT 1"

- name: Initialize MSSQL Database
run: |
docker exec olake-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Password!123' -C -d master -i /docker-entrypoint-initdb.d/01-init.sql

- name: Set up Data Directories
run: |
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/postgres-data
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/minio-data
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/ivy-cache
sudo chown -R 999:999 /home/runner/work/olake/olake/destination/iceberg/local-test/data
sudo chmod -R 777 /home/runner/work/olake/olake/destination/iceberg/local-test/data

- name: Install Go Dependencies
run: go mod download

- name: Build Project
run: go build -v ./...

- name: Cache Maven dependencies
uses: actions/cache@v4
with:
path: |
~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-

- name: Build Iceberg Sink
working-directory: ./destination/iceberg/olake-iceberg-java-writer
run: mvn clean package -DskipTests

- name: Run Integration Tests
if: inputs.test_type == 'integration'
run: |
go test -v -p 7 ./drivers/kafka/internal/... ./drivers/mysql/internal/... ./drivers/postgres/internal/... ./drivers/mongodb/internal/... ./drivers/oracle/internal/... ./drivers/db2/internal/... ./drivers/mssql/internal/... -timeout 0 -run 'Integration'

- name: Run 2PC Integration Tests
if: inputs.test_type == '2pc'
run: |
go test -v -p 6 ./drivers/mysql/internal/... ./drivers/postgres/internal/... ./drivers/mongodb/internal/... ./drivers/mssql/internal/... ./drivers/oracle/internal/... ./drivers/db2/internal/... -timeout 0 -run '2PC'

- name: Cleanup
if: always()
run: |
docker compose -f ./destination/iceberg/local-test/docker-compose.yml down
docker compose -f ./drivers/mysql/docker-compose.yml down
docker compose -f ./drivers/postgres/docker-compose.yml down
docker compose -f ./drivers/oracle/docker-compose.yml down
docker compose -f ./drivers/mongodb/docker-compose.yml down
docker compose -f ./drivers/db2/docker-compose.yml down
docker compose -f ./drivers/mssql/docker-compose.yml down

- name: Cleanup Kafka
if: always() && inputs.test_type == 'integration'
run: docker compose -f ./drivers/kafka/docker-compose.yml down
158 changes: 4 additions & 154 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Integration Tests

on:
push:
branches:
Expand All @@ -13,159 +14,8 @@ on:
- '**/*.go'
- '**/*.java'

env:
MYSQL_ROOT_PASSWORD: root1234

jobs:
integration-tests:
environment: integration_tests
runs-on: 32gb-runner
timeout-minutes: 45
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version-file: "go.mod"

- name: Set up Java for Maven
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

- name: Install DB2 CLI Driver
run: |
go run github.com/ibmdb/go_ibm_db/installer@v0.5.4
cp -r "$(go env GOPATH)/pkg/mod/github.com/ibmdb/clidriver" ./clidriver
IBM_DB_HOME="$(pwd)/clidriver"
echo "IBM_DB_HOME=$IBM_DB_HOME" >> $GITHUB_ENV
echo "CGO_CFLAGS=-I$IBM_DB_HOME/include" >> $GITHUB_ENV
echo "CGO_LDFLAGS=-L$IBM_DB_HOME/lib -Wl,-rpath,$IBM_DB_HOME/lib" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$IBM_DB_HOME/lib" >> $GITHUB_ENV

- name: Start Test Infrastructure
run: |
docker compose -f ./drivers/mysql/docker-compose.yml up -d
docker compose -f ./drivers/postgres/docker-compose.yml up -d
docker compose -f ./drivers/mongodb/docker-compose.yml up -d
docker compose -f ./drivers/oracle/docker-compose.yml up -d
docker compose -f ./drivers/db2/docker-compose.yml up -d
docker compose -f ./drivers/mssql/docker-compose.yml up -d
docker compose -f ./drivers/kafka/docker-compose.yml up -d
docker compose -f ./destination/iceberg/local-test/docker-compose.yml up minio mc postgres spark-iceberg -d

- name: Wait for MySQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake_mysql-test mysql -h localhost -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -e "SELECT 1"

- name: Wait for PostgreSQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake_postgres-test psql -h localhost -U postgres -d postgres -c "SELECT 1"

- name: Wait for MongoDB
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec primary_mongo mongosh --host localhost --port 27017 -u mongodb -p secure_password123 --authenticationDatabase admin --eval "db.adminCommand('ping')"

- name: Wait for Oracle
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec oracle-23c bash -c "echo 'SELECT 1 FROM dual;' | sqlplus -s system/secret1234@//localhost:1521/ORCL"

- name: Wait for DB2
uses: nick-fields/retry@v2
with:
timeout_minutes: 10
max_attempts: 30
retry_wait_seconds: 25
command: |
docker exec db2-test bash -c "su - db2inst1 -c 'db2 connect to TESTDB'"

- name: Wait for Kafka
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec kafkaJson kafka-topics --bootstrap-server localhost:9092 --list
docker exec kafkaAvro kafka-topics --bootstrap-server localhost:9092 --list
curl -f http://localhost:8081/subjects

- name: Wait for MSSQL
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 30
retry_wait_seconds: 5
command: |
docker exec olake-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Password!123' -C -Q "SELECT 1"

- name: Initialize MSSQL Database
run: |
docker exec olake-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Password!123' -C -d master -i /docker-entrypoint-initdb.d/01-init.sql


- name: Set up Data Directories
run: |
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/postgres-data
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/minio-data
sudo mkdir -p /home/runner/work/olake/olake/destination/iceberg/local-test/data/ivy-cache
sudo chown -R 999:999 /home/runner/work/olake/olake/destination/iceberg/local-test/data
sudo chmod -R 777 /home/runner/work/olake/olake/destination/iceberg/local-test/data

- name: Install Go Dependencies
run: go mod download

- name: Build Project
run: go build -v ./...

- name: Cache Maven dependencies
uses: actions/cache@v4
with:
path: |
~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-

- name: Build Iceberg Sink
working-directory: ./destination/iceberg/olake-iceberg-java-writer
run: mvn clean package -DskipTests

- name: Run Integration Tests
run: |
go test -v -p 7 ./drivers/kafka/internal/... ./drivers/mysql/internal/... ./drivers/postgres/internal/... ./drivers/mongodb/internal/... ./drivers/oracle/internal/... ./drivers/db2/internal/... ./drivers/mssql/internal/... -timeout 0 -run 'Integration'

- name: Cleanup
if: always()
run: |
docker compose -f ./destination/iceberg/local-test/docker-compose.yml down
docker compose -f ./drivers/mysql/docker-compose.yml down
docker compose -f ./drivers/postgres/docker-compose.yml down
docker compose -f ./drivers/oracle/docker-compose.yml down
docker compose -f ./drivers/mongodb/docker-compose.yml down
docker compose -f ./drivers/db2/docker-compose.yml down
docker compose -f ./drivers/mssql/docker-compose.yml down
docker compose -f ./drivers/kafka/docker-compose.yml down
uses: ./.github/workflows/integration-tests-runner.yml
with:
test_type: integration
Loading
Loading