Interface ExecHarness
-
- All Superinterfaces:
AutoCloseable
public interface ExecHarness extends AutoCloseable
A utility for testing asynchronous support/service code.An execution harness is backed by a thread pool. It is important to call
close()
when the object is no longer needed to shutdown this thread pool. Alternatively, if you are performing a single operation you can use one of the*single
static methods.- See Also:
yield(Function)
,yieldSingle(Function)
,run(Action)
,runSingle(Action)
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description void
close()
Shuts down the thread pool backing this harness.default void
execute(Operation operation)
default void
execute(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Operation> function)
default void
execute(Function<? super Execution,? extends Operation> function)
static void
executeSingle(Operation operation)
static void
executeSingle(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Operation> function)
static void
executeSingle(Function<? super Execution,? extends Operation> function)
default ExecStarter
fork()
ExecController
getController()
static ExecHarness
harness()
Creates a new execution harness.static ExecHarness
harness(int numThreads)
Create a harness with the provided number of computation threads.static ExecHarness
harness(Action<? super ExecControllerSpec> definition)
Create a harness that is backed by an execution controller with the provided configurationdefault void
run(Action<? super Execution> action)
Initiates an execution and blocks until it completes.void
run(Action<? super RegistrySpec> registry, Action<? super Execution> action)
Initiates an execution and blocks until it completes.static void
runSingle(Action<? super Execution> action)
Convenient form ofrun(Action)
that creates and closes a harness for the run.static void
runSingle(Action<? super RegistrySpec> registry, Action<? super Execution> action)
Convenient form ofrun(Action, Action)
that creates and closes a harness for the run.<T> ExecResult<T>
yield(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Promise<T>> func)
Synchronously returns a promised value.default <T> ExecResult<T>
yield(Function<? super Execution,? extends Promise<T>> func)
Synchronously returns a promised value.static <T> ExecResult<T>
yieldSingle(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Promise<T>> func)
Creates an exec harness,executes
the given function with it before closing it, then returning execution result.static <T> ExecResult<T>
yieldSingle(Function<? super Execution,? extends Promise<T>> func)
Creates an exec harness,executes
the given function with it before closing it, then returning execution result.
-
-
-
Method Detail
-
harness
static ExecHarness harness()
Creates a new execution harness.
When using Ratpack's RxJava integration, ExecHarness can be used to testimport ... public class Example { // An async callback based API static class AsyncApi { static interface Callback<T> { void receive(T value); } public <T> void returnAsync(T value, Callback<? super T> callback) { new Thread(() -> callback.receive(value)).run(); } } // Our service class that wraps the raw async API // In the real app this is created by the DI container (e.g. Guice) static class AsyncService { private final AsyncApi asyncApi = new AsyncApi(); // Our method under test public <T> Promise<T> promise(final T value) { return Promise.async(downstream -> asyncApi.returnAsync(value, downstream::success)); } } public static void main(String[] args) throws Throwable { // the harness must be close()'d when finished with to free resources try (ExecHarness harness = ExecHarness.harness()) { // set up the code under test final AsyncService service = new AsyncService(); // exercise the async code using the harness, blocking until the promised value is available ExecResult<String> result = harness.yield(execution -> service.promise("foo")); assertEquals("foo", result.getValue()); } } }
rx.Observable
instances by first converting them to a promise. See theratpack.rx2.RxRatpack.single(Observable)
documentation for an example of testing observables.- Returns:
- a new execution harness
-
harness
static ExecHarness harness(int numThreads)
Create a harness with the provided number of computation threads.- Parameters:
numThreads
- the number of computation threads- Returns:
- an execution harness
-
harness
static ExecHarness harness(Action<? super ExecControllerSpec> definition)
Create a harness that is backed by an execution controller with the provided configuration- Parameters:
definition
- the controller specification- Returns:
- an execution harness
- Since:
- 2.0
-
fork
default ExecStarter fork()
-
getController
ExecController getController()
-
yield
default <T> ExecResult<T> yield(Function<? super Execution,? extends Promise<T>> func) throws Exception
Synchronously returns a promised value.The given function will execute in a separate thread. The calling thread will block, waiting for the promised value to be provided.
- Type Parameters:
T
- the type of promised value- Parameters:
func
- a function that exercises some code that returns a promise- Returns:
- the result of the execution
- Throws:
Exception
- any thrown by the function
-
yield
<T> ExecResult<T> yield(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Promise<T>> func) throws Exception
Synchronously returns a promised value.The given function will execute in a separate thread. The calling thread will block, waiting for the promised value to be provided.
- Type Parameters:
T
- the type of promised value- Parameters:
registry
- the intial contents of the execution registryfunc
- a function that exercises some code that returns a promise- Returns:
- the result of the execution
- Throws:
Exception
- any thrown by the function
-
yieldSingle
static <T> ExecResult<T> yieldSingle(Function<? super Execution,? extends Promise<T>> func) throws Exception
Creates an exec harness,executes
the given function with it before closing it, then returning execution result.- Type Parameters:
T
- the type of promised value- Parameters:
func
- a function that exercises some code that returns a promise- Returns:
- the result of the execution
- Throws:
Exception
- any thrown by the function, or the promise failure exception
-
yieldSingle
static <T> ExecResult<T> yieldSingle(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Promise<T>> func) throws Exception
Creates an exec harness,executes
the given function with it before closing it, then returning execution result.- Type Parameters:
T
- the type of promised value- Parameters:
registry
- the intial contents of the execution registryfunc
- a function that exercises some code that returns a promise- Returns:
- the result of the execution
- Throws:
Exception
- any thrown by the function, or the promise failure exception
-
run
default void run(Action<? super Execution> action) throws Exception
Initiates an execution and blocks until it completes. If an uncaught exception is thrown during the execution, it will be thrown by this method.This method is useful for testing an execution that has some detectable side effect, as this method does not return the “result” of the execution.
- Parameters:
action
- the start of the execution- Throws:
Exception
- any thrown during the execution that is not explicitly caught- See Also:
runSingle(Action)
,yield(Function)
-
run
void run(Action<? super RegistrySpec> registry, Action<? super Execution> action) throws Exception
Initiates an execution and blocks until it completes. If an uncaught exception is thrown during the execution, it will be thrown by this method.This method is useful for testing an execution that has some detectable side effect, as this method does not return the “result” of the execution.
- Parameters:
registry
- the intial contents of the execution registryaction
- the start of the execution- Throws:
Exception
- any thrown during the execution that is not explicitly caught- See Also:
runSingle(Action)
,yield(Function)
-
runSingle
static void runSingle(Action<? super Execution> action) throws Exception
Convenient form ofrun(Action)
that creates and closes a harness for the run.- Parameters:
action
- the start of the execution- Throws:
Exception
- any thrown during the execution that is not explicitly caught- See Also:
run(Action)
,yield(Function)
-
runSingle
static void runSingle(Action<? super RegistrySpec> registry, Action<? super Execution> action) throws Exception
Convenient form ofrun(Action, Action)
that creates and closes a harness for the run.- Parameters:
registry
- the intial contents of the execution registryaction
- the start of the execution- Throws:
Exception
- any thrown during the execution that is not explicitly caught- See Also:
run(Action)
,yield(Function)
-
execute
default void execute(Function<? super Execution,? extends Operation> function) throws Exception
- Throws:
Exception
-
execute
default void execute(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Operation> function) throws Exception
- Throws:
Exception
-
executeSingle
static void executeSingle(Function<? super Execution,? extends Operation> function) throws Exception
- Throws:
Exception
-
executeSingle
static void executeSingle(Action<? super RegistrySpec> registry, Function<? super Execution,? extends Operation> function) throws Exception
- Throws:
Exception
-
close
void close()
Shuts down the thread pool backing this harness.- Specified by:
close
in interfaceAutoCloseable
-
-