This is a project which reproduce a reflection bug in Postman gRPC client.
The bug show up starting from an increasing .proto
complexity.
See postmanlabs/postman-app-support#11625
Before running this project, you will need the following:
- Rust programming language installed on your system
- Cargo package manager installed on your system
- Protoc compiler installed on your system
To install the project, please follow these steps:
Clone the repository to your local machine using git clone command. Navigate to the root of the project.
Run the following command in your terminal:
cargo build
Once the build is finished, run the following command to start the application:
cargo run
Use Postman client and launch a server reflection.
Decode the generated proto file descriptor:
protoc < src/api.bin --decode=google.protobuf.FileDescriptorSet google/protobuf/descriptor.proto > descriptor.txt
Result from grpcurl
call:
grpcurl -plaintext localhost:33037 describe
postman.api.v1.Grpc is a service:
// Postman gRPC service
service Grpc {
// GetVersion
rpc GetVersion ( .postman.api.v1.GetVersionRequest ) returns ( .postman.api.v1.GetVersionResponse );
// SendBlocks
rpc SendBlocks ( stream .postman.api.v1.SendBlocksRequest ) returns ( stream .postman.api.v1.SendBlocksResponse );
// SendOperations
rpc SendOperations ( stream .postman.api.v1.SendOperationsRequest ) returns ( stream .postman.api.v1.SendOperationsResponse );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
// The reflection service is structured as a bidirectional stream, ensuring
// all related requests go to a single server.
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
If you would like to contribute to this project, you may fork it and submit your changes in a pull request.
This project is licensed under the MIT license.
That's it! You should now have enough information to run and use this Rust project.