This repository contains automated integration tests for eCAL. It is designed to run and validate communication scenarios between multiple processes using eCAL middleware.
- View status and logs of last tests:
https://github.com/eclipse-ecal/ecal-test-suite/actions
- Test report (available after completion of the tests):
https://eclipse-ecal.github.io/ecal-test-suite/
The main goal of this project is to provide:
- Automated test runs on push, pull request, or schedule
- Reliable feedback on message communication and process stability
- Visual test reports for easy inspection
-
Supports multiple eCAL transport layers (SHM, UDP, TCP)
-
Covers common scenarios such as:
- Publisher to Subscriber communication
- Multi-publisher and multi-subscriber setups
- Fault injection (e.g., crashing subscribers or publishers)
- Network failure simulations
-
Test results are published to GitHub Pages
-
Integration in eCAL repositori via
repository_dispatch
Each test case is implemented using Robot Framework, with Docker-based isolation.
Test Case | Description | README |
---|---|---|
basic_pub_sub | Simple 1:1 publisher-subscriber communication | README |
multi_pub_sub | Multiple publishers and subscribers (N:N) | README |
network_crash | Local UDP works after network disconnect | README |
pub_crash | One publisher crashes mid-test | README |
sub_crash | Subscriber crashes during message receive | README |
sub_send_crash | Subscriber crashes during send/zero-copy test | README |
rpc_ping_test | Simple RPC test with one client calling one server | README |
rpc_reconnect_test | RPC client disconnects and reconnects during the test | README |
rpc_n_to_n_test | Multiple RPC clients call multiple RPC servers (N:N) | README |
Test results are automatically deployed to: π https://eclipse-ecal.github.io/ecal-test-suite/
Each run is timestamped and archived, with access to:
log.html
report.html
output.xml
Tests can be triggered in three ways:
- Manually via GitHub Actions
- Automatically from the eCAL repository using
repository_dispatch
(Create a PR or Push to Master)
When working with a forked repository (e.g. YourUsername/ecal
), GitHub Actions cannot trigger workflows in other repositories (like the test suite) unless explicitly allowed via a token.
To enable integration testing across forks, two GitHub tokens are required:
Used in: your fork of ecal
(e.g. YourUsername/ecal
)
Purpose:
Triggers the test suite (e.g. YourUsername/ecal-test-suite
) via repository_dispatch
when a PR or push occurs in your forked ecal repo.
Type:
Classic Personal Access Token (PAT)_
--> Fine-grained tokens do not work here (tested and confirmed)
Required Scopes:
repo
(for private repositories)workflow
How to set up:
- Go to Developer Settings β Personal Access Tokens
- Click "Generate new token (classic)"
- Name it:
TEST_SUITE_TOKEN
- Set expiration (e.g. 90 days or custom)
- Enable scopes:
- β
repo
- β
workflow
- β
- Generate and copy the token (you won't see it again)
- Go to your forked repo:
https://github.com/YourUsername/ecal
- Navigate to Settings β Secrets and variables β Actions
- Add a new secret:
- Name:
TEST_SUITE_TOKEN
- Value: (paste the token)
- Name:
Used in: your fork of ecal-test-suite
(e.g. YourUsername/ecal-test-suite
)
Purpose:
Sends the result of the integration test (PASS/FAIL) back to your forked ecal repo via commit status API.
Type:
Fine-grained Personal Access Token (PAT)_
Repository access:
Must include your forked ecal
repo (e.g. YourUsername/ecal
)
Required Repository Permissions:
- β
Read access to metadata
- β
Read and write access to commit statuses
How to set up:
- Go to Developer Settings β Personal Access Tokens β Fine-grained tokens
- Click "Generate new token"
- Repository access: choose your forked
ecal
repo - Permissions:
- β
Metadata: Read-only
- β
Commit statuses: Read and write
- β
- Name the token:
COMMIT_STATUS_TOKEN
- Generate and copy the token
- Go to your test suite fork:
https://github.com/YourUsername/ecal-test-suite
- Navigate to Settings β Secrets and variables β Actions
- Add a new secret:
- Name:
COMMIT_STATUS_TOKEN
- Value: (paste the token)
- Name:
You only need these tokens in forks or for cross-repository communication.
If you're pushing or creating pull requests directly within the official eclipse-ecal/ecal
, no token setup is required.
After the test run finishes, the result (pass/fail) is reported back to the Pull Request in the eCAL repository as a commit status.
- eCAL (If you build without Docker)
- Docker
- Python 3
- Robot Framework
.
βββ integration_tests/ # Main directory for all test cases and supporting infrastructure
β βββ basic_pub_sub/ # Test case: simple 1:1 publisher-subscriber communication
β βββ multi_pub_sub/ # Test case: multiple publishers and subscribers (N:N)
β βββ network_crash/ # Test case: test resilience after network disconnect
β βββ pub_crash/ # Test case: publisher crashes mid-transmission
β βββ sub_crash/ # Test case: subscriber crashes during reception
β βββ sub_send_crash/ # Test case: subscriber crashes during send (zero-copy stress)
β βββ rpc_ping_test/ # Test case: basic RPC ping between client and server
β βββ rpc_reconnect_test/ # Test case: RPC reconnects after temporary disconnect
β βββ lib/ # Shared helper libraries used by multiple test cases
β β βββ EcalConfigHelper/ # C++ helper to configure eCAL transport modes
β β βββ DockerLibrary.py # Robot Framework library to manage Docker containers
β β βββ GlobalPathsLibrary.py # Library to manage paths, container names, and image tags
β βββ docker/ # Base Dockerfile used to build test environments
β βββ Dockerfile.ecal_base # Base image with all dependencies (eCAL, build tools)
β
βββ create_new_test/ # Generator to create new test case folder structure
β βββ create_new_test.py # Python script to auto-generate new test case folders
β βββ templates/ # Jinja2 templates used by the generator
β
βββ .devcontainer/ # Devcontainer setup for local development in VS Code
β βββ devcontainer.json # Container definition for VS Code Remote Containers
β βββ README.md # Instructions for using the dev container setup
β
βββ .github/ # GitHub Actions CI configuration
β βββ workflows/
β βββ run-tests.yml # Main workflow file to build, test, and publish reports
βββ README.md # Main documentation file of the repository
If you want to develop and run the tests locally in VS Code without getting header errors (e.g. eCAL or TCLAP not found), we recommend using the included .devcontainer
setup.
- Make sure Docker and VS Code are installed.
- Install the Dev Containers extension in VS Code.
- Open this repository in VS Code.
- When prompted, click "Reopen in Container".
- VS Code will build and open a full-featured development environment inside Docker.
This container is based on the same Docker image used for testing, so all dependencies like eCAL and TCLAP are pre-installed. You can develop and run Robot Framework tests directly without needing to configure anything on your host system.
For more details, see: .devcontainer/README.md
To create a new test case folder automatically, use the generator in create_new_test/
.