Skip to content

Commit

Permalink
OHFJIRA-45 - Stop processing synchronous requests in stopping mode
Browse files Browse the repository at this point in the history
  • Loading branch information
roman-havlicek committed Jun 4, 2017
1 parent 06df415 commit 7864129
Show file tree
Hide file tree
Showing 14 changed files with 404 additions and 34 deletions.
@@ -1,9 +1,12 @@
package org.openhubframework.openhub.api.entity;
package org.openhubframework.openhub.api.route;

/**
* Type of route.
* For identify new type of route implements {@link RouteTypeResolver}.
*
* @author Roman Havlicek
* @see RouteTypeResolver
* @see RouteTypeHelper
* @since 2.0
*/
public interface RouteType {
Expand Down
@@ -1,4 +1,4 @@
package org.openhubframework.openhub.spi.route;
package org.openhubframework.openhub.api.route;

import javax.annotation.Nullable;

Expand All @@ -9,14 +9,11 @@
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

import org.openhubframework.openhub.api.entity.RouteType;

/**
* Contains information about route for getting {@link RouteType} in {@link RouteTypeResolver}.
*
* @author Romah Havlicek
* @see RouteType
* @see RouteDefinitionService
* @see RouteTypeResolver
* @since 2.0
*/
Expand Down
@@ -1,15 +1,12 @@
package org.openhubframework.openhub.spi.route;
package org.openhubframework.openhub.api.route;

import javax.annotation.Nullable;

import org.openhubframework.openhub.api.entity.RouteType;

/**
* Resolver for getting {@link RouteType} from {@link RouteTypeHelper}.
*
* @author Romah Havlicek
* @see RouteType
* @see RouteDefinitionService
* @see RouteTypeHelper
* @since 2.0
*/
Expand All @@ -22,5 +19,5 @@ public interface RouteTypeResolver {
* @return route type, {@code NULL} route type was not recognized
*/
@Nullable
RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper);
RouteType findRouteType(RouteTypeHelper routeTypeHelper);
}
Expand Up @@ -2,10 +2,12 @@

import javax.annotation.Nullable;

import org.openhubframework.openhub.api.entity.RouteType;
import org.openhubframework.openhub.api.route.RouteType;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Service for getting information about route..
* Service for getting information about route.
*
* @author Roman Havlicek
* @see RouteType
Expand All @@ -22,7 +24,7 @@ public interface RouteDefinitionService {
* @return route type, {@code NULL} route type was not recognized
*/
@Nullable
RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper);
RouteType findRouteType(RouteTypeHelper routeTypeHelper);

