This directory contains cross-SDK Behavior-Driven Development (BDD) tests for Apache Iggy, designed to ensure consistency across different language SDKs.
bdd/
├── scenarios/ # Shared Gherkin feature files
│ └── basic_messaging.feature
├── rust/ # Rust SDK BDD implementation
│ ├── Dockerfile # Rust BDD test container
│ ├── tests/
│ └── Cargo.toml
├── python/ # Python SDK BDD implementation
│ ├── Dockerfile # Python BDD test container
│ ├── tests/
│ └── requirements.txt
├── node/ # Node SDK BDD implementation
│ └── Dockerfile # Node BDD test container
├── csharp/ # csharp SDK BDD implementation
│ └── Dockerfile # csharp BDD test container
├── java/ # Java SDK BDD implementation
│ ├── Dockerfile # Java BDD test container
│ ├── src/test/
│ └── build.gradle.kts
├── docker-compose.yml # Orchestrates server + SDK containers
├── Dockerfile # Debug build of Iggy server
└── README.md# Run all SDK tests
../scripts/run-bdd-tests.sh all
# Run specific SDK tests
../scripts/run-bdd-tests.sh rust
../scripts/run-bdd-tests.sh python
../scripts/run-bdd-tests.sh go
../scripts/run-bdd-tests.sh node
../scripts/run-bdd-tests.sh csharp
../scripts/run-bdd-tests.sh java
# Clean up Docker resources
../scripts/run-bdd-tests.sh clean- Docker and Docker Compose
- The tests build the latest Iggy server from source in debug mode for faster compilation
- Server Container: Builds and runs the latest Iggy server in debug mode
- SDK Containers: Each SDK has its own container with the appropriate runtime and dependencies
- Shared Features: All SDKs test against the same
.featurefiles for consistency - Health Checks: Containers wait for the server to be healthy before running tests
To add a new SDK (e.g., Node.js):
- Create
node/directory - Add
node/Dockerfilewith appropriate runtime and dependencies - Create
node/tests/directory with BDD implementation - Add
node-bddservice todocker-compose.yml - Update
../scripts/run-bdd-tests.shscript - Update changed-files-config.json file to include the new SDK files
GitHub Actions workflow: ci-test-bdd.yml
The Rust implementation is located in core/bdd/ and linked via Docker volumes.
The Python implementation is in bdd/python/tests/ and needs to be updated as the Python SDK API evolves.
The node.js BDD test are run by cucumber-js, bdd test code is located at foreign/node/src/bdd
The csharp implementation is located at foreign/csharp/Iggy_SDK.Tests.BDD
The Java implementation is located in java/src/test/
Add new .feature files to the bdd/scenarios/ directory and implement the corresponding step definitions in each SDK's test directory.