/*
* Copyright 2013-2017 Simba Open Source
*
* 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.simbasecurity.common.config;
import org.junit.Before;
import org.junit.Test;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import static java.lang.System.getProperties;
import static java.lang.System.setProperty;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.simbasecurity.common.config.SystemConfiguration.SYS_PROP_SIMBA_INTERNAL_SERVICE_URL;
import static org.simbasecurity.common.config.SystemConfiguration.SYS_PROP_SIMBA_WEB_URL;
public final class SystemConfigurationTest {
private static final String SERVICE_URL_SYSPROP_VALUE = "service.url.sysprop.value";
private static final String WEB_URL_SYSPROP_VALUE = "web.url.sysprop.value";
private static final String SERVICE_URL_SERVLETCONTEXT_VALUE = "service.url.servletcontext.value";
private static final String SERVICE_URL_FILTERCONFIG_VALUE = "service.url.filterconfig.value";
private static final String WEB_URL_FILTERCONFIG_VALUE = "web.url.filterconfig.value";
@Before
public void setUp() {
getProperties().remove(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL);
getProperties().remove(SYS_PROP_SIMBA_WEB_URL);
}
@Test
public void serviceURLNullIfNotSet() {
assertNull(SystemConfiguration.getSimbaServiceURL());
}
@Test
public void webURLFallsBackOnServiceURLIfNotSet() {
setProperty(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SYSPROP_VALUE);
assertEquals(SERVICE_URL_SYSPROP_VALUE, SystemConfiguration.getSimbaWebURL());
}
@Test
public void noFallbackForWebURLIfSet() {
setProperty(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SYSPROP_VALUE);
setProperty(SYS_PROP_SIMBA_WEB_URL, WEB_URL_SYSPROP_VALUE);
assertEquals(WEB_URL_SYSPROP_VALUE, SystemConfiguration.getSimbaWebURL());
}
@Test
public void configurationThroughFilterConfig() {
final ServletContext servletContextMock = setupServletContextMock(Collections.<String, String>emptyMap());
final FilterConfig filterConfigMock = setupFilterConfigMock(servletContextMock, Collections.singletonMap(
SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_FILTERCONFIG_VALUE));
assertEquals(SERVICE_URL_FILTERCONFIG_VALUE, SystemConfiguration.getSimbaServiceURL(filterConfigMock));
}
@Test
public void configurationThroughServletContext() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SERVLETCONTEXT_VALUE));
assertEquals(SERVICE_URL_SERVLETCONTEXT_VALUE, SystemConfiguration.getSimbaServiceURL(servletContextMock));
}
@Test
public void configurationThroughServletContextWithLocalhost() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, "{localhost}"));
assertNotSame("{localhost}", SystemConfiguration.getSimbaServiceURL(servletContextMock));
}
@Test
public void filterConfigPrecedesServletContextConfiguration() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SERVLETCONTEXT_VALUE));
final FilterConfig filterConfigMock = setupFilterConfigMock(servletContextMock, Collections.singletonMap(
SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_FILTERCONFIG_VALUE));
assertEquals(SERVICE_URL_FILTERCONFIG_VALUE, SystemConfiguration.getSimbaServiceURL(filterConfigMock));
}
@Test
public void sysPropPrecedesAllConfiguration() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SERVLETCONTEXT_VALUE));
final FilterConfig filterConfigMock = setupFilterConfigMock(servletContextMock, Collections.singletonMap(
SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_FILTERCONFIG_VALUE));
setProperty(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SYSPROP_VALUE);
assertEquals(SERVICE_URL_SYSPROP_VALUE, SystemConfiguration.getSimbaServiceURL(filterConfigMock));
}
@Test
public void getSimbaWebURLWithServletContextReturnsSimbaWebUrl() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, WEB_URL_FILTERCONFIG_VALUE));
final String actual = SystemConfiguration.getSimbaWebURL(servletContextMock);
assertEquals(WEB_URL_FILTERCONFIG_VALUE, actual);
}
@Test
public void getSimbaWebURLWithFilterConfigReturnsSimbaWebUrl() {
final ServletContext servletContextMock = setupServletContextMock(
Collections.singletonMap(SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, SERVICE_URL_SERVLETCONTEXT_VALUE));
final FilterConfig filterConfigMock = setupFilterConfigMock(servletContextMock, Collections.singletonMap(
SYS_PROP_SIMBA_INTERNAL_SERVICE_URL, WEB_URL_FILTERCONFIG_VALUE));
final String actual = SystemConfiguration.getSimbaWebURL(filterConfigMock);
assertEquals(WEB_URL_FILTERCONFIG_VALUE, actual);
}
@Test
public void getSimbaServiceURLReturnsNullWithNullFilterConfig() {
final FilterConfig filterConfig = null;
final String actual = SystemConfiguration.getSimbaServiceURL(filterConfig);
assertNull(actual);
}
@Test
public void getSimbaServiceURLReturnsNullWithNullServletContext() {
final ServletContext servletContext = null;
final String actual = SystemConfiguration.getSimbaServiceURL(servletContext);
assertNull(actual);
}
private ServletContext setupServletContextMock(Map<String, String> mockValues) {
final ServletContext servletContextMock = mock(ServletContext.class);
when(servletContextMock.getInitParameterNames()).thenReturn(Collections.enumeration(mockValues.keySet()));
for (final Entry<String, String> entry : mockValues.entrySet()) {
when(servletContextMock.getInitParameter(entry.getKey())).thenReturn(entry.getValue());
}
return servletContextMock;
}
private FilterConfig setupFilterConfigMock(ServletContext servletContextMock, Map<String, String> mockValues) {
final FilterConfig filterConfigMock = mock(FilterConfig.class);
when(filterConfigMock.getServletContext()).thenReturn(servletContextMock);
when(filterConfigMock.getInitParameterNames()).thenReturn(Collections.enumeration(mockValues.keySet()));
for (final Entry<String, String> entry : mockValues.entrySet()) {
when(filterConfigMock.getInitParameter(entry.getKey())).thenReturn(entry.getValue());
}
return filterConfigMock;
}
}