Run the Processor
After configuring the Controller Services and enqueuing the necessary FlowFiles, the Processor can be triggered to run by calling the run
method of TestRunner
. If this method is called without any arguments, it will invoke any method in the Processor with an @OnScheduled
annotation, call the Processor's onTrigger
method once, and then run the @OnUnscheduled
and finally @OnStopped
methods.
If it is desirable to run several iterations of the onTrigger
method before the other @OnUnscheduled
and @OnStopped
life-cycle events are triggered, the run(int)
method can be used to specify how many iterations of onTrigger
should be called.
There are times when we want to trigger the Processor to run but not trigger the @OnUnscheduled
and @OnStopped
life-cycle events. This is useful, for instance, to inspect the Processor's state before these events occur. This can be achieved using the run(int, boolean)
and passing false
as the second argument. After doing this, though, calling the @OnScheduled
life-cycle methods could cause an issue. As a result, we can now run onTrigger
again without causing these events to occur by using the run(int,boolean,boolean)
version of the run
method and passing false
as the third argument.
If it is useful to test behavior that occurs with multiple threads, this can also be achieved by calling the setThreadCount
method of TestRunner
. The default is 1 thread. If using multiple threads, it is important to remember that the run
call of TestRunner
specifies how many times the Processor should be triggered, not the number of times that the Processor should be triggered per thread. So, if the thread count is set to 2 but run(1)
is called, only a single thread will be used.