Hi,
Imposter load fails when proxy is used with different proto files.
Want to know what syntax for proto files is supported.
WORKING_PROTO_FILE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat /usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.example.services";
package example; // service at example.ExampleService
// package example.service; // service at example.service.ExampleService
import "example_request.proto";
import "example_response.proto";
service ExampleService {
rpc ExampleUnaryUnaryCall (ExampleRequest) returns (ExampleResponse) {}
rpc ExampleStreamUnaryCall (stream ExampleRequest) returns (ExampleResponse) {}
rpc ExampleUnaryStreamCall (ExampleRequest) returns (stream ExampleResponse) {}
rpc ExampleStreamStreamCall (stream ExampleRequest) returns (stream ExampleResponse) {}
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
WORKING_IMPOSTER_CONFIG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat mb_grpc_proxy_templates.ejs
{
"protocol": "grpc",
"port": 4546,
"loglevel": "debug",
"recordRequests": true,
"services": {
"example.ExampleService": {
"file": "/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto"
}
},
"stubs": [
{
"responses": [
{
"proxy": {
"to": "localhost:4545",
"mode": "proxyAlways",
"predicateGenerators": [{ "matches": {"path": true} }]
}
}
]
}
]
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
WORKING_MB_CONSOLE_LOG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master } ]$ mb start --protofile protocols.json --loglevel debug --debug true
info: [mb:2525] Loaded custom protocol grpc
info: [mb:2525] mountebank v2.1.2 now taking orders - point your browser to http://localhost:2525/ for help
debug: [mb:2525] config: {"options":{"protofile":"protocols.json","loglevel":"debug","debug":true,"port":2525,"noParse":false,"no-parse":false,"pidfile":"mb.pid","nologfile":false,"logfile":"mb.log","allowInjection":false,"allow-injection":false,"localOnly":false,"local-only":false,"ipWhitelist":[""],"ip-whitelist":"*","mock":false,"heroku":false},"process":{"nodeVersion":"v13.7.0","architecture":"x64","platform":"linux"}}
info: [mb:2525] POST /imposters
debug: [mb:2525] ::ffff:127.0.0.1:51686 => {"protocol":"grpc","port":4546,"loglevel":"debug","recordRequests":true,"services":{"example.ExampleService":{"file":"/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto"}},"stubs":[{"responses":[{"proxy":{"to":"localhost:4545","mode":"proxyAlways","predicateGenerators":[{"matches":{"path":true}}]}}]}]}
info: [grpc:4546] Open for business...
info: [grpc:4546] [2020-02-07T13:33:49.849Z] server started on port '4546'
^Cinfo: [mb:2525] Adios - see you soon?
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
IMPOSTER_CONFIG_WITH_ISSUE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat mb_grpc_proxy.ejs
{
"protocol": "grpc",
"port": 4546,
"loglevel": "debug",
"recordRequests": true,
"services": {
"example.ExampleService": {
"file": "/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto"
}
},
"stubs": [
{
"responses": [
{
"proxy": {
"to": "135.249.22.155:50051",
"mode": "proxyAlways",
"predicateGenerators": [{ "matches": {"path": true} }]
}
}
]
}
]
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
MB_CONSOLE_ERRORLOG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master } ]$ mb start --protofile protocols.json --loglevel debug --debug true
info: [mb:2525] Loaded custom protocol grpc
info: [mb:2525] mountebank v2.1.2 now taking orders - point your browser to http://localhost:2525/ for help
debug: [mb:2525] config: {"options":{"protofile":"protocols.json","loglevel":"debug","debug":true,"port":2525,"noParse":false,"no-parse":false,"pidfile":"mb.pid","nologfile":false,"logfile":"mb.log","allowInjection":false,"allow-injection":false,"localOnly":false,"local-only":false,"ipWhitelist":[""],"ip-whitelist":"*","mock":false,"heroku":false},"process":{"nodeVersion":"v13.7.0","architecture":"x64","platform":"linux"}}
info: [mb:2525] POST /imposters
debug: [mb:2525] ::ffff:127.0.0.1:51696 => {"protocol":"grpc","port":4546,"loglevel":"debug","recordRequests":true,"services":{"example.ExampleService":{"file":"/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto"}},"stubs":[{"responses":[{"proxy":{"to":"135.249.22.155:50051","mode":"proxyAlways","predicateGenerators":[{"matches":{"path":true}}]}}]}]}
error: [grpc:4546] /usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:47
Object.keys(serviceDefinition).forEach(key => {
^
TypeError: Cannot convert undefined or null to object
at Function.keys ()
at createImplementation (/usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:47:12)
at /usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:37:30
at Array.forEach ()
at Object.getServerInstance (/usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:32:37)
at Server. (/usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js:23:41)
at Object.onceWrapper (events.js:427:28)
at Server.emit (events.js:321:20)
at emitCloseNT (net.js:1653:8)
at processTicksAndRejections (internal/process/task_queues.js:83:21)
error: [mb:2525] error creating imposter: {"code":"cannot start server","message":""grpc" start command failed (exit code 1)","source":"node /usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js","domainThrown":true,"name":"Error","stack":"Error\n at Object.from (/usr/lib/node_modules/mountebank/src/util/inherit.js:15:17)\n at createError (/usr/lib/node_modules/mountebank/src/util/errors.js:10:26)\n at Object.ProtocolError (/usr/lib/node_modules/mountebank/src/util/errors.js:21:34)\n at ChildProcess. (/usr/lib/node_modules/mountebank/src/models/protocols.js:68:44)\n at Object.onceWrapper (events.js:428:26)\n at ChildProcess.emit (events.js:321:20)\n at ChildProcess.EventEmitter.emit (domain.js:547:15)\n at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)"}
ERRORED_IMPOSTER_LOAD:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ curl -X POST -d @mb_grpc_proxy.ejs http://localhost:2525/imposters --header "Content-Type:application/json"
{
"errors": [
{
"code": "cannot start server",
"message": ""grpc" start command failed (exit code 1)",
"source": "node /usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js",
"domainThrown": true
}
]
}[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
ERRORED_PROTO_FILE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat /usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto
syntax = "proto3";
package reverse;
service ReverseService {
rpc ReverseString (ReverseRequest) returns (ReverseReply) {}
}
message ReverseRequest {
string data = 1;
}
message ReverseReply {
string reversed = 2;
}[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
Thanks and Regards,
Muthukrishnan.P
Hi,
Imposter load fails when proxy is used with different proto files.
Want to know what syntax for proto files is supported.
WORKING_PROTO_FILE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat /usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.example.services";
package example; // service at example.ExampleService
// package example.service; // service at example.service.ExampleService
import "example_request.proto";
import "example_response.proto";
service ExampleService {
rpc ExampleUnaryUnaryCall (ExampleRequest) returns (ExampleResponse) {}
rpc ExampleStreamUnaryCall (stream ExampleRequest) returns (ExampleResponse) {}
rpc ExampleUnaryStreamCall (ExampleRequest) returns (stream ExampleResponse) {}
rpc ExampleStreamStreamCall (stream ExampleRequest) returns (stream ExampleResponse) {}
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
WORKING_IMPOSTER_CONFIG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat mb_grpc_proxy_templates.ejs
{
"protocol": "grpc",
"port": 4546,
"loglevel": "debug",
"recordRequests": true,
"services": {
"example.ExampleService": {
"file": "/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto"
}
},
"stubs": [
{
"responses": [
{
"proxy": {
"to": "localhost:4545",
"mode": "proxyAlways",
"predicateGenerators": [{ "matches": {"path": true} }]
}
}
]
}
]
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
WORKING_MB_CONSOLE_LOG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master } ]$ mb start --protofile protocols.json --loglevel debug --debug true
info: [mb:2525] Loaded custom protocol grpc
info: [mb:2525] mountebank v2.1.2 now taking orders - point your browser to http://localhost:2525/ for help
debug: [mb:2525] config: {"options":{"protofile":"protocols.json","loglevel":"debug","debug":true,"port":2525,"noParse":false,"no-parse":false,"pidfile":"mb.pid","nologfile":false,"logfile":"mb.log","allowInjection":false,"allow-injection":false,"localOnly":false,"local-only":false,"ipWhitelist":[""],"ip-whitelist":"*","mock":false,"heroku":false},"process":{"nodeVersion":"v13.7.0","architecture":"x64","platform":"linux"}}
info: [mb:2525] POST /imposters
debug: [mb:2525] ::ffff:127.0.0.1:51686 => {"protocol":"grpc","port":4546,"loglevel":"debug","recordRequests":true,"services":{"example.ExampleService":{"file":"/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/example.proto"}},"stubs":[{"responses":[{"proxy":{"to":"localhost:4545","mode":"proxyAlways","predicateGenerators":[{"matches":{"path":true}}]}}]}]}
info: [grpc:4546] Open for business...
info: [grpc:4546] [2020-02-07T13:33:49.849Z] server started on port '4546'
^Cinfo: [mb:2525] Adios - see you soon?
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
IMPOSTER_CONFIG_WITH_ISSUE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat mb_grpc_proxy.ejs
{
"protocol": "grpc",
"port": 4546,
"loglevel": "debug",
"recordRequests": true,
"services": {
"example.ExampleService": {
"file": "/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto"
}
},
"stubs": [
{
"responses": [
{
"proxy": {
"to": "135.249.22.155:50051",
"mode": "proxyAlways",
"predicateGenerators": [{ "matches": {"path": true} }]
}
}
]
}
]
}
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
MB_CONSOLE_ERRORLOG:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master } ]$ mb start --protofile protocols.json --loglevel debug --debug true
info: [mb:2525] Loaded custom protocol grpc
info: [mb:2525] mountebank v2.1.2 now taking orders - point your browser to http://localhost:2525/ for help
debug: [mb:2525] config: {"options":{"protofile":"protocols.json","loglevel":"debug","debug":true,"port":2525,"noParse":false,"no-parse":false,"pidfile":"mb.pid","nologfile":false,"logfile":"mb.log","allowInjection":false,"allow-injection":false,"localOnly":false,"local-only":false,"ipWhitelist":[""],"ip-whitelist":"*","mock":false,"heroku":false},"process":{"nodeVersion":"v13.7.0","architecture":"x64","platform":"linux"}}
info: [mb:2525] POST /imposters
debug: [mb:2525] ::ffff:127.0.0.1:51696 => {"protocol":"grpc","port":4546,"loglevel":"debug","recordRequests":true,"services":{"example.ExampleService":{"file":"/usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto"}},"stubs":[{"responses":[{"proxy":{"to":"135.249.22.155:50051","mode":"proxyAlways","predicateGenerators":[{"matches":{"path":true}}]}}]}]}
error: [grpc:4546] /usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:47
Object.keys(serviceDefinition).forEach(key => {
^
TypeError: Cannot convert undefined or null to object
at Function.keys ()
at createImplementation (/usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:47:12)
at /usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:37:30
at Array.forEach ()
at Object.getServerInstance (/usr/lib/node_modules/mountebank/mountebank-grpc/src/mock.js:32:37)
at Server. (/usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js:23:41)
at Object.onceWrapper (events.js:427:28)
at Server.emit (events.js:321:20)
at emitCloseNT (net.js:1653:8)
at processTicksAndRejections (internal/process/task_queues.js:83:21)
error: [mb:2525] error creating imposter: {"code":"cannot start server","message":""grpc" start command failed (exit code 1)","source":"node /usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js","domainThrown":true,"name":"Error","stack":"Error\n at Object.from (/usr/lib/node_modules/mountebank/src/util/inherit.js:15:17)\n at createError (/usr/lib/node_modules/mountebank/src/util/errors.js:10:26)\n at Object.ProtocolError (/usr/lib/node_modules/mountebank/src/util/errors.js:21:34)\n at ChildProcess. (/usr/lib/node_modules/mountebank/src/models/protocols.js:68:44)\n at Object.onceWrapper (events.js:428:26)\n at ChildProcess.emit (events.js:321:20)\n at ChildProcess.EventEmitter.emit (domain.js:547:15)\n at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)"}
ERRORED_IMPOSTER_LOAD:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ curl -X POST -d @mb_grpc_proxy.ejs http://localhost:2525/imposters --header "Content-Type:application/json"
{
"errors": [
{
"code": "cannot start server",
"message": ""grpc" start command failed (exit code 1)",
"source": "node /usr/lib/node_modules/mountebank/mountebank-grpc/src/index.js",
"domainThrown": true
}
]
}[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
ERRORED_PROTO_FILE:
[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$ cat /usr/lib/node_modules/mountebank/mountebank-grpc/src/protos/reverse.proto
syntax = "proto3";
package reverse;
service ReverseService {
rpc ReverseString (ReverseRequest) returns (ReverseReply) {}
}
message ReverseRequest {
string data = 1;
}
message ReverseReply {
string reversed = 2;
}[ root@d5dc81eadab6:/usr/lib/node_modules/mountebank/mountebank-grpc {master *} ]$
Thanks and Regards,
Muthukrishnan.P