Skip to content

Commit

Permalink
Merge 6398d86 into bff9e72
Browse files Browse the repository at this point in the history
  • Loading branch information
allanmckenzie committed Dec 19, 2019
2 parents bff9e72 + 6398d86 commit a2b7970
Show file tree
Hide file tree
Showing 8 changed files with 180 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@
import uk.gov.justice.services.test.utils.core.messaging.Poller;
import uk.gov.justice.services.test.utils.persistence.DatabaseCleaner;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package uk.gov.justice.services.example.cakeshop.it;

import static java.util.Optional.empty;
import static java.util.Optional.of;
import static java.util.UUID.randomUUID;
import static javax.json.Json.createArrayBuilder;
import static javax.json.Json.createObjectBuilder;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom;
import static uk.gov.justice.services.messaging.JsonEnvelope.metadataBuilder;

import uk.gov.justice.services.example.cakeshop.it.helpers.EventErrorLogRepositoryFactory;
import uk.gov.justice.services.example.cakeshop.it.helpers.EventSender;
import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.services.system.domain.EventError;
import uk.gov.justice.services.system.persistence.EventErrorLogRepository;
import uk.gov.justice.services.test.utils.core.messaging.Poller;
import uk.gov.justice.services.test.utils.persistence.DatabaseCleaner;
import uk.gov.justice.services.test.utils.persistence.TestJdbcDataSourceProvider;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

import javax.json.JsonObject;
import javax.sql.DataSource;

import org.junit.Before;
import org.junit.Test;

public class EventErrorHandlingIT {

private static final String TOPIC_NAME = "example.event";

private final EventSender eventSender = new EventSender();

private final DataSource systemDataSource = new TestJdbcDataSourceProvider().getSystemDataSource("framework");
private final EventErrorLogRepositoryFactory eventErrorLogRepositoryFactory = new EventErrorLogRepositoryFactory();

private final DatabaseCleaner databaseCleaner = new DatabaseCleaner();

private final Poller poller = new Poller();

@Before
public void cleanDatabase() {
databaseCleaner.cleanSystemTables("framework");
}

@Test
public void shouldStoreEventProcessingErrorsInTheDatabase() throws Exception {

final UUID recipeId = randomUUID();
final UUID eventId = randomUUID();
final String eventName = "example.events.recipe-added";

final JsonObject jsonObject = createObjectBuilder()
.add("recipeId", recipeId.toString())
.add("name", "Chocolate muffin")
.add("glutenFree", true)
.add("ingredients", createArrayBuilder()
.add(createObjectBuilder()
.add("name", "someIngredient")
.add("quantity", 1)
).build()
).build();

final JsonEnvelope eventWithMissingEventNumberEnvelope = envelopeFrom(
metadataBuilder()
.withId(eventId)
.withName(eventName)
.withStreamId(recipeId)
.withPosition(1L)
.build(),
jsonObject);

assertThat(eventWithMissingEventNumberEnvelope.metadata().eventNumber(), is(empty()));

eventSender.sendToTopic(eventWithMissingEventNumberEnvelope, TOPIC_NAME);

final EventErrorLogRepository eventErrorLogRepository = eventErrorLogRepositoryFactory.create(systemDataSource);

final Optional<EventError> eventError = poller.pollUntilFound(() -> {
final List<EventError> eventErrors = eventErrorLogRepository.findAll();

if (eventErrors.size() > 0) {
return of(eventErrors.get(0));
}

return empty();
});

if (eventError.isPresent()) {
assertThat(eventError.get().getEventId(), is(eventId));
assertThat(eventError.get().getEventName(), is(eventName));
assertThat(eventError.get().getEventNumber(), is(empty()));
assertThat(eventError.get().getComponent(), is("EVENT_LISTENER"));
} else {
fail();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import uk.gov.justice.services.example.cakeshop.it.helpers.ApiResponse;
import uk.gov.justice.services.example.cakeshop.it.helpers.CommandSender;
import uk.gov.justice.services.example.cakeshop.it.helpers.EventFactory;
import uk.gov.justice.services.example.cakeshop.it.helpers.EventSender;
import uk.gov.justice.services.example.cakeshop.it.helpers.JmsBootstrapper;
import uk.gov.justice.services.example.cakeshop.it.helpers.Querier;
import uk.gov.justice.services.example.cakeshop.it.helpers.RestEasyClientFactory;
Expand All @@ -26,10 +27,8 @@
import java.util.UUID;

import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.json.JsonObject;
import javax.ws.rs.client.Client;

Expand All @@ -44,6 +43,7 @@ public class MultipleEventListenerCakeShopIT {

private final EventFactory eventFactory = new EventFactory();
private final JmsBootstrapper jmsBootstrapper = new JmsBootstrapper();
private final EventSender eventSender = new EventSender();

private Client client;
private Querier querier;
Expand All @@ -69,12 +69,7 @@ public void shouldReturnRecipeFromOtherEventListener() throws Exception {

//adding 1 recipe as other event
final UUID recipeId2 = randomUUID();

try (final Session jmsSession = jmsBootstrapper.jmsSession()) {
final Topic topic = jmsSession.createTopic("other.event");

try (final MessageProducer producer = jmsSession.createProducer(topic);) {

final String topicName = "other.event";
final JsonObject jsonObject = createObjectBuilder()
.add("recipeId", recipeId2.toString())
.add("name", "Chocolate muffin")
Expand All @@ -95,15 +90,7 @@ public void shouldReturnRecipeFromOtherEventListener() throws Exception {
.build(),
jsonObject);

@SuppressWarnings("deprecation") final String json = jsonEnvelope.toDebugStringPrettyPrint();
final TextMessage message = jmsSession.createTextMessage();

message.setText(json);
message.setStringProperty("CPPNAME", "other.recipe-added");

producer.send(message);
}
}
eventSender.sendToTopic(jsonEnvelope, topicName);

await().until(() -> {
final String responseBody = querier.recipesQueryResult(singletonList(new BasicNameValuePair("pagesize", "30"))).body();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package uk.gov.justice.services.example.cakeshop.it.helpers;

import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

import uk.gov.justice.services.jdbc.persistence.SystemJdbcDataSourceProvider;
import uk.gov.justice.services.system.persistence.EventErrorLogRepository;

import javax.sql.DataSource;

import org.mockito.InjectMocks;
import org.mockito.Mock;

public class EventErrorLogRepositoryFactory {

@Mock
private SystemJdbcDataSourceProvider systemJdbcDataSourceProvider;

@InjectMocks
private EventErrorLogRepository eventErrorLogRepository;


public EventErrorLogRepository create(final DataSource systemDataSource) {

initMocks(this);

when(systemJdbcDataSourceProvider.getDataSource()).thenReturn(systemDataSource);

return eventErrorLogRepository;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package uk.gov.justice.services.example.cakeshop.it.helpers;

import uk.gov.justice.services.messaging.JsonEnvelope;

import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

public class EventSender {

private final JmsBootstrapper jmsBootstrapper = new JmsBootstrapper();

public void sendToTopic(final JsonEnvelope jsonEnvelope, final String topicName) throws JMSException {
try (final Session jmsSession = jmsBootstrapper.jmsSession()) {
final Topic topic = jmsSession.createTopic(topicName);

try (final MessageProducer producer = jmsSession.createProducer(topic);) {

@SuppressWarnings("deprecation") final String json = jsonEnvelope.toDebugStringPrettyPrint();
final TextMessage message = jmsSession.createTextMessage();

message.setText(json);
message.setStringProperty("CPPNAME", jsonEnvelope.metadata().name());

producer.send(message);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@
<managed-executor-services>
<managed-executor-service name="default"
jndi-name="java:jboss/ee/concurrency/executor/default"
core-threads="20"
max-threads="250"
context-service="default" hung-task-threshold="60000"
keepalive-time="5000"/>
</managed-executor-services>
Expand Down
5 changes: 5 additions & 0 deletions example-context/example-service/example-single/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@
<artifactId>event-store-management-commands</artifactId>
<version>${event-store.version}</version>
</dependency>
<dependency>
<groupId>uk.gov.justice.services</groupId>
<artifactId>framework-system-errors</artifactId>
<version>${framework.version}</version>
</dependency>

<!-- Test Dependencies -->
<dependency>
Expand Down
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
<properties>
<cpp.repo.name>cake-shop</cpp.repo.name>

<framework-api.version>4.1.0</framework-api.version>
<framework.version>6.4.0</framework.version>
<event-store.version>2.4.2</event-store.version>
<framework-generators.version>2.4.0</framework-generators.version>
<framework-api.version>4.2.1</framework-api.version>
<framework.version>6.5.0-M5</framework.version>
<event-store.version>2.5.0-M1</event-store.version>
<framework-generators.version>2.5.0-M1</framework-generators.version>
<file.service.version>1.17.12</file.service.version>

<common-bom.version>2.4.0</common-bom.version>
Expand Down

0 comments on commit a2b7970

Please sign in to comment.