SDK Scheme Adapter and Local K8S cluster testing
A detailed documentation for dfsps who want to test the mojaloop cluster deployment with scheme adapter and a mock backend service.
Prerequisite
- A working mojaloop k8s cluster (Local / Cloud deployment)
- DFSP mock backend service
- sdk-scheme-adapter > 8.6.0
Configuration & Starting services
Mojaloop Local K8S cluster deployment
Please follow the below link to deploy your own cluster on local system. https://mojaloop.io/documentation/deployment-guide/
A Linux based operating system is recommended and at least 16GB RAM and 4 core processor is required.
After installation please complete the OSS-New-Deployment-FSP-Setup.postman_collection
collection available at https://github.com/mojaloop/postman
Then make sure the oracles & endpoints are configured correctly and that the "Golden Path Collection" can be run successfully.
DFSP Mock Backend service & SDK Scheme adapter
The SDK scheme adapter version should be greater than 8.6.0 The next step starts the scheme adapter from docker-compose file automatically.
Please download the following repository https://github.com/mojaloop/sdk-mock-dfsp-backend
Edit the docker-compose.yml file and verify the following lines.
version: '3'
services:
redis2:
image: "redis:5.0.4-alpine"
container_name: redis2
backend:
image: "mojaloop/sdk-mock-dfsp-backend"
env_file: ./backend.env
container_name: dfsp_mock_backend2
ports:
- "23000:3000"
depends_on:
- scheme-adapter2
scheme-adapter2:
image: "mojaloop/sdk-scheme-adapter:latest"
env_file: ./scheme-adapter.env
container_name: sa_sim2
ports:
- "4000:4000"
depends_on:
- redis2
Edit the backend.env file and change the OUTBOUND_ENDPOINT value
OUTBOUND_ENDPOINT=http://sa_sim2:4001
Edit scheme-adapter.env and change the following lines Please replace the endpoint values with the appropriate hostnames provided in /etc/hosts file.
DFSP_ID=safsp
CACHE_HOST=redis2
ALS_ENDPOINT=account-lookup-service.local
QUOTES_ENDPOINT=quoting-service.local
TRANSFERS_ENDPOINT=ml-api-adapter.local
BACKEND_ENDPOINT=dfsp_mock_backend2:3000
AUTO_ACCEPT_PARTY=true
AUTO_ACCEPT_QUOTES=true
VALIDATE_INBOUND_JWS=false
VALIDATE_INBOUND_PUT_PARTIES_JWS=false
JWS_SIGN=true
JWS_SIGN_PUT_PARTIES=true
Name resolution configuration - Mac ONLY
Point the following hostnames to your local machine IP by adding the below line in /etc/hosts file
192.168.5.101 ml-api-adapter.local account-lookup-service.local central-ledger.local central-settlement.local account-lookup-service-admin.local quoting-service.local moja-simulator.local central-ledger central-settlement ml-api-adapter account-lookup-service account-lookup-service-admin quoting-service simulator host.docker.internal moja-account-lookup-mysql
Make sure to change 192.168.5.101 to your real external IP.
Name resolution configuration - Linux ONLY
Add extra_hosts configuration to scheme-adapter2 config in the docker-compose.yml file, so that the scheme-adapter2 container can resolve dns of account-lookup-service.local, quoting-service.local and ml-api-adapter.local. For example the config could be:
scheme-adapter2:
image: "mojaloop/sdk-scheme-adapter:latest"
env_file: ./scheme-adapter.env
container_name: sa_sim2
ports:
- "4000:4000"
depends_on:
- redis2
extra_hosts:
- "account-lookup-service.local:172.17.0.1"
- "quoting-service.local:172.17.0.1"
- "ml-api-adapter.local:172.17.0.1"
The 172.17.0.1 is a default docker0 network interface on linux, however please make sure it's valid in your configuration and change it if needed.
Start
Start the backend and scheme adapter using the following command.
cd src
docker-compose up -d
Testing
Configure new FSP
Download the following files:
- Mojaloop-Local.postman_environment_modified.json - modified environment variables that point to your local setup
- OSS-Custom-FSP-Onboaring-SchemeAdapter-Setup.postman_collection.json - steps that will setup new FSP
The SCHEME_ADAPTER_ENDPOINT in the environment file should point to your local scheme-adapter deployment. For mac this is configured already to be http://host.docker.internal:4000. If you're running on Linux, please edit the environment file, so that SCHEME_ADAPTER_ENDPOINT points to your docker0 interface (usually 172.17.0.1 - see remarks in previous step).
In postman, select the environment file and run the custom collection in the postman to provision a new FSP called "safsp". The endpoints for safsp will be set to the URL of the scheme adapter which is configured in environment file.
Add the target MSISDN to payee simulator which is running inside the K8S. Run the following commands
curl -X POST \
http://moja-simulator.local/payeefsp/parties/MSISDN/27713803912 \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Content-Length: 406' \
-H 'Content-Type: application/json' \
-H 'Host: moja-simulator.local' \
-H 'User-Agent: PostmanRuntime/7.20.1' \
-H 'cache-control: no-cache' \
-d '{
"party": {
"partyIdInfo": {
"partyIdType": "MSISDN",
"partyIdentifier": "27713803912",
"fspId": "payeefsp"
},
"name": "Siabelo Maroka",
"personalInfo": {
"complexName": {
"firstName": "Siabelo",
"lastName": "Maroka"
},
"dateOfBirth": "1974-01-01"
}
}
}'
curl -X POST \
http://account-lookup-service.local/participants/MSISDN/27713803912 \
-H 'Accept: application/vnd.interoperability.participants+json;version=1' \
-H 'Connection: keep-alive' \
-H 'Content-Length: 50' \
-H 'Content-Type: application/vnd.interoperability.participants+json;version=1.0' \
-H 'Date: Fri, 21 Dec 2018 12:17:01 GMT' \
-H 'FSPIOP-Source: payeefsp' \
-H 'Host: account-lookup-service.local' \
-H 'User-Agent: PostmanRuntime/7.11.0' \
-H 'accept-encoding: gzip, deflate' \
-H 'cache-control: no-cache,no-cache' \
-d '{
"fspId": "payeefsp",
"currency": "USD"
}'
Try to send money
Try to send funds from "safsp" (Mock DFSP) to a MSISDN which is in "payeedfsp" (Simulator in K8S) through scheme adapter. Run the following curl command to issue command to Mock DFSP service.
curl -X POST \
http://localhost:23000/send \
-H 'Content-Type: application/json' \
-d '{
"from": {
"displayName": "John Doe",
"idType": "MSISDN",
"idValue": "123456789"
},
"to": {
"idType": "MSISDN",
"idValue": "27713803912"
},
"amountType": "SEND",
"currency": "USD",
"amount": "100",
"transactionType": "TRANSFER",
"note": "testpayment",
"homeTransactionId": "123ABC"
}'
You should get a response with COMPLETED currentState.