@Test
public void testDeactivationAndReactivation() throws InterruptedException {
final long period = 1500;
final long offset = 300;
final ISigarSamplerFactory sigarFactory = SigarSamplerFactory.INSTANCE;
final MemSwapUsageSampler sampler = sigarFactory.createSensorMemSwapUsage();
this.monitoringController.schedulePeriodicSampler(sampler, offset, period, TimeUnit.MILLISECONDS);
Thread.sleep(3600);
final int numEventsBeforeDisabled = this.recordListFilledByListWriter.size();
final String pattern = SignatureFactory.createMemSwapSignature();
this.monitoringController.deactivateProbe(pattern);
Thread.sleep(2000);
final int numEventsWhileDisabled = this.recordListFilledByListWriter.size() - numEventsBeforeDisabled;
this.monitoringController.activateProbe(pattern);
Thread.sleep(2000);
final int numEventsAfterReEnabled = this.recordListFilledByListWriter.size() - numEventsBeforeDisabled;
final boolean isInstanceOf = this.recordListFilledByListWriter.get(0) instanceof MemSwapUsageRecord;
Assert.assertTrue("Unexpected instance of IMonitoringRecord", isInstanceOf);
Assert.assertEquals("Unexpected number of triggering events before disabling", 3, numEventsBeforeDisabled);
Assert.assertEquals("Unexpected number of triggering events while disabled", 0, numEventsWhileDisabled);
Assert.assertTrue("Unexpected at least one triggering events after being re-enabled. Found " + numEventsAfterReEnabled,
numEventsAfterReEnabled > 0);
this.monitoringController.terminateMonitoring();
}