Eventuate Tram Testability Evaluation
This project is part of the evaluation of a Saga pattern implementation using the Eventuate Tram and Eventuate Tram Sagas framework. The original Saga Pattern Realization with Eventuate Tram has been extended by automated tests that relate to the BookTripSaga.
Start the Application
-
Run
./gradlew clean build
-
Execute
docker-compose up
-
Requesting trip bookings is now possible. Either use
curl
commands, the providedTravelApplication.json
insomnia file, which includes different trip booking requests, or access the Swagger UI of the different services:
TravelService | http://localhost:8090/swagger-ui.html |
HotelService | http://localhost:8081/swagger-ui.html |
FlightService | http://localhost:8082/swagger-ui.html |
An example for such a request:
{
"duration":
{
"start":"2021-12-01",
"end":"2021-12-12"
},
"start":
{
"country":"Scotland",
"city":"Stirling"
},
"destination":
{
"country":"Sweden",
"city":"Stockholm"
},
"travellerName": "Max Mustermann",
"boardType":"breakfast",
"customerId":"1"
}
To simulate a Saga that fails because no hotel or no flight is available, use one of the following Strings
as destination country
in the trip booking request:
"Provoke hotel failure"
"Provoke flight failure"
The services also provide a health and an info endpoint that show some information about the system like that the DB is up and running. These endpoints can be accessed via:
TravelService | http://localhost:8090/api/travel/monitor/health | http://localhost:8090/api/travel/monitor/info |
HotelService | http://localhost:8081/api/hotels/monitor/health | http://localhost:8081/api/hotels/monitor/info |
FlightService | http://localhost:8082/api/flights/monitor/health | http://localhost:8082/api/flights/monitor/info |
If you are on Windows or Mac, you sometimes have to replace localhost with the default IP of your docker machine (use docker-machine ip default
to get this default IP).
Stop the Application
To stop the application and remove the created containers, execute the following command:
docker-compose down --remove-orphans
Testability
The TravelService as well as the HotelService have a testing directory that includes several tests concerning Saga-related code.
1. Unit Test Saga Definition
Unit tests regarding the Saga orchestrator and the Saga definition can be found within the TravelService. Since Eventuate Tram provides a testing framework specifically designed for testing Sagas, it is used here.
2. Unit Test Saga Participant
Examples for unit testing the Saga participant can be found within the HotelService. Again, Eventuate Tram's testing framework is used to realize the participant related unit tests.
Code Link
EventuateTram_Implementations/EventuateTram_Testability-Evaluation