/**
* Gets if route is input route.
Expand Down
Expand Up @@ -9,8 +9,8 @@
import org.openhubframework.openhub.core.common.route.RouteTypeEnum;
import org.openhubframework.openhub.spi.node.NodeService;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Policy that check if ESB is stopped and refused with exception {@link StoppingException} all incoming call.
Expand Down
Expand Up @@ -11,8 +11,8 @@
import org.openhubframework.openhub.core.common.route.RouteTypeEnum;
import org.openhubframework.openhub.spi.node.NodeService;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Factory for create {@link HandleMessagePolicy} which refused incoming call for input route if ESB is stopped.
Expand Down
Expand Up @@ -8,10 +8,10 @@
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import org.openhubframework.openhub.api.entity.RouteType;
import org.openhubframework.openhub.api.route.RouteType;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Default service for getting information about route.
Expand All @@ -32,13 +32,13 @@ public class RouteDefinitionServiceImpl implements RouteDefinitionService {

@Nullable
@Override
public RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper) {
public RouteType findRouteType(RouteTypeHelper routeTypeHelper) {
Assert.notNull(routeTypeHelper, "routeTypeHelper must not be null");

RouteType result = null;
if (!CollectionUtils.isEmpty(routeTypeResolvers)) {
for (RouteTypeResolver routeTypeResolver : routeTypeResolvers) {
result = routeTypeResolver.findRouteTypeForRoute(routeTypeHelper);
result = routeTypeResolver.findRouteType(routeTypeHelper);
if (result != null) {
break;
}
Expand All @@ -51,7 +51,7 @@ public RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper) {
public boolean isInputRoute(RouteTypeHelper routeTypeHelper) {
Assert.notNull(routeTypeHelper, "routeTypeHelper must not be null");

RouteType routeType = findRouteTypeForRoute(routeTypeHelper);
RouteType routeType = findRouteType(routeTypeHelper);
return routeType != null && routeType.getName().equals(RouteTypeEnum.INPUT.getName());
}
}
@@ -1,9 +1,9 @@
package org.openhubframework.openhub.core.common.route;

import org.openhubframework.openhub.api.entity.RouteType;
import org.openhubframework.openhub.api.route.RouteType;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Contains all base route types.
Expand Down
Expand Up @@ -8,12 +8,12 @@
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import org.openhubframework.openhub.api.entity.RouteType;
import org.openhubframework.openhub.api.route.RouteType;
import org.openhubframework.openhub.api.entity.ServiceExtEnum;
import org.openhubframework.openhub.api.route.AbstractBasicRoute;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Resolver for getting {@link RouteType} by route input route identifier ({@link RouteDefinition#routeId(String)}).
Expand All @@ -40,7 +40,7 @@ public class RouteTypeInRouteIdResolver implements RouteTypeResolver {

@Nullable
@Override
public RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper) {
public RouteType findRouteType(RouteTypeHelper routeTypeHelper) {
Assert.notNull(routeTypeHelper, "routeTypeHelper must not be null");

String routeId = routeTypeHelper.getRouteId();
Expand Down
Expand Up @@ -14,10 +14,10 @@
import org.openhubframework.openhub.api.configuration.ConfigurableValue;
import org.openhubframework.openhub.api.configuration.ConfigurationItem;
import org.openhubframework.openhub.api.configuration.CoreProps;
import org.openhubframework.openhub.api.entity.RouteType;
import org.openhubframework.openhub.api.route.RouteType;
import org.openhubframework.openhub.spi.route.RouteDefinitionService;
import org.openhubframework.openhub.spi.route.RouteTypeHelper;
import org.openhubframework.openhub.spi.route.RouteTypeResolver;
import org.openhubframework.openhub.api.route.RouteTypeHelper;
import org.openhubframework.openhub.api.route.RouteTypeResolver;

/**
* Resolver for getting {@link RouteType} by route input URI ({@link RouteDefinition#from(String)}).
Expand All @@ -41,7 +41,7 @@ public class RouteTypeUriResolver implements RouteTypeResolver {

@Nullable
@Override
public RouteType findRouteTypeForRoute(RouteTypeHelper routeTypeHelper) {
public RouteType findRouteType(RouteTypeHelper routeTypeHelper) {
Assert.notNull(routeTypeHelper, "routeTypeHelper must not be null");

Set<String> uris = new HashSet<>();
Expand Down
@@ -0,0 +1,129 @@
package org.openhubframework.openhub.core.common.handlemessage;

import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
import static org.openhubframework.openhub.api.configuration.CoreProps.URI_INPUT_PATTERN_FILTER;

import org.apache.camel.EndpointInject;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.TestPropertySource;

import org.openhubframework.openhub.api.entity.MutableNode;
import org.openhubframework.openhub.api.exception.IntegrationException;
import org.openhubframework.openhub.api.route.AbstractBasicRoute;
import org.openhubframework.openhub.core.AbstractCoreTest;
import org.openhubframework.openhub.core.common.asynch.ExceptionTranslationRoute;
import org.openhubframework.openhub.spi.node.ChangeNodeCallback;
import org.openhubframework.openhub.spi.node.NodeService;
import org.openhubframework.openhub.test.data.ExternalSystemTestEnum;
import org.openhubframework.openhub.test.data.ServiceTestEnum;
import org.openhubframework.openhub.test.route.ActiveRoutes;

/**
* Test for {@link HandleMessagePolicyFactory}.
*
* @author Roman Havlicek
* @see HandleMessagePolicyFactory
* @since 2.0
*/
@ActiveRoutes(classes = ExceptionTranslationRoute.class)
@TestPropertySource(properties = {URI_INPUT_PATTERN_FILTER + "=direct:inputUri"})
public class HandleMessagePolicyFactoryTest extends AbstractCoreTest {

@EndpointInject(uri = "mock:inputRoute")
private MockEndpoint inputRouteMock;

@EndpointInject(uri = "mock:inputUri")
private MockEndpoint inputUriMock;

@EndpointInject(uri = "mock:outputRoute")
private MockEndpoint outputRouteMock;

@Produce
private ProducerTemplate producer;

@Autowired
private NodeService nodeService;

/**
* Init routes for test.
*
* @throws Exception all errors
*/
@Before
public void init() throws Exception {
getCamelContext().addRoutes(new AbstractBasicRoute() {
@Override
protected void doConfigure() throws Exception {
from("direct:inputRoute")
.routeId(getInRouteId(ServiceTestEnum.ACCOUNT, "input"))
.to(inputRouteMock);

from("direct:inputUri")
.routeId(getRouteId(ServiceTestEnum.CUSTOMER, "create"))
.to(inputUriMock);

from("direct:outputRoute")
.routeId(getExternalRouteId(ExternalSystemTestEnum.BILLING, "output"))
.to(outputRouteMock);
}
});
}

/**
* Test when actual node is running.
*
* @throws Exception all errors
*/
@Test
public void testNodeRun() throws Exception {
inputRouteMock.setExpectedMessageCount(1);
inputUriMock.setExpectedMessageCount(1);
outputRouteMock.setExpectedMessageCount(1);

producer.sendBody("direct:inputRoute", "Body");
producer.sendBody("direct:inputUri", "Body");
producer.sendBody("direct:outputRoute", "Body");

assertIsSatisfied(inputRouteMock, inputUriMock, outputRouteMock);
}

/**
* Test when actual node is stopped.
*
* @throws Exception all errors
*/
@Test
public void testNodeStop() throws Exception {
nodeService.update(nodeService.getActualNode(), new ChangeNodeCallback() {
@Override
public void updateNode(MutableNode node) {
node.setStoppedState();
}
});

inputRouteMock.setExpectedMessageCount(0);
inputUriMock.setExpectedMessageCount(0);
outputRouteMock.setExpectedMessageCount(1);

try {
producer.sendBody("direct:inputRoute", "Body");
} catch (Exception e) {
assertThat(e.getCause(), instanceOf(IntegrationException.class));
}
try {
producer.sendBody("direct:inputUri", "Body");
} catch (Exception e) {
assertThat(e.getCause(), instanceOf(IntegrationException.class));
}
producer.sendBody("direct:outputRoute", "Body");

assertIsSatisfied(inputRouteMock, inputUriMock, outputRouteMock);
}
}

0 comments on commit 7864129

Please sign in to comment.