public void addListener(final StatisticsListener listener) { if (listener == null) { throw new NullPointerException("StatisticsListener is null"); } synchronized (this.mutex) { if (!this.listeners.contains(listener)) { this.listeners.add(listener); getStatMonitorHandler().addMonitor(this); } } }
@Test public void testNotificationSampleTimeMillis() throws Exception { final long currentTime = System.currentTimeMillis(); StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); long nanoTimeStamp = NanoTimer.getTime(); handler.sampled(nanoTimeStamp, Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertTrue(monitor.getTimeStamp() != nanoTimeStamp); assertTrue(monitor.getTimeStamp() >= currentTime); }
@Test public void testNotificationSampleFrequencyDefault() throws Exception { final int sampleFrequency = 1; StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final int sampleCount = 100; for (int i = 0; i < sampleCount; i++) { handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1 + i, 2 * 1000, 10, false); } assertEquals(sampleCount / sampleFrequency, monitor.getNotificationCount()); }
@Test public void testStatMonitorNotifierAliveButWaiting() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final StatMonitorNotifier notifier = handler.getStatMonitorNotifier(); assertTrue(notifier.isAlive()); waitUntilWaiting(notifier); for (int i = 0; i < 20; i++) { assertTrue(notifier.isWaiting()); Thread.sleep(10); } }
@Test public void testNotificationResourceInstances() throws Exception { final int resourceInstanceCount = 100; final List<ResourceInstance> resourceInstances = new ArrayList<ResourceInstance>(); for (int i = 0; i < resourceInstanceCount; i++) { resourceInstances.add(new ResourceInstance(i, null, null)); } StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); handler.sampled(NanoTimer.getTime(), Collections.unmodifiableList(resourceInstances)); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); final List<ResourceInstance> notificationResourceInstances = monitor.getResourceInstances(); assertNotNull(notificationResourceInstances); assertEquals(resourceInstances, notificationResourceInstances); assertEquals(resourceInstanceCount, notificationResourceInstances.size()); int i = 0; for (ResourceInstance resourceInstance : notificationResourceInstances) { assertEquals(i, resourceInstance.getId()); i++; } }
@Test public void testAddExistingMonitorReturnsFalse() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); StatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); assertFalse(handler.addMonitor(monitor)); }
@Test public void testAddNewMonitor() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertEquals(1, monitor.getNotificationCount()); }
@Test public void testStatMonitorNotifierWakesUpForWork() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final StatMonitorNotifier notifier = handler.getStatMonitorNotifier(); assertTrue(notifier.isAlive()); waitUntilWaiting(notifier); // if notification occurs then notifier woke up... assertEquals(0, monitor.getNotificationCount()); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertEquals(1, monitor.getNotificationCount()); // and goes back to waiting... waitUntilWaiting(notifier); }
@Test public void testRemoveExistingMonitor() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); assertTrue(handler.removeMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().contains(monitor)); assertTrue(handler.getMonitorsSnapshot().isEmpty()); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); assertEquals(0, monitor.getNotificationCount()); }