grpc-wiremock is a mock server for GRPC services implemented as a wrapper around the WireMock http server.
grpc-wiremock starts a grpc server generated based on provided proto files which will convert a proto grpc request to JSON and redirects it as a POST request to the WireMock then converts a http response back to grpc proto format.
- GRPC server works on
tcp://localhost:50000
- WireMock server works on
http://localhost:8888
- Run
docker run -p 8888:8888 -p 50000:50000 -v $(pwd)/example/proto:/proto -v $(pwd)/example/wiremock:/wiremock adven27/grpc-wiremock
- Stub
curl -X POST http://localhost:8888/__admin/mappings \
-d '{
"request": {
"method": "POST",
"url": "/BalanceService/getUserBalance",
"bodyPatterns" : [ {
"equalToJson" : { "id": "1", "currency": "EUR" }
} ]
},
"response": {
"status": 200,
"jsonBody": {
"balance": {
"amount": { "value": { "decimal" : "100.0" }, "value_present": true },
"currency": { "value": "EUR", "value_present": true }
}
}
}
}'
- Check
grpcurl -plaintext -d '{"id": 1, "currency": "EUR"}' localhost:50000 api.wallet.BalanceService/getUserBalance
Should get response:
{
"balance": {
"amount": {
"value": {
"decimal": "100.0"
},
"value_present": true
},
"currency": {
"value": "EUR",
"value_present": true
}
}
}
Stubbing should be done via WireMock JSON API
Currently, following grpc server properties are supported*:
GRPC_SERVER_MAXHEADERLISTSIZE
GRPC_SERVER_MAXMESSAGESIZE
GRPC_SERVER_MAXINBOUNDMETADATASIZE
GRPC_SERVER_MAXINBOUNDMESSAGESIZE
*The first two are deprecated in favor of the last two
Could be used like this:
docker run -e GRPC_SERVER_MAXHEADERLISTSIZE=1000 adven27/grpc-wiremock
In case you don't need to change proto files, you can build your own image with precompiled protos.
See an example
Snappy support can be enabled using EXT_CODECS env variable as follows:
docker run -e EXT_CODECS=snappy adven27/grpc-wiremock
Also in docker-compose:
image: adven27/grpc-wiremock
ports:
- "12085:50000" # grpc port
- "8088:8888" # http serve port
volumes:
- ./example/proto:/proto
environment:
- EXT_CODECS=snappy
*gzip compression supported by default
To increase performance some Wiremock related options may be tuned either directly or by enabling the "load" profile. Next two commands are identical:
docker run -e SPRING_PROFILES_ACTIVE=load adven27/grpc-wiremock
docker run \
-e WIREMOCK_SERVER_DISABLEREQUESTJOURNAL=true \
-e WIREMOCK_SERVER_ASYNCHRONOUSRESPONSEENABLED=true \
-e WIREMOCK_SERVER_ASYNCHRONOUSRESPONSETHREADS=10 \
-e WIREMOCK_SERVER_STUBREQUESTLOGGINGDISABLED=true \
-e WIREMOCK_SERVER_VERBOSE=false \
adven27/grpc-wiremock