Class GrpcCleanupRule

java.lang.Object
org.junit.rules.ExternalResource
io.grpc.testing.GrpcCleanupRule
All Implemented Interfaces:
org.junit.rules.TestRule

@NotThreadSafe public final class GrpcCleanupRule extends org.junit.rules.ExternalResource
A JUnit ExternalResource that can register gRPC resources and manages its automatic release at the end of the test. If any of the resources registered to the rule can not be successfully released, the test will fail.

Example usage:

@Rule public final GrpcCleanupRule grpcCleanup = new GrpcCleanupRule();
...
// The Channel and Server can be created in any order
grpcCleanup.register(
    InProcessServerBuilder.forName("my-test-case")
        .directExecutor()
        .addService(serviceImpl)
        .build()
        .start());
ManagedChannel channel = grpcCleanup.register(
    InProcessChannelBuilder.forName("my-test-case")
        .directExecutor()
        .build());

To use as a replacement for GrpcServerRule:

String serverName = InProcessServerBuilder.generateName();
MutableHandlerRegistry serviceRegistry = new MutableHandlerRegistry();
Server server = grpcCleanup.register(
    InProcessServerBuilder.forName(serverName)
        .fallbackHandlerRegistry(serviceRegistry)
        .build()
        .start());
ManagedChannel channel = grpcCleanup.register(
    InProcessChannelBuilder.forName(serverName).build());
Since:
1.13.0
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    Releases all the registered resources.
    org.junit.runners.model.Statement
    apply(org.junit.runners.model.Statement base, org.junit.runner.Description description)
     
    <T extends io.grpc.ManagedChannel>
    T
    register(T channel)
    Registers the given channel to the rule.
    <T extends io.grpc.Server>
    T
    register(T server)
    Registers the given server to the rule.
    setTimeout(long timeout, TimeUnit timeUnit)
    Sets a positive total time limit for the automatic resource cleanup.

    Methods inherited from class org.junit.rules.ExternalResource

    before

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • GrpcCleanupRule

      public GrpcCleanupRule()
  • Method Details

    • setTimeout

      public GrpcCleanupRule setTimeout(long timeout, TimeUnit timeUnit)
      Sets a positive total time limit for the automatic resource cleanup. If any of the resources registered to the rule fails to be released in time, the test will fail.

      Note that the resource cleanup duration may or may not be counted as part of the JUnit Timeout rule's test duration, depending on which rule is applied first.

      Returns:
      this
    • register

      public <T extends io.grpc.ManagedChannel> T register(@Nonnull T channel)
      Registers the given channel to the rule. Once registered, the channel will be automatically shutdown at the end of the test.

      This method need be properly synchronized if used in multiple threads. This method must not be used during the test teardown.

      Returns:
      the input channel
    • register

      public <T extends io.grpc.Server> T register(@Nonnull T server)
      Registers the given server to the rule. Once registered, the server will be automatically shutdown at the end of the test.

      This method need be properly synchronized if used in multiple threads. This method must not be used during the test teardown.

      Returns:
      the input server
    • apply

      public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description)
      Specified by:
      apply in interface org.junit.rules.TestRule
      Overrides:
      apply in class org.junit.rules.ExternalResource
    • after

      protected void after()
      Releases all the registered resources.
      Overrides:
      after in class org.junit.rules.ExternalResource