package org.springframework.cloud.netflix.zuul.filters.discovery;
import org.junit.Before;
import org.junit.Test;
import com.netflix.zuul.context.RequestContext;
import static org.junit.Assert.assertEquals;
/**
* @author Stéphane Leroy
*/
public class PatternServiceRouteMapperTests {
/**
* Service pattern that follow convention {domain}-{name}-{version}. The name is
* optional
*/
public static final String SERVICE_PATTERN = "(?<domain>^\\w+)(-(?<name>\\w+)-|-)(?<version>v\\d+$)";
public static final String ROUTE_PATTERN = "${version}/${domain}/${name}";
@Before
public void setTestRequestcontext() {
RequestContext context = new RequestContext();
RequestContext.testSetCurrentContext(context);
}
@Test
public void test_return_mapped_route_if_serviceid_matches() {
PatternServiceRouteMapper toTest = new PatternServiceRouteMapper(SERVICE_PATTERN,
ROUTE_PATTERN);
assertEquals("service version convention", "v1/rest/service",
toTest.apply("rest-service-v1"));
}
@Test
public void test_return_serviceid_if_no_matches() {
PatternServiceRouteMapper toTest = new PatternServiceRouteMapper(SERVICE_PATTERN,
ROUTE_PATTERN);
// No version here
assertEquals("No matches for this service id", "rest-service",
toTest.apply("rest-service"));
}
@Test
public void test_route_should_be_cleaned_before_returned() {
// Messy patterns
PatternServiceRouteMapper toTest = new PatternServiceRouteMapper(
SERVICE_PATTERN + "(?<nevermatch>.)?",
"/${version}/${nevermatch}/${domain}/${name}/");
assertEquals("No matches for this service id", "v1/domain/service",
toTest.apply("domain-service-v1"));
assertEquals("No matches for this service id", "v1/domain",
toTest.apply("domain-v1"));
}
}