/** * {@inheritDoc} */ @Override public void beforeConstructor(long methodId, long sensorTypeId, Object[] parameters, RegisteredSensorConfig rsc) { beforeBody(methodId, sensorTypeId, null, parameters, rsc); }
/** * {@inheritDoc} */ @Override public void afterConstructor(ICoreService coreService, long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { firstAfterBody(methodId, sensorTypeId, object, parameters, null, false, rsc); secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, null, false, rsc); }
/** * {@inheritDoc} */ @Override public void asyncSpanContextCreated(SpanContextImpl spanContextImpl) { invocationSequenceHook.asyncSpanContextCreated(spanContextImpl); }
/** * Tests that skip is activated when certain sensor is only defined in the * {@link RegisteredSensorConfig}. * * @see #skippingSensors() */ @Test(dataProvider = "skippingSensors") public void skipSingleSensor(Class<? extends ISensor> sensorClass) { long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[0]; Object result = mock(Object.class); MethodSensorTypeConfig sensorConfig = mock(MethodSensorTypeConfig.class); when(sensorConfig.getClassName()).thenReturn(sensorClass.getName()); when(rsc.getMethodSensors()).thenReturn(Collections.singletonList(methodSensor)); when(methodSensor.getSensorTypeConfig()).thenReturn(sensorConfig); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc); verifyZeroInteractions(timer, coreService, realCoreService); }
InvocationSequenceHook invocHook = mock(InvocationSequenceHook.class); MethodSensorTypeConfig invocationSensorConfig = mock(MethodSensorTypeConfig.class); when(invocationSequenceSensor.getSensorTypeConfig()).thenReturn(invocationSensorConfig); when(invocationSequenceSensor.getHook()).thenReturn(invocHook); when(invocationSensorConfig.getId()).thenReturn(invocSensorTypeId); verify(registeredSensorConfig, times(1)).isStartsInvocation(); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(invocHook, times(1)).beforeBody(methodId, invocSensorTypeId, object, parameters, registeredSensorConfig); verify(invocHook, times(1)).firstAfterBody(methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig); verify(registeredSensorConfig, times(2)).isStartsInvocation(); verify(registeredSensorConfig, times(2)).getMethodSensors(); verify(invocHook, times(1)).secondAfterBody(coreService, methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);
when(invocSensorType.getId()).thenReturn(invocSensorTypeId); InvocationSequenceHook invocHook = mock(InvocationSequenceHook.class); when(invocationSequenceSensor.getSensorTypeConfig()).thenReturn(invocSensorType); when(invocationSequenceSensor.getHook()).thenReturn(invocHook); verify(registeredSensorConfig, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodId, methodSensorTypeId, object, parameters, registeredSensorConfig); verify(invocHook, times(1)).beforeBody(methodId, invocSensorTypeId, object, parameters, registeredSensorConfig); verify(registeredSensorConfigTwo, times(1)).getMethodSensorsReverse(); verify(methodHook, times(1)).beforeBody(methodIdTwo, methodSensorTypeId, object, parameters, registeredSensorConfigTwo); verify(invocHook, times(1)).beforeBody(eq(methodIdTwo), anyLong(), eq(object), eq(parameters), eq(registeredSensorConfigTwo)); verify(registeredConstructorSensorConfig, times(1)).getMethodSensorsReverse(); verify(exceptionHook, times(1)).beforeConstructor(constructorId, exceptionSensorTypeId, parameters, registeredConstructorSensorConfig); verify(invocHook, times(1)).beforeConstructor(eq(constructorId), anyLong(), eq(parameters), eq(registeredConstructorSensorConfig)); verify(registeredConstructorSensorConfig, times(1)).getMethodSensors(); verify(exceptionHook, times(1)).afterConstructor(invocHook, constructorId, exceptionSensorTypeId, exceptionObject, parameters, registeredConstructorSensorConfig); verify(invocHook, times(1)).afterConstructor(eq(coreService), eq(constructorId), anyLong(), eq(exceptionObject), eq(parameters), eq(registeredConstructorSensorConfig)); verify(registeredSensorConfigTwo, times(2)).getMethodSensors(); verify(methodHook, times(1)).secondAfterBody(invocHook, methodIdTwo, methodSensorTypeId, object, parameters, returnValue, exception, registeredSensorConfigTwo); verify(invocHook, times(1)).secondAfterBody(eq(coreService), eq(methodIdTwo), anyLong(), eq(object), eq(parameters), eq(returnValue), eq(exception), eq(registeredSensorConfigTwo)); verify(registeredSensorConfig, times(1)).getMethodSensors(); verify(methodHook, times(1)).firstAfterBody(methodId, methodSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig); verify(invocHook, times(1)).firstAfterBody(methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);
invocationSequenceHook = new InvocationSequenceHook(timer, platformManager, realCoreService, tracer, propertyAccessor, Collections.<String, Object> emptyMap(), true); when(methodSensor.getSensorTypeConfig()).thenReturn(sensorConfig); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc);
when(methodSensor.getSensorTypeConfig()).thenReturn(methodSensorTypeConfig); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.asyncSpanContextCreated(context); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc);
/** * {@inheritDoc} */ @Override protected void initHook(Map<String, Object> parameters) { boolean enhancedExceptionSensor; try { enhancedExceptionSensor = configurationStorage.isEnhancedExceptionSensorActivated(); } catch (StorageException storageException) { enhancedExceptionSensor = false; } invocationSequenceHook = new InvocationSequenceHook(timer, platformManager, coreService, tracer, propertyAccessor, parameters, enhancedExceptionSensor); }
invocationSequenceHolder.set(invocationSequenceSensor.getHook());
/** * {@inheritDoc} */ @Override public void firstAfterBody(long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) { if (skip(rsc)) { return; } InvocationSequenceData invocationSequenceData = threadLocalInvocationData.get(); if (null != invocationSequenceData) { if (methodId == invocationStartId.get().longValue()) { long count = invocationStartIdCount.get().longValue(); invocationStartIdCount.set(Long.valueOf(count - 1)); if (0 == (count - 1)) { timeStack.push(new Double(timer.getCurrentTime())); } } } }
/** * {@inheritDoc} */ @Override public void addDefaultData(DefaultData defaultData) { if (null == threadLocalInvocationData.get()) { LOG.error("thread data NULL!!!!"); return; } saveDataObject(defaultData); // delegate to real core service in case of the span if (AbstractSpan.class.isAssignableFrom(defaultData.getClass())) { realCoreService.addDefaultData(defaultData); } }
@Test public void propertyAccessException() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(rsc.isPropertyAccess()).thenReturn(true); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, true, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, true, rsc); verify(rsc, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(rsc.getPropertyAccessorList(), object, parameters, result, true); }
MethodSensorTypeConfig invocSensorType = mock(MethodSensorTypeConfig.class); InvocationSequenceHook invocHook = mock(InvocationSequenceHook.class); when(invocationSequenceSensor.getSensorTypeConfig()).thenReturn(invocSensorType); when(invocationSequenceSensor.getHook()).thenReturn(invocHook); when(invocSensorType.getId()).thenReturn(invocSensorTypeId); verify(methodSensor, times(1)).getHook(); verify(methodHook, times(1)).beforeBody(methodId, methodSensorTypeId, object, parameters, registeredSensorConfig); verify(invocHook, times(1)).beforeBody(methodId, invocSensorTypeId, object, parameters, registeredSensorConfig); verify(methodSensor, times(2)).getHook(); verify(methodHook, times(1)).beforeBody(methodIdTwo, methodSensorTypeId, object, parameters, registeredSensorConfigTwo); verify(invocHook, times(1)).beforeBody(eq(methodIdTwo), anyLong(), eq(object), eq(parameters), eq(registeredSensorConfigTwo)); verify(methodSensor, times(4)).getHook(); verify(methodHook, times(1)).secondAfterBody(invocHook, methodIdTwo, methodSensorTypeId, object, parameters, returnValue, exception, registeredSensorConfigTwo); verify(invocHook, times(1)).secondAfterBody(eq(coreService), eq(methodIdTwo), anyLong(), eq(object), eq(parameters), eq(returnValue), eq(exception), eq(registeredSensorConfigTwo)); verify(methodSensor, times(5)).getHook(); verify(methodHook, times(1)).firstAfterBody(methodId, methodSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig); verify(invocHook, times(1)).firstAfterBody(methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig); verify(methodSensor, times(6)).getHook(); verify(methodHook, times(1)).secondAfterBody(invocHook, methodId, methodSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig); verify(invocHook, times(1)).secondAfterBody(coreService, methodId, invocSensorTypeId, object, parameters, returnValue, false, registeredSensorConfig);
@BeforeMethod public void init() { invocationSequenceHook = new InvocationSequenceHook(timer, platformManager, realCoreService, tracer, propertyAccessor, Collections.<String, Object> emptyMap(), false); }
invocationSequenceHolder.set(invocationSequenceSensor.getHook());
if (skip(rsc)) { return;
@Test public void propertyAccess() { // set up data long platformId = 1L; long methodId = 3L; long sensorTypeId = 11L; Object object = mock(Object.class); Object[] parameters = new Object[2]; Object result = mock(Object.class); Double firstTimerValue = 1000.453d; Double secondTimerValue = 1323.675d; when(timer.getCurrentTime()).thenReturn(firstTimerValue).thenReturn(secondTimerValue); when(platformManager.getPlatformId()).thenReturn(platformId); when(rsc.isPropertyAccess()).thenReturn(true); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc); verify(rsc, times(1)).isPropertyAccess(); verify(propertyAccessor, times(1)).getParameterContentData(rsc.getPropertyAccessorList(), object, parameters, result, false); }
when(rsc.getMethodSensors()).thenReturn(Collections.<IMethodSensor> emptyList()); invocationSequenceHook.beforeBody(methodId1, sensorTypeId, object, parameters, rsc); invocationSequenceHook.beforeBody(methodId2, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId2, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId2, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.firstAfterBody(methodId1, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId1, sensorTypeId, object, parameters, result, false, rsc);
when(methodSensor.getSensorTypeConfig()).thenReturn(methodSensorTypeConfig); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc); when(timer.getCurrentTime()).thenReturn(firstTimerValue, secondTimerValue); invocationSequenceHook.beforeBody(methodId, sensorTypeId, object, parameters, rsc); invocationSequenceHook.firstAfterBody(methodId, sensorTypeId, object, parameters, result, false, rsc); invocationSequenceHook.secondAfterBody(coreService, methodId, sensorTypeId, object, parameters, result, false, rsc);