-
-
Notifications
You must be signed in to change notification settings - Fork 209
Request Matching ProtoBuf
Stef Heyenrath edited this page Feb 27, 2024
·
1 revision
Can be used to match a gRPC ProtoBuf message.
See also mstack.nl blog: gRPC / ProtoBuf Support.
Define a Proto Definition file (greet.proto)
syntax = "proto3";
syntax = "proto3";
package greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
Start the WireMock.Net server and define the mapping for the Grpc call:
// Read the 'greet.proto' ProtoDefinition file as text and store it in a variable
var protoDefinitionText = File.ReadAllText(@"c:\grpc\greet.proto");
// Define an unique identifier for that ProtoDefinition to make it possible to refer
// to that ProtoDefinition in the different mappings
var protoDefinitionId = "GrpcGreet";
// Start the WireMockServer and enable HTTP/2 support
var server = WireMockServer.Start(useHttp2: true);
server
// Now call the new AddProtoDefinition method to register this identifier
// and ProtoDefinition in WireMock.Net
.AddProtoDefinition(protoDefinitionId, protoDefinitionText)
// Define the Request matching logic which means in this case:
// - Match on HTTP POST
// - Match when the client calls the SayHello method on the Greeter-service
// - Use a JsonMatcher so that this request is only mapped when the name
// equals "stef".
.Given(Request.Create()
.UsingPost()
.WithPath("/grpc/greet.Greeter/SayHello")
.WithBodyAsProtoBuf("greet.HelloRequest", new JsonMatcher(new { name = "stef" }))
)
// Define that this mapping should use the specified protoDefinitionId for both
// the Request and the Response
.WithProtoDefinition(protoDefinitionId)
// Build a response which will:
// - Return the correct Content-Type header and Grpc Trailing header
// - Define the response as an anonymous object and use the Handlebars
// Transformer to return a personalized message
// - Return a ProtoBuf byte-array response using the HelloReply method
.RespondWith(Response.Create()
.WithHeader("Content-Type", "application/grpc")
.WithTrailingHeader("grpc-status", "0")
.WithBodyAsProtoBuf("greet.HelloReply",
new
{
message = "hello {{request.BodyAsJson.name}} {{request.method}}"
})
.WithTransformer()
);
todo
- Home
- What is WireMock.Net
- WireMock.Org
- References
- Settings
- Admin REST API
- Proxying
- Stubbing
- Webhook
- Request Matching
- Response Templating
- Unit Testing
- Using WireMock
- Advanced
- Errors