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 now 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.