package org.infinispan.server.router.integration; import static org.assertj.core.api.Assertions.assertThat; import java.net.InetAddress; import org.infinispan.rest.embedded.netty4.NettyRestServer; import org.infinispan.server.router.MultiTenantRouter; import org.infinispan.server.router.configuration.builder.MultiTenantRouterConfigurationBuilder; import org.infinispan.server.router.routes.Route; import org.infinispan.server.router.routes.rest.NettyRestServerRouteDestination; import org.infinispan.server.router.routes.rest.RestRouteSource; import org.infinispan.server.router.utils.RestClient; import org.infinispan.server.router.utils.RestTestingUtil; import org.junit.Test; public class RestRouterTest { /** * In this scenario we create 2 REST servers, each one with different REST Path: <ul> <li>REST1 - * http://127.0.0.1:8080/rest/rest1</li> <li>REST2 - http://127.0.0.1:8080/rest/rest2</li> </ul> * <p> * The router should match requests based on path and redirect them to proper server. */ @Test public void shouldRouteToProperRestServerBasedOnPath() throws Exception { //given NettyRestServer restServer1 = RestTestingUtil.createDefaultRestServer(); NettyRestServer restServer2 = RestTestingUtil.createDefaultRestServer(); NettyRestServerRouteDestination rest1Destination = new NettyRestServerRouteDestination("rest1", restServer1.getServer()); RestRouteSource rest1Source = new RestRouteSource("rest1"); Route<RestRouteSource, NettyRestServerRouteDestination> routeToRest1 = new Route<>(rest1Source, rest1Destination); NettyRestServerRouteDestination rest2Destination = new NettyRestServerRouteDestination("rest2", restServer2.getServer()); RestRouteSource rest2Source = new RestRouteSource("rest2"); Route<RestRouteSource, NettyRestServerRouteDestination> routeToRest2 = new Route<>(rest2Source, rest2Destination); MultiTenantRouterConfigurationBuilder routerConfigurationBuilder = new MultiTenantRouterConfigurationBuilder(); routerConfigurationBuilder .rest() //FIXME: Use random port, see: RESTEASY-1429 .port(8080) .ip(InetAddress.getLoopbackAddress()) .routing() .add(routeToRest1) .add(routeToRest2); MultiTenantRouter router = new MultiTenantRouter(routerConfigurationBuilder.build()); router.start(); //when RestClient rest1Client = new RestClient("http://127.0.0.1:8080/rest/rest1"); RestClient rest2Client = new RestClient("http://127.0.0.1:8080/rest/rest2"); rest1Client.put("test", "rest1"); rest2Client.put("test", "rest2"); String valueReturnedFromRest1 = rest1Client.get("test"); String valueReturnedFromRest2 = rest2Client.get("test"); //then assertThat(valueReturnedFromRest1).isEqualTo("rest1"); assertThat(valueReturnedFromRest2).isEqualTo("rest2"); } }