TOOP Simulator Next Generation

Latest Release: 2.1.1

Introduction

The TOOP Simulator is a development tool that simulates the APIs provided by the TOOP Connector and the transactions between the development system and a mock DP or DC.

License

All rights to the results that are made available via this repository are owned by their respective creators, as identified in the relevant file names. Unless explicitly indicated otherwise, the results are made available to you under the EUPL, Version 1.2, an EU approved open source licence. For a full version of the licence and guidance, please visit https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12

Note that the results are protected by copyright, and all rights which are not expressly licenced to you by the owners or granted by applicable law are explicitly reserved.

This repository is the only formal source of the results of the TOOP project, an action that was funded by the EU Horizon 2020 research and innovation programme under grant agreement No 737460 (see https://toop.eu/). If you have obtained the results elsewhere or under a different licence, it is likely that this is in violation of copyright law. In case of doubt, please contact us.

TOOP Simulator Architecture

The simulator is built on the TOOP Connector API, providing implementations simulating the interactions between the infrastructure of TOOP (Data Services Directory, SMP) and the AS4 Gateways. It also integrates the implementation of Elonia and Freedonia, in order to provide full support of the transactions defined by TOOP.

Provided APIs

The following TOOP Connector APIs are been implemented and provided by the Simulator

Name RelativeURL Sub Component Description
Simple Validate, Lookup and Send /api/user/submit/request Helper Validate, SMP Lookup and AS4 sending of an EDM Request in a single call
Simple Validate, Lookup and Send /api/user/submit/response Helper Validate, SMP Lookup and AS4 sending of an EDM Response in a single call
Simple Validate, Lookup and Send /api/user/submit/error Helper Validate, SMP Lookup and AS4 sending of an EDM Error Response in a single call
Validate EDM Error Response /api/validate/error Validation Validate a TOOP EDM Error Response against the XSD and the Schematron
Validate EDM Request /api/validate/request Validation Validate a TOOP EDM Request against the XSD and the Schematron
Validate EDM Response /api/validate/response Validation Validate a TOOP EDM Response against the XSD and the Schematron

Simulated Environment

The Simulator has the ability to only discover and submit messages to the Elonia and Freedonia System which it simulates. The following Tables provide an overview of the metadata that can be used for successful message transactions

Message Type Receiving System Receiving Participant Identifier Document Type Identifier Process Identifier Transmission Protocol
EDM Concept Request Elonia DP iso6523-actorid-upis::9999:elonia toop-doctypeid-qns::RegisteredOrganization::REGISTERED_ORGANIZATION_TYPE::CONCEPT##CCCEV::toop-edm:v2.1 toop-procid-agreement::urn:eu.toop.process.dataquery bdxr-transport-ebms3-as4-v1p0
EDM Document Request Elonia DP iso6523-actorid-upis::9999:elonia toop-doctypeid-qns::FinancialRecord::FINANCIAL_RECORD_TYPE::UNSTRUCTURED::toop-edm:v2.1 toop-procid-agreement::urn:eu.toop.process.documentquery bdxr-transport-ebms3-as4-v1p0
EDM Response (Concept) Freedonia DC iso6523-actorid-upis::9999:freedonia toop-doctypeid-qns::QueryResponse::toop-edm:v2.1 toop-procid-agreement::urn:eu.toop.process.dataquery bdxr-transport-ebms3-as4-v1p0
EDM Response (Document) Freedonia DC iso6523-actorid-upis::9999:freedonia toop-doctypeid-qns::QueryResponse::toop-edm:v2.1 toop-procid-agreement::urn:eu.toop.process.documentquery bdxr-transport-ebms3-as4-v1p0

Deployment and Users Guide

Toop Simulator is distributed as either a standalone runnable jar bundle or a docker image (latest version points to 2.0.0:rc3)

docker pull toop/toop-simulator-ng:latest.

For TOOP clients development activities it is recommended to use the jar bundle and for server side deployment docker images are more convenient.

Quickstart

Running the simulator without any extra parameter will launch the simulator in a closed circuit mode. You can type send-dc-request to see that the message goes to the connector and then DP, and the response is sent to connector and DC automatically. Running Using the Jar Bundle

Please download the latest release from here. And run the simulator with the default configurations as below:

java -jar toop-simulator-ng-2.0.0-rc3-bundle.jar

Running Via Docker Image

docker run --rm -it --name toop-sim -p 8081:8081 toop/toop-simulator-ng

These commands will create a simulator instance in DP mode (see modes below) with an underlying toop-connector bound to port 8081.

Persisting Datasets with Docker Image

The simulator has an embedded dp module what uses a set of files for generating responses. When the application is first run, a folder named 'datasets' is created on the current directory. If the directory already exists and the files with the same name already exist in it, then they are left untouched, otherwise they are created. This gives the users the opportunity to modify the files with respect to their use cases and save their data. In case of a docker container, this directory is /simulator/datasets; however it is inside the container and when the container is shut down, it is gone. If the data inside this directory needs to be persisted to some known location, then it needs to be mounted to a local volume on the host machine. In this case, the user has a chance to edit the contents of this directory and make them usable for future runs. In order to achieve this, the docker image can be launched as below:

docker run --rm -it --name toop-sim -p 8081:8081 -v $(pwd)/datasets:/simulator/datasets toop/toop-simulator-ng

The -v $(pwd)/datasets:/simulator/datasets parameter means "map the /simulator/datasets directory inside the container to the datasets directory in the current directory of the host machine". A sample listing of the datasets directory is given below.

datasets
   edm-conceptRequest-lp.xml
   document
      LP12345.yaml
   gbm
      LP12345.yaml
      NP12345.yaml

Docker Connectivity with a DP/DC running locally (on host)

When the simulator docker image is run for testing against a DC/DP that runs on the host machine (not a docker container), the DC or DP endpoint does not work with "localhost". In that case, the address of the module that runs on the host might be provided as below:

Windows: docker.for.win.localhost Mac: docker.for.mac.localhost Linux: 171.17.0.1

Example:

docker run --rm -it \
      -e SIM_MODE=DP \
      -e DC_ENDPOINT="http://docker.for.mac.localhost:8080/to-dc" \
      -e CONNECTOR_PORT="8081" \
      -p 8081:8081 \
      toop/toop-simulator-ng

Configuration Parameters

Below is given the table of parameters, their default values and descriptions. All parameters can be either provided as JVM args (i.e. -DXYZ) or ENV variables.

Parameter Default Value Description
SIM_MODE DP The simulation mode, one of DP, SOLE and DC
CONNECTOR_PORT 8081 The port that the toop-connector and toop-simulator HTTP endpoints will be published on.
DC_ENDPOINT http://localhost:${CONNECTOR_PORT}/to-dc Data Consumer /to-dc endpoint
DP_ENDPOINT http://localhost:${CONNECTOR_PORT}/to-dp Data Provider /to-dp endpoint
DP_RESPONSE_AUTO TRUE Determines whether the DP side should respond automatically (or not) to an incoming request

When using docker images, these parameters can be provided by -e flag: docker run --rm --name mysim -it
-e DP_ENDPOINT="http://some.dp/to-dp"
-e DC_ENDPOINT="http://some.dc/to-dc"
-e SIM_MODE=SOLE
-e CONNECTOR_PORT=9876
-p 8080:9876 toop/toop-simulator-ng

Simulation Modes

Toop simulator supports three working modes; namely DC, SOLE and DP (default). In all modes, a command line interface is also provided to the user.

DC Mode

As JVM ARG: -DSIM_MODE=DC
As ENV variable: export SIM_MODE=DC

In DC mode, toop-simulator simulates a DC with a TOOP Connector and a real DP is being tested. You may provide a URL for an external DP via the DP_ENDPOINT parameter. The default value for DP_ENDPOINT is given in the TOOP Simulator v2.0.0#Parameters section.

To launch the simulator in DC mode, run either of the following commands

  # using JVM ARGS
  java -DSIM_MODE=DC \
        -DDP_ENDPOINT="http://some.dp/to-dp" \
            -jar toop-simulator-2.0.0-rc3-bundle.jar

  # using ENV variables
  export SIM_MODE=DC
  export DP_ENDPOINT="http://some.dp/to-dp"
  java -jar toop-simulator-2.0.0-rc3-bundle.jar


  # via docker
  docker run --rm -it \
      -e SIM_MODE=DC \
      -e DP_ENDPOINT="http://some.dp/to-dp" \
      -p 8081:8081 \
      toop/toop-simulator-ng

DP Mode

As JVM ARG: -DSIM_MODE=DP
As ENV variable: export SIM_MODE=DP

In DP mode, toop-simulator simulates a DP with a TOOP Connector and a real DC is being tested. The requests received from the DC are automatically responded by the embedded DP simulator. You may provide a URL for an external DC via the DC_ENDPOINT variable. The default value for DC_ENDPOINT is given in the TOOP Simulator v2.0.0#Parameters section.

  # using JVM ARGS
  java -DSIM_MODE=DP \
      -DDC_ENDPOINT="http://some.dc/to-dc" \
            -jar toop-simulator-2.0.0-rc3-bundle.jar
  
  # using ENV variables
  export SIM_MODE=DP
  export DC_ENDPOINT="http://some.dc/to-dc"
  java -jar toop-simulator-2.0.0-rc3-bundle.jar


  # via docker
  docker run --rm -it \
        -e SIM_MODE=DP \
        -e DC_ENDPOINT="http://some.dc/to-dc" \
        -p 8081:8081 \
        toop/toop-simulator-ng

SOLE Mode

As JVM ARG: -DSIM_MODE=SOLE
As ENV variable: export SIM_MODE=SOLE

In SOLE mode, toop-simulator runs a TOOP Connector and a real DC and a real DP are being tested. The requests received from the DC are sent to the DP, and responses received from the DP are sent to the DC. You may provide a URL for the DC and DP via the DC_ENDPOINT and DP_ENDPOINT variables respectively. The default values for these parameters are provided in the TOOP Simulator v2.0.0#Parameters section.

To launch the simulator in SOLE mode, run one of the following commands

  #using JVM ARGS
  java -DSIM_MODE=SOLE \
      -DDC_ENDPOINT="http://some.dc/to-dc" \
            -DDP_ENDPOINT="http://some.dp/to-dp" \
            -jar toop-simulator-2.0.0-rc3-bundle.jar
  
  #using ENV variables
  export SIM_MODE=SOLE
  export  DC_ENDPOINT="http://some.dc/to-dc"
  export DP_ENDPOINT="http://some.dp/to-dp"
  java -jar toop-simulator-2.0.0-rc3-bundle.jar


  #via docker
  docker run --rm -it \
      -e SIM_MODE=SOLE \
      -e DC_ENDPOINT="http://some.dc/to-dc" \
      -e DP_ENDPOINT="http://some.dp/to-dp" \
      -p 8081:8081 \
      toop/toop-simulator-ng