/* * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.boot.autoconfigure.web; import java.net.InetAddress; import java.nio.charset.Charset; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.context.properties.source.MockConfigurationPropertySource; import static org.assertj.core.api.Assertions.assertThat; /** * Tests for {@link ServerProperties}. * * @author Dave Syer * @author Stephane Nicoll * @author Andy Wilkinson * @author Phillip Webb * @author EddĂș MelĂ©ndez * @author Quinten De Swaef * @author Venil Noronha */ public class ServerPropertiesTests { private final ServerProperties properties = new ServerProperties(); @Test public void testAddressBinding() throws Exception { bind("server.address", "127.0.0.1"); assertThat(this.properties.getAddress()) .isEqualTo(InetAddress.getByName("127.0.0.1")); } @Test public void testPortBinding() throws Exception { bind("server.port", "9000"); assertThat(this.properties.getPort().intValue()).isEqualTo(9000); } @Test public void testServerHeaderDefault() throws Exception { assertThat(this.properties.getServerHeader()).isNull(); } @Test public void testServerHeader() throws Exception { bind("server.server-header", "Custom Server"); assertThat(this.properties.getServerHeader()).isEqualTo("Custom Server"); } @Test public void testConnectionTimeout() throws Exception { bind("server.connection-timeout", "60000"); assertThat(this.properties.getConnectionTimeout()).isEqualTo(60000); } @Test public void testServletPathAsMapping() throws Exception { bind("server.servlet.path", "/foo/*"); assertThat(this.properties.getServlet().getServletMapping()).isEqualTo("/foo/*"); assertThat(this.properties.getServlet().getServletPrefix()).isEqualTo("/foo"); } @Test public void testServletPathAsPrefix() throws Exception { bind("server.servlet.path", "/foo"); assertThat(this.properties.getServlet().getServletMapping()).isEqualTo("/foo/*"); assertThat(this.properties.getServlet().getServletPrefix()).isEqualTo("/foo"); } @Test public void testTomcatBinding() throws Exception { Map<String, String> map = new HashMap<>(); map.put("server.tomcat.accesslog.pattern", "%h %t '%r' %s %b"); map.put("server.tomcat.accesslog.prefix", "foo"); map.put("server.tomcat.accesslog.rotate", "false"); map.put("server.tomcat.accesslog.rename-on-rotate", "true"); map.put("server.tomcat.accesslog.request-attributes-enabled", "true"); map.put("server.tomcat.accesslog.suffix", "-bar.log"); map.put("server.tomcat.protocol-header", "X-Forwarded-Protocol"); map.put("server.tomcat.remote-ip-header", "Remote-Ip"); map.put("server.tomcat.internal-proxies", "10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); map.put("server.tomcat.background-processor-delay", "10"); bind(map); ServerProperties.Tomcat tomcat = this.properties.getTomcat(); assertThat(tomcat.getAccesslog().getPattern()).isEqualTo("%h %t '%r' %s %b"); assertThat(tomcat.getAccesslog().getPrefix()).isEqualTo("foo"); assertThat(tomcat.getAccesslog().isRotate()).isFalse(); assertThat(tomcat.getAccesslog().isRenameOnRotate()).isTrue(); assertThat(tomcat.getAccesslog().isRequestAttributesEnabled()).isTrue(); assertThat(tomcat.getAccesslog().getSuffix()).isEqualTo("-bar.log"); assertThat(tomcat.getRemoteIpHeader()).isEqualTo("Remote-Ip"); assertThat(tomcat.getProtocolHeader()).isEqualTo("X-Forwarded-Protocol"); assertThat(tomcat.getInternalProxies()) .isEqualTo("10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); assertThat(tomcat.getBackgroundProcessorDelay()).isEqualTo(10); } @Test public void redirectContextRootIsNotConfiguredByDefault() throws Exception { bind(new HashMap<String, String>()); ServerProperties.Tomcat tomcat = this.properties.getTomcat(); assertThat(tomcat.getRedirectContextRoot()).isNull(); } @Test public void testTrailingSlashOfContextPathIsRemoved() { bind("server.servlet.context-path", "/foo/"); assertThat(this.properties.getServlet().getContextPath()).isEqualTo("/foo"); } @Test public void testSlashOfContextPathIsDefaultValue() { bind("server.servlet.context-path", "/"); assertThat(this.properties.getServlet().getContextPath()).isEqualTo(""); } @Test public void testCustomizeUriEncoding() throws Exception { bind("server.tomcat.uri-encoding", "US-ASCII"); assertThat(this.properties.getTomcat().getUriEncoding()) .isEqualTo(Charset.forName("US-ASCII")); } @Test public void testCustomizeHeaderSize() throws Exception { bind("server.max-http-header-size", "9999"); assertThat(this.properties.getMaxHttpHeaderSize()).isEqualTo(9999); } @Test public void testCustomizeJettyAcceptors() throws Exception { bind("server.jetty.acceptors", "10"); assertThat(this.properties.getJetty().getAcceptors()).isEqualTo(10); } @Test public void testCustomizeJettySelectors() throws Exception { bind("server.jetty.selectors", "10"); assertThat(this.properties.getJetty().getSelectors()).isEqualTo(10); } @Test public void testCustomizeJettyAccessLog() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("server.jetty.accesslog.enabled", "true"); map.put("server.jetty.accesslog.filename", "foo.txt"); map.put("server.jetty.accesslog.file-date-format", "yyyymmdd"); map.put("server.jetty.accesslog.retention-period", "4"); map.put("server.jetty.accesslog.append", "true"); bind(map); ServerProperties.Jetty jetty = this.properties.getJetty(); assertThat(jetty.getAccesslog().isEnabled()).isEqualTo(true); assertThat(jetty.getAccesslog().getFilename()).isEqualTo("foo.txt"); assertThat(jetty.getAccesslog().getFileDateFormat()).isEqualTo("yyyymmdd"); assertThat(jetty.getAccesslog().getRetentionPeriod()).isEqualTo(4); assertThat(jetty.getAccesslog().isAppend()).isEqualTo(true); } private void bind(String name, String value) { bind(Collections.singletonMap(name, value)); } private void bind(Map<String, String> map) { MockConfigurationPropertySource source = new MockConfigurationPropertySource(); map.forEach(source::put); new Binder(source).bind("server", Bindable.ofInstance(this.properties)); } }