+package de.juplo.autoconfigure;
+
+
+import de.juplo.thymeproxy.ProxyTemplateResolver;
+import java.net.URI;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
+import org.springframework.context.annotation.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
+import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
+import org.springframework.boot.test.EnvironmentTestUtils;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.thymeleaf.templateresolver.ITemplateResolver;
+import org.thymeleaf.templateresolver.TemplateResolver;
+
+
+
+public class ThymeproxyAutoConfigurationTest
+{
+ private final Logger LOG =
+ LoggerFactory.getLogger(ThymeproxyAutoConfigurationTest.class);
+
+
+ @Test
+ public void propertyBinding() throws Exception
+ {
+ LOG.info("<-- Start Of New Test-Case!");
+
+ ConfigurableApplicationContext context;
+ ThymeproxyProperties properties;
+
+ context = load(
+ EmptyConfiguration.class,
+ "thymeproxy.name=Thymeproxy",
+ "thymeproxy.origins[0].uri=http://localhost:8080/test/",
+ "thymeproxy.origins[0].patterns[0]=^/css/",
+ "thymeproxy.origins[0].patterns[1]=^/img/",
+ "thymeproxy.origins[0].patterns[2]=*\\.xml$",
+ "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
+ "thymeproxy.origins[1].ttl=30000"
+ );
+ properties = context.getBean(ThymeproxyProperties.class);
+ assertNotNull(properties);
+ assertEquals("Thymeproxy", properties.name);
+ assertNotNull(properties.origins);
+ assertEquals(2, properties.origins.size());
+ assertEquals(new URI("http://localhost:8080/test/"), properties.origins.get(0).uri);
+ assertNotNull(properties.origins.get(0).patterns);
+ assertEquals(3, properties.origins.get(0).patterns.size());
+ assertEquals("^/css/", properties.origins.get(0).patterns.get(0));
+ assertEquals("^/img/", properties.origins.get(0).patterns.get(1));
+ assertEquals("*\\.xml$", properties.origins.get(0).patterns.get(2));
+ assertNull(properties.origins.get(0).ttl);
+ assertEquals(new URI("http://127.0.0.1:8081"), properties.origins.get(1).uri);
+ assertNotNull(properties.origins.get(1).patterns);
+ assertEquals(0, properties.origins.get(1).patterns.size());
+ assertEquals(new Long(30000l), properties.origins.get(1).ttl);
+ context.close();
+ }
+
+ @Test
+ public void defaultConfiguration()
+ {
+ LOG.info("<-- Start Of New Test-Case!");
+
+ ConfigurableApplicationContext context = load(EmptyConfiguration.class);
+
+ ITemplateResolver resolver =
+ (ITemplateResolver)context.getBean("defaultTemplateResolver");
+ assertNotNull(resolver);
+ assertTrue(
+ "Expected an instance of type TemplateResolver",
+ resolver instanceof TemplateResolver
+ );
+ assertNotEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
+
+ context.close();
+ }
+
+ @Test
+ public void defaultTemplateResolverConfigured()
+ {
+ LOG.info("<-- Start Of New Test-Case!");
+
+ ConfigurableApplicationContext context =
+ load(DefaultTemplateResolverConfiguration.class);
+
+ ITemplateResolver resolver =
+ (ITemplateResolver)context.getBean("defaultTemplateResolver");
+ assertNotNull(resolver);
+ assertTrue(
+ "Expected an instance of type TemplateResolver",
+ resolver instanceof TemplateResolver
+ );
+ assertEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
+
+ context.close();
+ }
+
+ @Test
+ public void proxiesConfigured()
+ {
+ LOG.info("<-- Start Of New Test-Case!");
+
+ ConfigurableApplicationContext context = load(
+ EmptyConfiguration.class,
+ "thymeproxy.name=Thymeproxy",
+ "thymeproxy.origins[0].uri=http://localhost:8080/test/",
+ "thymeproxy.origins[0].patterns[0]=^/css/",
+ "thymeproxy.origins[0].patterns[1]=^/img/",
+ "thymeproxy.origins[0].patterns[2]=*\\.xml$",
+ "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
+ "thymeproxy.origins[1].ttl=30000"
+ );
+
+ ITemplateResolver resolver;
+ ProxyTemplateResolver proxy;
+
+ resolver = (ITemplateResolver)context.getBean("defaultTemplateResolver");
+ assertNotNull(resolver);
+ assertTrue(
+ "Expected an instance of type ProxyTemplateResolver",
+ resolver instanceof ProxyTemplateResolver
+ );
+ proxy = (ProxyTemplateResolver)resolver;
+ assertEquals("0: localhost", proxy.getName());
+ assertEquals(new Integer(0), proxy.getOrder());
+ assertEquals("http://localhost:8080/test/", proxy.getOrigin());
+ assertNull(proxy.getDefaultTTL());
+
+ resolver = (ITemplateResolver)context.getBean("proxy1");
+ assertNotNull(resolver);
+ assertTrue(
+ "Expected an instance of type ProxyTemplateResolver",
+ resolver instanceof ProxyTemplateResolver
+ );
+ proxy = (ProxyTemplateResolver)resolver;
+ assertEquals("1: 127.0.0.1", proxy.getName());
+ assertEquals(new Integer(1), proxy.getOrder());
+ assertEquals("http://127.0.0.1:8081", proxy.getOrigin());
+ assertEquals(new Long(30000l), proxy.getDefaultTTL());
+
+ context.close();
+ }
+
+ @Test
+ public void proxiesAndDefaultTemplateResolverConfigured()
+ {
+ LOG.info("<-- Start Of New Test-Case!");
+
+ ConfigurableApplicationContext context = load(
+ DefaultTemplateResolverConfiguration.class,
+ "thymeproxy.name=Thymeproxy",
+ "thymeproxy.origins[0].uri=http://localhost:8080/test/",
+ "thymeproxy.origins[0].patterns[0]=^/css/",
+ "thymeproxy.origins[0].patterns[1]=^/img/",
+ "thymeproxy.origins[0].patterns[2]=*\\.xml$",
+ "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
+ "thymeproxy.origins[1].ttl=30000"
+ );
+
+ ITemplateResolver resolver;
+ ProxyTemplateResolver proxy;
+
+ resolver = (ITemplateResolver)context.getBean("defaultTemplateResolver");
+ assertNotNull(resolver);
+ assertTrue(
+ "Expected an instance of type TemplateResolver",
+ resolver instanceof TemplateResolver
+ );
+ assertEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
+
+ try
+ {
+ resolver = (ITemplateResolver)context.getBean("proxy1");
+ fail("Found bean for name proxy1: " + resolver);
+ }
+ catch (BeansException e)
+ {
+ LOG.info(e.toString());
+ }
+
+ context.close();
+ }
+
+
+ @Configuration
+ static class EmptyConfiguration
+ {
+ }
+
+ @Configuration
+ static class DefaultTemplateResolverConfiguration
+ {
+ public static TemplateResolver RESOLVER = new TemplateResolver();
+
+ @Bean
+ public TemplateResolver defaultTemplateResolver()
+ {
+ return RESOLVER;
+ }
+ }
+
+
+ private ConfigurableApplicationContext load(Class<?> config, String... pairs)
+ {
+ AnnotationConfigApplicationContext ctx =
+ new AnnotationConfigApplicationContext();
+ EnvironmentTestUtils.addEnvironment(ctx, pairs);
+ ctx.register(HttpClientAutoConfiguration.class);
+ ctx.register(ThymeleafAutoConfiguration.class);
+ ctx.register(ThymeproxyAutoConfiguration.class);
+ ctx.register(config);
+ AutoConfigurationReportLoggingInitializer report =
+ new AutoConfigurationReportLoggingInitializer();
+ report.initialize(ctx);
+ ctx.refresh();
+ return ctx;
+ }
+}