@Test public void dispatchNoConstructorHooks() { int methodId = 3; Object object = mock(Object.class); Object[] parameters = new Object[0]; RegisteredSensorConfig registeredSensorConfig = mock(RegisteredSensorConfig.class); when(registeredSensorConfig.getMethodSensors()).thenReturn(Collections.<IMethodSensor> emptyList()); when(registeredSensorConfig.getMethodSensorsReverse()).thenReturn(Collections.<IMethodSensor> emptyList()); hookDispatcher.addMapping(methodId, registeredSensorConfig); hookDispatcher.dispatchConstructorBeforeBody(methodId, parameters); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); hookDispatcher.dispatchConstructorAfterBody(methodId, object, parameters); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensors(); verifyZeroInteractions(object, coreService); verifyNoMoreInteractions(registeredSensorConfig); }
@Test public void dispatchNoMethodHooks() { int methodId = 3; Object object = mock(Object.class); Object[] parameters = new Object[0]; Object returnValue = mock(Object.class); RegisteredSensorConfig registeredSensorConfig = mock(RegisteredSensorConfig.class); when(registeredSensorConfig.getMethodSensors()).thenReturn(Collections.<IMethodSensor> emptyList()); when(registeredSensorConfig.getMethodSensorsReverse()).thenReturn(Collections.<IMethodSensor> emptyList()); hookDispatcher.addMapping(methodId, registeredSensorConfig); hookDispatcher.dispatchMethodBeforeBody(methodId, object, parameters); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); hookDispatcher.dispatchFirstMethodAfterBody(methodId, object, parameters, returnValue, false); verify(registeredSensorConfig, times(1)).getMethodSensors(); hookDispatcher.dispatchSecondMethodAfterBody(methodId, object, parameters, returnValue, false); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verifyZeroInteractions(object, coreService, returnValue); verifyNoMoreInteractions(registeredSensorConfig); }
@Test public void dispatchOneConstructorHookWithoutInvocationTrace() { long sensorTypeId = 7L; IConstructorHook constructorHook = mock(IConstructorHook.class); IMethodSensor methodSensor = mock(IMethodSensor.class); MethodSensorTypeConfig methodSensorConfig = mock(MethodSensorTypeConfig.class); when(methodSensor.getHook()).thenReturn(constructorHook); when(methodSensor.getSensorTypeConfig()).thenReturn(methodSensorConfig); when(methodSensorConfig.getId()).thenReturn(sensorTypeId); RegisteredSensorConfig registeredSensorConfig = mock(RegisteredSensorConfig.class); when(registeredSensorConfig.getMethodSensors()).thenReturn(Collections.singletonList(methodSensor)); when(registeredSensorConfig.getMethodSensorsReverse()).thenReturn(Collections.singletonList(methodSensor)); int methodId = 3; Object object = mock(Object.class); Object[] parameters = new Object[0]; hookDispatcher.addMapping(methodId, registeredSensorConfig); hookDispatcher.dispatchConstructorBeforeBody(methodId, parameters); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(constructorHook, times(1)).beforeConstructor(methodId, sensorTypeId, parameters, registeredSensorConfig); hookDispatcher.dispatchConstructorAfterBody(methodId, object, parameters); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensors(); verify(constructorHook, times(1)).afterConstructor(coreService, methodId, sensorTypeId, object, parameters, registeredSensorConfig); verifyZeroInteractions(object, coreService); verifyNoMoreInteractions(registeredSensorConfig, constructorHook); }
verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodId, sensorTypeId, object, parameters, registeredSensorConfig); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(methodHook, times(1)).secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, returnValue, exception, registeredSensorConfig);
RegisteredSensorConfig rsc = mappings.get(id); if (rsc.isStartsInvocation()) {
RegisteredSensorConfig rsc = mappings.get(id); if (rsc.isStartsInvocation()) {
verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); InOrder inOrder = inOrder(constructorHookOne, constructorHookTwo, constructorHookThree); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensors(); inOrder = inOrder(constructorHookOne, constructorHookTwo, constructorHookThree);
assertThat(rscCaptor.getValue().getTargetMethodName(), is(methodInstrumentationConfig.getTargetMethodName())); assertThat(rscCaptor.getValue().getReturnType(), is(methodInstrumentationConfig.getReturnType())); assertThat(rscCaptor.getValue().isStartsInvocation(), is(sensorInstrumentationPoint.isStartsInvocation())); assertThat(rscCaptor.getValue().getSettings(), is(sensorInstrumentationPoint.getSettings())); assertThat(rscCaptor.getValue().getPropertyAccessorList(), is(sensorInstrumentationPoint.getPropertyAccessorList()));
assertThat(rscCaptor.getValue().getTargetMethodName(), is(methodInstrumentationConfig.getTargetMethodName())); assertThat(rscCaptor.getValue().getReturnType(), is(methodInstrumentationConfig.getReturnType())); assertThat(rscCaptor.getValue().isStartsInvocation(), is(sensorInstrumentationPoint.isStartsInvocation())); assertThat(rscCaptor.getValue().getSettings(), is(sensorInstrumentationPoint.getSettings())); assertThat(rscCaptor.getValue().getPropertyAccessorList(), is(sensorInstrumentationPoint.getPropertyAccessorList()));
assertThat(rscCaptor.getValue().getTargetMethodName(), is(methodInstrumentationConfig.getTargetMethodName())); assertThat(rscCaptor.getValue().getReturnType(), is(methodInstrumentationConfig.getReturnType())); assertThat(rscCaptor.getValue().isStartsInvocation(), is(sensorInstrumentationPoint.isStartsInvocation())); assertThat(rscCaptor.getValue().getSettings(), is(sensorInstrumentationPoint.getSettings())); assertThat(rscCaptor.getValue().getPropertyAccessorList(), is(sensorInstrumentationPoint.getPropertyAccessorList()));
verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); InOrder inOrder = inOrder(methodHookOne, methodHookTwo, methodHookThree); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); inOrder = inOrder(methodHookOne, methodHookTwo, methodHookThree);
assertThat(rscCaptor.getValue().getTargetMethodName(), is(methodInstrumentationConfig.getTargetMethodName())); assertThat(rscCaptor.getValue().getReturnType(), is(methodInstrumentationConfig.getReturnType())); assertThat(rscCaptor.getValue().isStartsInvocation(), is(sensorInstrumentationPoint.isStartsInvocation())); assertThat(rscCaptor.getValue().getSettings(), is(sensorInstrumentationPoint.getSettings())); assertThat(rscCaptor.getValue().getPropertyAccessorList(), is(sensorInstrumentationPoint.getPropertyAccessorList()));
assertThat(rscCaptor.getValue().getTargetMethodName(), is(methodInstrumentationConfig.getTargetMethodName())); assertThat(rscCaptor.getValue().getReturnType(), is(methodInstrumentationConfig.getReturnType())); assertThat(rscCaptor.getValue().isStartsInvocation(), is(sensorInstrumentationPoint.isStartsInvocation())); assertThat(rscCaptor.getValue().getSettings(), is(sensorInstrumentationPoint.getSettings())); assertThat(rscCaptor.getValue().getPropertyAccessorList(), is(sensorInstrumentationPoint.getPropertyAccessorList()));
when(registeredSensorConfig.isStartsInvocation()).thenReturn(true); when(registeredSensorConfig.getMethodSensors()).thenReturn(Collections.<IMethodSensor> singletonList(invocationSequenceSensor)); when(registeredSensorConfig.getMethodSensorsReverse()).thenReturn(Collections.<IMethodSensor> singletonList(invocationSequenceSensor)); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(invocHook, times(1)).beforeBody(methodId, invocSensorTypeId, object, parameters, registeredSensorConfig); verify(registeredSensorConfigTwo, times(1)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(1)).getMethodSensorsReverse(); verify(methodSensor, times(1)).getHook(); verify(registeredSensorConfigTwo, times(2)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(1)).getMethodSensors(); verify(methodSensor, times(2)).getHook(); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(invocHook, times(1)).secondAfterBody(coreService, methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);
verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodId, sensorTypeId, object, parameters, registeredSensorConfig); verify(registeredConstructorSensorConfig, times(1)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensorsReverse(); verify(exceptionHook, times(1)).beforeConstructor(constructorId, exceptionSensorTypeId, parameters, registeredConstructorSensorConfig); verify(registeredConstructorSensorConfig, times(2)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensors(); verify(exceptionHook, times(1)).afterConstructor(coreService, constructorId, exceptionSensorTypeId, exceptionObject, parameters, registeredConstructorSensorConfig); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(methodHook, times(1)).secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);
when(registeredSensorConfig.isStartsInvocation()).thenReturn(true); List<IMethodSensor> sensors = Arrays.<IMethodSensor> asList(methodSensor, invocationSequenceSensor); List<IMethodSensor> sensorsReverse = Arrays.<IMethodSensor> asList(invocationSequenceSensor, methodSensor); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(methodSensor, times(1)).getHook(); verify(registeredSensorConfigTwo, times(1)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(1)).getMethodSensorsReverse(); verify(methodSensor, times(2)).getHook(); verify(registeredSensorConfigTwo, times(2)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(2)).getMethodSensors(); verify(methodSensor, times(4)).getHook(); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(methodSensor, times(6)).getHook();
if (rsc.isStartsInvocation()) { invocationSequenceCount.decrement();
verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); InOrder inOrder = inOrder(methodHookOne, methodHookTwo, methodHookThree); verify(registeredConstructorSensorConfig, times(1)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensorsReverse(); verify(exceptionHook, times(1)).beforeConstructor(constructorId, exceptionSensorTypeId, parameters, registeredConstructorSensorConfig); verify(registeredConstructorSensorConfig, times(2)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensors(); verify(exceptionHook, times(1)).afterConstructor(coreService, constructorId, exceptionSensorTypeId, exceptionObject, parameters, registeredConstructorSensorConfig); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); inOrder = inOrder(methodHookOne, methodHookTwo, methodHookThree);
if (rsc.isStartsInvocation()) { invocationSequenceCount.decrement();
when(registeredSensorConfig.isStartsInvocation()).thenReturn(true); List<IMethodSensor> sensors = Arrays.<IMethodSensor> asList(methodSensor, invocationSequenceSensor); List<IMethodSensor> sensorsReverse = Arrays.<IMethodSensor> asList(invocationSequenceSensor, methodSensor); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodId, methodSensorTypeId, object, parameters, registeredSensorConfig); verify(registeredSensorConfigTwo, times(1)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodIdTwo, methodSensorTypeId, object, parameters, registeredSensorConfigTwo); verify(registeredConstructorSensorConfig, times(1)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensorsReverse(); verify(exceptionHook, times(1)).beforeConstructor(constructorId, exceptionSensorTypeId, parameters, registeredConstructorSensorConfig); verify(registeredConstructorSensorConfig, times(2)).isStartsInvocation(); verify(registeredConstructorSensorConfig, times(1)).getMethodSensors(); verify(exceptionHook, times(1)).afterConstructor(invocHook, constructorId, exceptionSensorTypeId, exceptionObject, parameters, registeredConstructorSensorConfig); verify(registeredSensorConfigTwo, times(2)).isStartsInvocation(); verify(registeredSensorConfigTwo, times(2)).getMethodSensors(); verify(methodHook, times(1)).secondAfterBody(invocHook, methodIdTwo, methodSensorTypeId, object, parameters, returnValue, exception, registeredSensorConfigTwo); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(methodHook, times(1)).secondAfterBody(invocHook, methodId, methodSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);