Having a deep look at this class noticed that most of the tests were
duplicating tests in the AsyncMonitorTest class. All the functionallity
provided by the awaitCompletion and monitor methods is already tested
(and properly tested using mocks) in that class, so those methods have
been removed.
The BaseMonitoringService class just delegates to the AsyncMonitor one,
adding a bit of logic to validate input parameters, so the
BaseMonitoringServiceTest class now only tests the logic it is
responsible for.
When using TestNG timeout option to control test execution, random
timeout failures appeared. The tests have been refactored to manually
control the timeout.