use of org.finra.herd.model.dto.NotificationMessage in project herd by FINRAOS.
the class DefaultNotificationMessageBuilderTest method testBuildBusinessObjectDataStatusChangeMessagesJsonPayloadSingleAttribute.
@Test
public void testBuildBusinessObjectDataStatusChangeMessagesJsonPayloadSingleAttribute() throws Exception {
// Create a business object data entity.
BusinessObjectDataEntity businessObjectDataEntity = businessObjectDataServiceTestHelper.createTestValidBusinessObjectData(SUBPARTITION_VALUES, businessObjectFormatServiceTestHelper.getTestAttributeDefinitions(), businessObjectDefinitionServiceTestHelper.getNewAttributes());
// Get a business object data key.
BusinessObjectDataKey businessObjectDataKey = businessObjectDataHelper.getBusinessObjectDataKey(businessObjectDataEntity);
// Override configuration.
ConfigurationEntity configurationEntity = new ConfigurationEntity();
configurationEntity.setKey(ConfigurationValue.HERD_NOTIFICATION_BUSINESS_OBJECT_DATA_STATUS_CHANGE_MESSAGE_DEFINITIONS.getKey());
configurationEntity.setValueClob(xmlHelper.objectToXml(new NotificationMessageDefinitions(Collections.singletonList(new NotificationMessageDefinition(MESSAGE_TYPE, MESSAGE_DESTINATION, BUSINESS_OBJECT_DATA_STATUS_CHANGE_NOTIFICATION_MESSAGE_VELOCITY_TEMPLATE_JSON, NO_MESSAGE_HEADER_DEFINITIONS)))));
configurationDao.saveAndRefresh(configurationEntity);
// Build a notification message.
List<NotificationMessage> result = defaultNotificationMessageBuilder.buildBusinessObjectDataStatusChangeMessages(businessObjectDataKey, BDATA_STATUS, BDATA_STATUS_2);
// Validate the notification message.
assertEquals(1, CollectionUtils.size(result));
validateBusinessObjectDataStatusChangeMessageWithJsonPayload(MESSAGE_TYPE, MESSAGE_DESTINATION, businessObjectDataKey, BDATA_STATUS, BDATA_STATUS_2, Collections.singletonList(new Attribute(ATTRIBUTE_NAME_3_MIXED_CASE, ATTRIBUTE_VALUE_3)), NO_MESSAGE_HEADERS, result.get(0));
}
use of org.finra.herd.model.dto.NotificationMessage in project herd by FINRAOS.
the class DefaultNotificationMessageBuilderTest method testBuildBusinessObjectFormatVersionChangeMessagesJsonPayloadNoMessageHeaders.
@Test
public void testBuildBusinessObjectFormatVersionChangeMessagesJsonPayloadNoMessageHeaders() throws Exception {
// Create a business object format key.
BusinessObjectFormatKey businessObjectFormatKey = new BusinessObjectFormatKey(BDEF_NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION);
// Override configuration.
ConfigurationEntity configurationEntity = new ConfigurationEntity();
configurationEntity.setKey(ConfigurationValue.HERD_NOTIFICATION_BUSINESS_OBJECT_FORMAT_VERSION_CHANGE_MESSAGE_DEFINITIONS.getKey());
configurationEntity.setValueClob(xmlHelper.objectToXml(new NotificationMessageDefinitions(Collections.singletonList(new NotificationMessageDefinition(MESSAGE_TYPE, MESSAGE_DESTINATION, BUSINESS_OBJECT_FORMAT_VERSION_CHANGE_NOTIFICATION_MESSAGE_VELOCITY_TEMPLATE_JSON, NO_MESSAGE_HEADER_DEFINITIONS)))));
configurationDao.saveAndRefresh(configurationEntity);
// Build a notification message.
List<NotificationMessage> result = defaultNotificationMessageBuilder.buildBusinessObjectFormatVersionChangeMessages(businessObjectFormatKey, FORMAT_VERSION_2.toString());
// Validate the results.
assertEquals(1, CollectionUtils.size(result));
validateBusinessObjectFormatVersionChangeMessageWithJsonPayload(MESSAGE_TYPE, MESSAGE_DESTINATION, businessObjectFormatKey, businessObjectFormatKey.getBusinessObjectFormatVersion().toString(), FORMAT_VERSION_2.toString(), NO_MESSAGE_HEADERS, result.get(0));
}
use of org.finra.herd.model.dto.NotificationMessage in project herd by FINRAOS.
the class PublishNotificationMessagesAdviceTest method testPublishNotificationMessagesAmazonServiceException.
@Test
public void testPublishNotificationMessagesAmazonServiceException() throws Throwable {
// Create a notification message.
NotificationMessage notificationMessage = new NotificationMessage(MessageTypeEntity.MessageEventTypes.SQS.name(), AWS_SQS_QUEUE_NAME, MESSAGE_TEXT, Collections.singletonList(new MessageHeader(KEY, VALUE)));
// Mock a join point of the method call.
ProceedingJoinPoint joinPoint = getMockedProceedingJoinPoint("testPublishNotificationMessages");
// Mock the external calls.
doCallRealMethod().when(notificationMessageInMemoryQueue).clear();
doCallRealMethod().when(notificationMessageInMemoryQueue).add(notificationMessage);
when(notificationMessageInMemoryQueue.isEmpty()).thenCallRealMethod();
doCallRealMethod().when(notificationMessageInMemoryQueue).remove();
doThrow(new AmazonServiceException(ERROR_MESSAGE)).when(notificationMessagePublishingService).publishNotificationMessage(notificationMessage);
// Clear the queue.
notificationMessageInMemoryQueue.clear();
// Add the notification message to the queue.
notificationMessageInMemoryQueue.add(notificationMessage);
// Validate that the queue is not empty now.
assertFalse(notificationMessageInMemoryQueue.isEmpty());
// Call the method under test.
publishNotificationMessagesAdvice.publishNotificationMessages(joinPoint);
// Verify the external calls.
verify(notificationMessageInMemoryQueue, times(2)).clear();
verify(notificationMessageInMemoryQueue).add(notificationMessage);
verify(notificationMessageInMemoryQueue, times(3)).isEmpty();
verify(notificationMessageInMemoryQueue).remove();
verify(notificationMessagePublishingService).publishNotificationMessage(notificationMessage);
verify(notificationMessagePublishingService).addNotificationMessageToDatabaseQueue(notificationMessage);
verifyNoMoreInteractionsHelper();
// Validate the results.
assertTrue(notificationMessageInMemoryQueue.isEmpty());
}
use of org.finra.herd.model.dto.NotificationMessage in project herd by FINRAOS.
the class PublishNotificationMessagesAdviceTest method testPublishNotificationMessagesDatabaseException.
@Test
public void testPublishNotificationMessagesDatabaseException() throws Throwable {
// Create a notification message.
NotificationMessage notificationMessage = new NotificationMessage(MessageTypeEntity.MessageEventTypes.SQS.name(), AWS_SQS_QUEUE_NAME, MESSAGE_TEXT, Collections.singletonList(new MessageHeader(KEY, VALUE)));
// Mock a join point of the method call.
ProceedingJoinPoint joinPoint = getMockedProceedingJoinPoint("testPublishNotificationMessages");
// Mock the external calls.
doCallRealMethod().when(notificationMessageInMemoryQueue).clear();
doCallRealMethod().when(notificationMessageInMemoryQueue).add(notificationMessage);
when(notificationMessageInMemoryQueue.isEmpty()).thenCallRealMethod();
doCallRealMethod().when(notificationMessageInMemoryQueue).remove();
doThrow(new AmazonServiceException(ERROR_MESSAGE)).when(notificationMessagePublishingService).publishNotificationMessage(notificationMessage);
doThrow(new RuntimeException(ERROR_MESSAGE)).when(notificationMessagePublishingService).addNotificationMessageToDatabaseQueue(notificationMessage);
// Clear the queue.
notificationMessageInMemoryQueue.clear();
// Add the notification message to the queue.
notificationMessageInMemoryQueue.add(notificationMessage);
// Validate that the queue is not empty now.
assertFalse(notificationMessageInMemoryQueue.isEmpty());
// Call the method under test.
publishNotificationMessagesAdvice.publishNotificationMessages(joinPoint);
// Verify the external calls.
verify(notificationMessageInMemoryQueue, times(2)).clear();
verify(notificationMessageInMemoryQueue).add(notificationMessage);
verify(notificationMessageInMemoryQueue, times(3)).isEmpty();
verify(notificationMessageInMemoryQueue).remove();
verify(notificationMessagePublishingService).publishNotificationMessage(notificationMessage);
verify(notificationMessagePublishingService).addNotificationMessageToDatabaseQueue(notificationMessage);
verifyNoMoreInteractionsHelper();
// Validate the results.
assertTrue(notificationMessageInMemoryQueue.isEmpty());
}
use of org.finra.herd.model.dto.NotificationMessage in project herd by FINRAOS.
the class MessageNotificationEventServiceImpl method processNotificationMessages.
/**
* Processes a message by adding it to the "in-memory" queue for publishing by the advice.
*
* @param notificationMessages the list of notification messages, may be empty
*
* @return the list of notification messages that got queued for publishing
*/
private List<NotificationMessage> processNotificationMessages(final List<NotificationMessage> notificationMessages) {
// Create an empty result list.
List<NotificationMessage> result = new ArrayList<>();
// Check if message notification is enabled.
boolean herdSqsNotificationEnabled = configurationHelper.getBooleanProperty(ConfigurationValue.HERD_NOTIFICATION_SQS_ENABLED);
// Only process messages if the service is enabled.
if (herdSqsNotificationEnabled) {
// Process the list of notification messages.
for (NotificationMessage notificationMessage : notificationMessages) {
// Add the message to the "in-memory" queue if a message was configured. Otherwise, log a warning.
if (StringUtils.isNotBlank(notificationMessage.getMessageText())) {
notificationMessageInMemoryQueue.add(notificationMessage);
result.add(notificationMessage);
} else {
LOGGER.warn("Not sending notification message because it is not configured. messageType={} messageDestination={}", notificationMessage.getMessageType(), notificationMessage.getMessageDestination());
}
}
}
return result;
}
Aggregations