autoconfigure
[maven-thymeleaf-skin] / src / test / java / de / juplo / autoconfigure / ThymeproxyAutoConfigurationTest.java
1 package de.juplo.autoconfigure;
2
3
4 import de.juplo.thymeproxy.ProxyTemplateResolver;
5 import java.net.URI;
6 import static org.junit.Assert.assertEquals;
7 import static org.junit.Assert.assertNotEquals;
8 import static org.junit.Assert.assertNotNull;
9 import static org.junit.Assert.assertNull;
10 import static org.junit.Assert.assertTrue;
11 import static org.junit.Assert.fail;
12 import org.junit.Test;
13 import org.springframework.context.annotation.Configuration;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16 import org.springframework.beans.BeansException;
17 import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
18 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
19 import org.springframework.boot.test.EnvironmentTestUtils;
20 import org.springframework.context.ConfigurableApplicationContext;
21 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
22 import org.springframework.context.annotation.Bean;
23 import org.thymeleaf.templateresolver.ITemplateResolver;
24 import org.thymeleaf.templateresolver.TemplateResolver;
25
26
27
28 public class ThymeproxyAutoConfigurationTest
29 {
30   private final Logger LOG =
31       LoggerFactory.getLogger(ThymeproxyAutoConfigurationTest.class);
32
33
34   @Test
35   public void propertyBinding() throws Exception
36   {
37     LOG.info("<-- Start Of New Test-Case!");
38
39     ConfigurableApplicationContext context;
40     ThymeproxyProperties properties;
41
42     context = load(
43         EmptyConfiguration.class,
44         "thymeproxy.name=Thymeproxy",
45         "thymeproxy.origins[0].uri=http://localhost:8080/test/",
46         "thymeproxy.origins[0].patterns[0]=^/css/",
47         "thymeproxy.origins[0].patterns[1]=^/img/",
48         "thymeproxy.origins[0].patterns[2]=*\\.xml$",
49         "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
50         "thymeproxy.origins[1].ttl=30000"
51         );
52     properties = context.getBean(ThymeproxyProperties.class);
53     assertNotNull(properties);
54     assertEquals("Thymeproxy", properties.name);
55     assertNotNull(properties.origins);
56     assertEquals(2, properties.origins.size());
57     assertEquals(new URI("http://localhost:8080/test/"), properties.origins.get(0).uri);
58     assertNotNull(properties.origins.get(0).patterns);
59     assertEquals(3, properties.origins.get(0).patterns.size());
60     assertEquals("^/css/", properties.origins.get(0).patterns.get(0));
61     assertEquals("^/img/", properties.origins.get(0).patterns.get(1));
62     assertEquals("*\\.xml$", properties.origins.get(0).patterns.get(2));
63     assertNull(properties.origins.get(0).ttl);
64     assertEquals(new URI("http://127.0.0.1:8081"), properties.origins.get(1).uri);
65     assertNotNull(properties.origins.get(1).patterns);
66     assertEquals(0, properties.origins.get(1).patterns.size());
67     assertEquals(new Long(30000l), properties.origins.get(1).ttl);
68     context.close();
69   }
70
71   @Test
72   public void defaultConfiguration()
73   {
74     LOG.info("<-- Start Of New Test-Case!");
75
76     ConfigurableApplicationContext context = load(EmptyConfiguration.class);
77
78     ITemplateResolver resolver =
79         (ITemplateResolver)context.getBean("defaultTemplateResolver");
80     assertNotNull(resolver);
81     assertTrue(
82         "Expected an instance of type TemplateResolver",
83         resolver instanceof TemplateResolver
84         );
85     assertNotEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
86
87     context.close();
88   }
89
90   @Test
91   public void defaultTemplateResolverConfigured()
92   {
93     LOG.info("<-- Start Of New Test-Case!");
94
95     ConfigurableApplicationContext context =
96         load(DefaultTemplateResolverConfiguration.class);
97
98     ITemplateResolver resolver =
99         (ITemplateResolver)context.getBean("defaultTemplateResolver");
100     assertNotNull(resolver);
101     assertTrue(
102         "Expected an instance of type TemplateResolver",
103         resolver instanceof TemplateResolver
104         );
105     assertEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
106
107     context.close();
108   }
109
110   @Test
111   public void proxiesConfigured()
112   {
113     LOG.info("<-- Start Of New Test-Case!");
114
115     ConfigurableApplicationContext context = load(
116         EmptyConfiguration.class,
117         "thymeproxy.name=Thymeproxy",
118         "thymeproxy.origins[0].uri=http://localhost:8080/test/",
119         "thymeproxy.origins[0].patterns[0]=^/css/",
120         "thymeproxy.origins[0].patterns[1]=^/img/",
121         "thymeproxy.origins[0].patterns[2]=*\\.xml$",
122         "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
123         "thymeproxy.origins[1].ttl=30000"
124         );
125
126     ITemplateResolver resolver;
127     ProxyTemplateResolver proxy;
128
129     resolver = (ITemplateResolver)context.getBean("defaultTemplateResolver");
130     assertNotNull(resolver);
131     assertTrue(
132         "Expected an instance of type ProxyTemplateResolver",
133         resolver instanceof ProxyTemplateResolver
134         );
135     proxy = (ProxyTemplateResolver)resolver;
136     assertEquals("0: localhost", proxy.getName());
137     assertEquals(new Integer(0), proxy.getOrder());
138     assertEquals("http://localhost:8080/test/", proxy.getOrigin());
139     assertNull(proxy.getDefaultTTL());
140
141     resolver = (ITemplateResolver)context.getBean("proxy1");
142     assertNotNull(resolver);
143     assertTrue(
144         "Expected an instance of type ProxyTemplateResolver",
145         resolver instanceof ProxyTemplateResolver
146         );
147     proxy = (ProxyTemplateResolver)resolver;
148     assertEquals("1: 127.0.0.1", proxy.getName());
149     assertEquals(new Integer(1), proxy.getOrder());
150     assertEquals("http://127.0.0.1:8081", proxy.getOrigin());
151     assertEquals(new Long(30000l), proxy.getDefaultTTL());
152
153     context.close();
154   }
155
156   @Test
157   public void proxiesAndDefaultTemplateResolverConfigured()
158   {
159     LOG.info("<-- Start Of New Test-Case!");
160
161     ConfigurableApplicationContext context = load(
162         DefaultTemplateResolverConfiguration.class,
163         "thymeproxy.name=Thymeproxy",
164         "thymeproxy.origins[0].uri=http://localhost:8080/test/",
165         "thymeproxy.origins[0].patterns[0]=^/css/",
166         "thymeproxy.origins[0].patterns[1]=^/img/",
167         "thymeproxy.origins[0].patterns[2]=*\\.xml$",
168         "thymeproxy.origins[1].uri=http://127.0.0.1:8081",
169         "thymeproxy.origins[1].ttl=30000"
170         );
171
172     ITemplateResolver resolver;
173     ProxyTemplateResolver proxy;
174
175     resolver = (ITemplateResolver)context.getBean("defaultTemplateResolver");
176     assertNotNull(resolver);
177     assertTrue(
178         "Expected an instance of type TemplateResolver",
179         resolver instanceof TemplateResolver
180         );
181     assertEquals(DefaultTemplateResolverConfiguration.RESOLVER, resolver);
182
183     try
184     {
185       resolver = (ITemplateResolver)context.getBean("proxy1");
186       fail("Found bean for name proxy1: " + resolver);
187     }
188     catch (BeansException e)
189     {
190       LOG.info(e.toString());
191     }
192
193     context.close();
194   }
195
196
197   @Configuration
198   static class EmptyConfiguration
199   {
200   }
201
202   @Configuration
203   static class DefaultTemplateResolverConfiguration
204   {
205     public static TemplateResolver RESOLVER = new TemplateResolver();
206
207     @Bean
208     public TemplateResolver defaultTemplateResolver()
209     {
210       return RESOLVER;
211     }
212   }
213
214
215   private ConfigurableApplicationContext load(Class<?> config, String... pairs)
216   {
217     AnnotationConfigApplicationContext ctx =
218         new AnnotationConfigApplicationContext();
219     EnvironmentTestUtils.addEnvironment(ctx, pairs);
220     ctx.register(HttpClientAutoConfiguration.class);
221     ctx.register(ThymeleafAutoConfiguration.class);
222     ctx.register(ThymeproxyAutoConfiguration.class);
223     ctx.register(config);
224     AutoConfigurationReportLoggingInitializer report =
225         new AutoConfigurationReportLoggingInitializer();
226     report.initialize(ctx);
227     ctx.refresh();
228     return ctx;
229   }
230 }