/** * {@inheritDoc} */ @Override protected void processData(DefaultData defaultData, EntityManager entityManager) { connectErrorMessagesInExceptionData((ExceptionSensorData) defaultData); }
/** * Tests the {@link ExceptionMessageCmrProcessor}. */ @Test public void exceptionMessageProcessor() { ExceptionMessageCmrProcessor processor = new ExceptionMessageCmrProcessor(); // only exceptions assertThat(processor.canBeProcessed(new TimerData()), is(false)); // don't fail on null processor.process((DefaultData) null, entityManager); verifyZeroInteractions(entityManager); ExceptionSensorData parent = new ExceptionSensorData(); parent.setErrorMessage("parentMsg"); ExceptionSensorData child = new ExceptionSensorData(); child.setErrorMessage("childMsg"); parent.setChild(child); // prove message changing processor.process(parent, entityManager); assertThat(parent.getErrorMessage(), is("parentMsg")); assertThat(child.getErrorMessage(), is("parentMsg")); }
/** * Process all the exceptions in the invData and passes exceptions to the chained processors. * <br> * <br> * Note also that only exception data with CREATED event are processed, since the PASSED and * HANDLED should be connected as children to the CREATED one. * * @param entityManager * {@link EntityManager} needed for DB persistence. * @param invData * Invocation data to be processed. * @param topInvocationParent * Top invocation object. */ private void processExceptionSensorData(EntityManager entityManager, InvocationSequenceData invData, InvocationSequenceData topInvocationParent) { if (CollectionUtils.isNotEmpty(invData.getExceptionSensorDataObjects())) { for (ExceptionSensorData exceptionData : invData.getExceptionSensorDataObjects()) { if (exceptionData.getExceptionEvent() == ExceptionEvent.CREATED) { // only if created exception is in invocation set to the parent topInvocationParent.setNestedExceptions(Boolean.TRUE); // we need to directly call Exception message processor, cause it can not be // chained exceptionMessageCmrProcessor.process(exceptionData, entityManager); exceptionData.addInvocationParentId(topInvocationParent.getId()); passToChainedProcessors(exceptionData, entityManager); } } } }
verify(exceptionMessageCmrProcessor, times(0)).process(exceptionSensorData, entityManager); verifyNoMoreInteractions(chainedProcessor, exceptionMessageCmrProcessor); verifyZeroInteractions(entityManager);
verify(exceptionMessageCmrProcessor, times(1)).process(exceptionSensorData, entityManager); verifyNoMoreInteractions(chainedProcessor, exceptionMessageCmrProcessor); verifyZeroInteractions(entityManager);
/** * Connects exception message between linked exception data. * * @param exceptionSensorData * Parent exception data, thus the one that has exception event CREATED. */ private void connectErrorMessagesInExceptionData(ExceptionSensorData exceptionSensorData) { ExceptionSensorData child = exceptionSensorData.getChild(); if (null != child) { child.setErrorMessage(exceptionSensorData.getErrorMessage()); connectErrorMessagesInExceptionData(child); } }