Skip to content

Latest commit

 

History

76 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wiremock grpc

gRPC mocking to test Rust applications.


Usage

Use the generate_svc! macro to generate a mock server with type-safe RPC methods:

use wiremock_grpc::{generate_svc, MockBuilder};
use tonic::Code;

generate_svc! {
    package hello;
    service Greeter {
        SayHello,
        WeatherInfo,
        // ... add the name of other rpc methods here.
    }
}

#[tokio::test]
async fn test_grpc() {
    // GreeterMockServer is generated by the macro
    let mut server = GreeterMockServer::start_default().await;

    // Use type-safe path_* methods
    server.setup(
        MockBuilder::when()
            .path_say_hello()
            .then()
            .return_status(Code::Ok)
            .return_body(|| HelloReply {
                message: "Hello!".into(),
            }),
    );

    // Connect your client
    let channel = tonic::transport::Channel::from_shared(
        format!("http://[::1]:{}", server.address().port())
    )
    .unwrap()
    .connect()
    .await
    .unwrap();
    let mut client = GreeterClient::new(channel);

    // Make requests
    let response = client
        .say_hello(HelloRequest { name: "World".into() })
        .await
        .unwrap();

    assert_eq!("Hello!", response.into_inner().message);
}

Custom Server Name

You can specify a custom name for the generated server using as:

generate_svc! {
    package hello;
    service Greeter as MyMockServer {
        SayHello,
    }
}

let server = MyMockServer::start_default().await;

Combining with Headers

server.setup(
    MockBuilder::when()
        .path_weather_info()
        .header("x-session-id", "abc123")
        .then()
        .return_body(|| WeatherReply {
            weather: "Sunny".into(),
        }),
);

String-based API

⚠️ Deprecated: Use the type-safe API instead. String-based API is there for backward compatibility but will be removed in the future.

You can also use the string-based API for paths:

server.setup(
    MockBuilder::when()
        .path("/hello.Greeter/SayHello")
        .then()
        .return_body(|| HelloReply {
            message: "Hello!".into(),
        }),
);

What the Macro Generates

The generate_svc! macro generates:

  • {ServiceName}MockServer (or custom name) - the mock server struct with start_default(), start(port), and start_with_addr(addr) methods
  • {ServiceName}TypeSafeExt trait - extension trait for WhenBuilder with path_{method_name} methods

Project Structure

About

Mock gRPC server to test your outgoing gRPC requests.

Resources

Stars

18 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages