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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class(package private) static interfaceprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanprivate final List<GrpcCleanupRule.Resource> private com.google.common.base.Stopwatchprivate long -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidafter()Releases all the registered resources.org.junit.runners.model.Statementapply(org.junit.runners.model.Statement base, org.junit.runner.Description description) (package private) voidregister(GrpcCleanupRule.Resource resource) <T extends io.grpc.ManagedChannel>
Tregister(T channel) Registers the given channel to the rule.<T extends io.grpc.Server>
Tregister(T server) Registers the given server to the rule.(package private) GrpcCleanupRulesetTicker(com.google.common.base.Ticker ticker) Sets a specified time source for monitoring cleanup timeout.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
-
Field Details
-
resources
-
timeoutNanos
private long timeoutNanos -
stopwatch
private com.google.common.base.Stopwatch stopwatch -
abruptShutdown
private boolean abruptShutdown
-
-
Constructor Details
-
GrpcCleanupRule
public GrpcCleanupRule()
-
-
Method Details
-
setTimeout
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
Timeoutrule's test duration, depending on which rule is applied first.- Returns:
- this
-
setTicker
Sets a specified time source for monitoring cleanup timeout.- Returns:
- this
-
register
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
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
-
register
-
apply
public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description) - Specified by:
applyin interfaceorg.junit.rules.TestRule- Overrides:
applyin classorg.junit.rules.ExternalResource
-
after
protected void after()Releases all the registered resources.- Overrides:
afterin classorg.junit.rules.ExternalResource
-