package org.deegree.securityproxy.wcs; import org.deegree.securityproxy.authorization.RequestAuthorizationManager; import org.deegree.securityproxy.exception.ServiceExceptionWrapper; import org.deegree.securityproxy.filter.ServiceManager; import org.deegree.securityproxy.filter.StatusCodeResponseBodyWrapper; import org.deegree.securityproxy.request.OwsRequest; import org.deegree.securityproxy.request.parser.OwsRequestParser; import org.deegree.securityproxy.responsefilter.ResponseFilterManager; import org.hamcrest.CoreMatchers; import org.junit.Before; import org.junit.Test; import org.mockito.Matchers; import org.springframework.security.core.Authentication; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; /** * Tests for WcsServiceManager. * * @author <a href="stenger@lat-lon.de">Dirk Stenger</a> * @author last edited by: $Author: stenger $ * @version $Revision: $, $Date: $ */ public class WcsServiceManagerTest { private WcsServiceManager wcsServiceManager; private OwsRequestParser parser; private RequestAuthorizationManager requestAuthorizationManager; private List<ResponseFilterManager> filterManagers; private ServiceExceptionWrapper serviceExceptionWrapper; @Before public void reset() { parser = mockOwsRequestParser(); requestAuthorizationManager = mockRequestAuthorizationManager(); filterManagers = mockResponseFilterManagers(); serviceExceptionWrapper = mockServiceExceptionWrapper(); wcsServiceManager = new WcsServiceManager( parser, requestAuthorizationManager, filterManagers, serviceExceptionWrapper ); } @Test public void testParse() throws Exception { HttpServletRequest request = mockHttpServletRequest(); wcsServiceManager.parse( request ); verify( parser ).parse( request ); } @Test public void testAuthorize() throws Exception { Authentication authentication = mockAuthentication(); OwsRequest owsRequest = mockOwsRequest(); wcsServiceManager.authorize( authentication, owsRequest ); verify( requestAuthorizationManager ).decide( authentication, owsRequest ); } @Test public void testIsResponseFilterEnabled() throws Exception { ResponseFilterManager filterManager1 = mockEnabledResponseFilterManager(); ResponseFilterManager filterManager2 = mockEnabledResponseFilterManager(); ServiceManager wcsServiceManager = createWcsServiceManagerWithTwoFilterManager( filterManager1, filterManager2 ); OwsRequest owsRequest = mockOwsRequest(); boolean isResponseFilterEnabled = wcsServiceManager.isResponseFilterEnabled( owsRequest ); assertThat( isResponseFilterEnabled, is( true ) ); verify( filterManager1, times( 1 ) ).canBeFiltered( owsRequest ); verify( filterManager2, never() ).canBeFiltered( owsRequest ); } @Test public void testFilterResponse() throws Exception { ResponseFilterManager filterManager1 = mockEnabledResponseFilterManager(); ResponseFilterManager filterManager2 = mockEnabledResponseFilterManager(); ServiceManager wcsServiceManager = createWcsServiceManagerWithTwoFilterManager( filterManager1, filterManager2 ); StatusCodeResponseBodyWrapper wrappedResponse = mockStatusCodeResponseBodyWrapper(); Authentication authentication = mockAuthentication(); OwsRequest owsRequest = mockOwsRequest(); wcsServiceManager.filterResponse( wrappedResponse, authentication, owsRequest ); verify( filterManager1, times( 1 ) ).filterResponse( wrappedResponse, owsRequest, authentication ); verify( filterManager2, never() ).filterResponse( wrappedResponse, owsRequest, authentication ); } @Test public void testRetrieveServiceExceptionWrapper() throws Exception { ServiceExceptionWrapper retrievedServiceExceptionWrapper = wcsServiceManager.retrieveServiceExceptionWrapper(); assertThat( retrievedServiceExceptionWrapper, CoreMatchers.is( serviceExceptionWrapper ) ); } @Test public void testIsServiceTypeSupportedWithWcsServiceParameterShouldReturnTrue() throws Exception { HttpServletRequest request = mockHttpServletRequestWithWcsServiceParameter(); boolean isSupported = wcsServiceManager.isServiceTypeSupported( null, request ); assertThat( isSupported, is( true ) ); } @Test public void testIsServiceTypeSupportedWithWmsServiceParameterShouldReturnFalse() throws Exception { HttpServletRequest request = mockHttpServletRequestWithWmsServiceParameter(); boolean isSupported = wcsServiceManager.isServiceTypeSupported( null, request ); assertThat( isSupported, is( false ) ); } @Test public void testIsServiceTypeSupportedWithNoServiceParameterShouldReturnFalse() throws Exception { HttpServletRequest request = mockHttpServletRequest(); boolean isSupported = wcsServiceManager.isServiceTypeSupported( null, request ); assertThat( isSupported, is( false ) ); } @Test public void testIsServiceTypeSupportedWithStringServiceParameterShouldReturnTrue() throws Exception { HttpServletRequest request = mockHttpServletRequest(); boolean isSupported = wcsServiceManager.isServiceTypeSupported( "wcs", request ); assertThat( isSupported, is( true ) ); } @Test public void testIsServiceTypeSupportedWithStringServiceParameterShouldReturnFalse() throws Exception { HttpServletRequest request = mockHttpServletRequestWithServiceParameter( "wcs" ); boolean isSupported = wcsServiceManager.isServiceTypeSupported( "wms", request ); assertThat( isSupported, is( false ) ); } @SuppressWarnings("unchecked") private List<ResponseFilterManager> mockResponseFilterManagers() { return mock( List.class ); } private ResponseFilterManager mockEnabledResponseFilterManager() { ResponseFilterManager responseFilterManager = mock( ResponseFilterManager.class ); doReturn( true ).when( responseFilterManager ).canBeFiltered( Matchers.any( OwsRequest.class ) ); return responseFilterManager; } private RequestAuthorizationManager mockRequestAuthorizationManager() { return mock( RequestAuthorizationManager.class ); } private ServiceExceptionWrapper mockServiceExceptionWrapper() { return mock( ServiceExceptionWrapper.class ); } private OwsRequestParser mockOwsRequestParser() { return mock( OwsRequestParser.class ); } private HttpServletRequest mockHttpServletRequest() { return mock( HttpServletRequest.class ); } private OwsRequest mockOwsRequest() { return mock( OwsRequest.class ); } private Authentication mockAuthentication() { return mock( Authentication.class ); } private StatusCodeResponseBodyWrapper mockStatusCodeResponseBodyWrapper() { return mock( StatusCodeResponseBodyWrapper.class ); } private HttpServletRequest mockHttpServletRequestWithWcsServiceParameter() { return mockHttpServletRequestWithServiceParameter( "wcs" ); } private HttpServletRequest mockHttpServletRequestWithWmsServiceParameter() { return mockHttpServletRequestWithServiceParameter( "wms" ); } private HttpServletRequest mockHttpServletRequestWithServiceParameter( String serviceValue ) { HttpServletRequest request = mock( HttpServletRequest.class ); Map<String, String[]> kvpMap = createKvpMapWithServiceParameter( serviceValue ); doReturn( kvpMap ).when( request ).getParameterMap(); doReturn( "GET" ).when( request ).getMethod(); return request; } private Map<String, String[]> createKvpMapWithServiceParameter( String serviceValue ) { Map<String, String[]> kvpMap = new HashMap<String, String[]>(); String[] serviceTypes = { serviceValue }; kvpMap.put( "service", serviceTypes ); return kvpMap; } private ServiceManager createWcsServiceManagerWithTwoFilterManager( ResponseFilterManager filterManager1, ResponseFilterManager filterManager2 ) { List<ResponseFilterManager> filterManagers = createFilterManagersWithTwoFilterManager( filterManager1, filterManager2 ); return new WcsServiceManager( parser, requestAuthorizationManager, filterManagers, serviceExceptionWrapper ); } private List<ResponseFilterManager> createFilterManagersWithTwoFilterManager( ResponseFilterManager filterManager1, ResponseFilterManager filterManager2 ) { List<ResponseFilterManager> filterManagers = new ArrayList<ResponseFilterManager>(); filterManagers.add( filterManager1 ); filterManagers.add( filterManager2 ); return filterManagers; } }