X-road mock proxy server
This is a mock or proxy or both servers for X-road services.
Usual X-road setup is following. You application communicates directly with X-road security server over http/https or TLS client certificate authentication.
This is all fine until you need to:
- a) test complex test cases in your system and need to custom responses from X-road (i.e. mock responses)
- b) use multiple X-road environments without modifying application code
Use case: I would like to use my default X-road server for all request except service X which I want to respond from my mock
Use case: I would like to use my Test X-road server for all request except service X,Y and Z which I want to respond from my DEV X-road server.
This repo compiles into single application that has 2 different parts.
- proxy - acts as a router. Accepts requests from APP and routes request based on configured rules to different servers. Contains REST API for to see proxied requests/responses and add/modify/remove proxying rules.
- mock - responds configured SOAP messages to requests. Contains REST API to dynamically add/modify/remove rules/tempalates for responses.
The application should support/have:
- X-road security server with ClientCert authentication as a proxy target
- for serving proxy on HTTP or HTTPS or ClientCert authentication (as recommended for X-road)
- deciding server where to route request base on:
- requester IP
- request content (regex match)
- request X-road service name
- modifying proxied request body based on rules
- modifying proxied request response body based on rules
- REST API to add/modify/remove proxy rules
- REST API to add/modify/remove mock rules
- basic frontend for proxy:
- list of last N proxied requests/responses
- list of proxy rules
- add/modify/remove proxy rules
- basic frontend for mock:
- list of mock rules
- add/modify/remove mock rules
- nice fancy frontend
See example .xroad-mock-proxy-example.yaml
Application is configured from configuration file (yaml) or env variables. By default configuration is read from
current directory or read from file given with command line arg
--config=. For example:
Environment variables can be used to override
yaml values during application startup. All ENV variables need to have
XMP_ prefix to work.
For example mock address in yaml is configured as
mock: address: localhost:8082
to override it with ENV variable do
export XMP_MOCK_ADDRESS=localhost:6000 ./xroad-mock-proxy
Assuming you have
Check/lint/test and build binary
make check make
cp .xroad-mock-proxy-example.yaml .xroad-mock-proxy.yaml # edit `.xroad-mock-proxy.yaml` # start server ./xroad-mock-proxy
Build docker image
Run in Docker
make docker run-docker