/** * {@inheritDoc} */ @Override protected void initHook(Map<String, Object> parameters) { if (CollectionUtils.isNotEmpty(mBeanServerListeners)) { hook = new MBeanServerInterceptorHook(mBeanServerListeners); } else { hook = new MBeanServerInterceptorHook(Collections.<IMBeanServerListener> emptyList()); } }
/** * {@inheritDoc} */ @Override public Object beforeBody(long methodId, Object object, Object[] parameters, SpecialSensorConfig ssc) { String methodName = ssc.getTargetMethodName(); MBeanServer server = getServerFromParameters(parameters); if (ADD_METHOD.equals(methodName)) { mbeanServerAdded(server); } else if (REMOVE_METHOD.equals(methodName)) { mbeanServerRemoved(server); } else if (LOG.isWarnEnabled()) { LOG.warn("MBeanServerInterceptorHook not dispatched on the add or remove mbean server method. Dispatched method is " + methodName + " on class " + object.getClass().getName() + "."); } return null; }
@Test public void wrongParameterType() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = new Object[] { 1L }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); } }
@Test public void ignored() { long methodId = 11L; Object[] parameters = new Object[] {}; Object result = mock(Object.class); Object resultAfter = hook.afterBody(methodId, object, parameters, result, ssc); assertThat(resultAfter, is(nullValue())); verifyZeroInteractions(object, result, ssc, listener); } }
@Test public void emptyParameters() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = new Object[] {}; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); }
@Test public void nullParameters() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = null; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); }
@BeforeMethod public void init() { hook = new MBeanServerInterceptorHook(Collections.singletonList(listener)); }
@Test public void nullFirstParameter() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = new String[] { null }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); }
@Test public void notCorrectMethod() { when(ssc.getTargetMethodName()).thenReturn("somethingelse"); Object[] parameters = new Object[] { server }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); }
@Test public void tooMuchParameters() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = new Object[] { server, server }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verifyNoMoreInteractions(ssc); verifyZeroInteractions(object, listener); }
@Test public void happyPathAdd() { when(ssc.getTargetMethodName()).thenReturn("addMBeanServer"); Object[] parameters = new Object[] { server }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verify(listener).mbeanServerAdded(server); verifyNoMoreInteractions(ssc, listener); verifyZeroInteractions(object); }
@Test public void happyPathRemove() { when(ssc.getTargetMethodName()).thenReturn("removeMBeanServer"); Object[] parameters = new Object[] { server }; Object result = hook.beforeBody(METHOD_ID, object, parameters, ssc); assertThat(result, is(nullValue())); verify(ssc).getTargetMethodName(); verify(listener).mbeanServerRemoved(server); verifyNoMoreInteractions(ssc, listener); verifyZeroInteractions(object); }