Skip to content

grpc_proxy imposter load failed when different proto files #4

Description

@mukrisp

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions