Skip to content

Commit

Permalink
updating tests to work with the new spring mvc rest api for geowebcache.
Browse files Browse the repository at this point in the history
Fixing unit tests

Store base URL in thread local

fixing failing reload test.

All tests passing.
  • Loading branch information
vickdw committed Sep 6, 2017
1 parent acad7a3 commit a354c9d
Show file tree
Hide file tree
Showing 8 changed files with 172 additions and 171 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/

package org.geoserver.gwc.controller;

import java.util.Optional;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.geoserver.ows.util.ResponseUtils;
import org.geowebcache.controller.GeoWebCacheDispatcherController;


public class DispatcherController extends GeoWebCacheDispatcherController {

public static final ThreadLocal<String> BASE_URL = new InheritableThreadLocal<String>();

@Override
public void handleRestApiRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
BASE_URL.set(ResponseUtils.baseURL(request));
super.handleRestApiRequest(request, response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,30 @@
*/
package org.geoserver.gwc.dispatch;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import com.google.common.collect.ImmutableList;
import org.geoserver.config.ServiceInfo;
import org.geoserver.config.impl.ServiceInfoImpl;
import org.geoserver.gwc.GWC;
import org.geoserver.gwc.config.GWCServiceEnablementInterceptor;
import org.geoserver.gwc.layer.GeoServerTileLayer;
import org.geoserver.ows.DisabledServiceCheck;
import org.geoserver.ows.Dispatcher;
import org.geoserver.ows.Response;
import org.geoserver.ows.util.KvpUtils;
import org.geoserver.platform.ServiceException;
import org.geoserver.wfs.kvp.BBoxKvpParser;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.Version;
import org.geowebcache.GeoWebCacheDispatcher;
import org.geowebcache.GeoWebCacheExtensions;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.service.gmaps.GMapsConverter;
import org.geowebcache.service.mgmaps.MGMapsConverter;
import org.geowebcache.service.tms.TMSDocumentFactory;
import org.geowebcache.service.ve.VEConverter;
import org.geowebcache.util.ServletUtils;

import com.google.common.collect.ImmutableList;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Pattern;

/**
* Service bean used as service implementation for the GeoServer {@link Dispatcher} when processing
Expand Down Expand Up @@ -104,6 +87,8 @@ public ServiceInfo getServiceInfo() {
*/
public GwcOperationProxy dispatch(HttpServletRequest rawRequest, HttpServletResponse rawRespose)
throws Exception {

// DispatcherController.BASE_URL.set(ResponseUtils.baseURL(rawRequest));

ResponseWrapper responseWrapper = new ResponseWrapper(rawRespose);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
*/
package org.geoserver.gwc.layer;

import javax.servlet.http.HttpServletResponse;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
Expand All @@ -15,7 +13,8 @@
import org.geowebcache.config.XMLConfigurationProvider;
import org.geowebcache.grid.GridSetBroker;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.service.HttpErrorCodeException;
import org.geowebcache.rest.exception.RestException;
import org.springframework.http.HttpStatus;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
Expand Down Expand Up @@ -91,8 +90,9 @@ public GeoServerTileLayer unmarshal(HierarchicalStreamReader reader,
name = null;
}
if (name == null) {// name is mandatory
throw new HttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST,
"Layer name not provided");
throw new RestException(
"Layer name not provided",
HttpStatus.BAD_REQUEST);
}
LayerInfo layer = null;
LayerGroupInfo layerGroup = null;
Expand All @@ -101,17 +101,19 @@ public GeoServerTileLayer unmarshal(HierarchicalStreamReader reader,
if (layer == null) {
layerGroup = catalog.getLayerGroup(id);
if (layerGroup == null) {
throw new HttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST,
"No GeoServer Layer or LayerGroup exists with id '" + id + "'");
throw new RestException(
"No GeoServer Layer or LayerGroup exists with id '" + id + "'",
HttpStatus.BAD_REQUEST);
}
}
} else {
layer = catalog.getLayerByName(name);
if (layer == null) {
layerGroup = catalog.getLayerGroupByName(name);
if (layerGroup == null) {
throw new HttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
"GeoServer Layer or LayerGroup '" + name + "' not found");
throw new RestException(
"GeoServer Layer or LayerGroup '" + name + "' not found",
HttpStatus.NOT_FOUND);
}
}
}
Expand All @@ -121,9 +123,10 @@ public GeoServerTileLayer unmarshal(HierarchicalStreamReader reader,
.tileLayerName(layerGroup);

if (id != null && !name.equals(actualName)) {
throw new HttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST,
throw new RestException(
"Layer with id '" + id + "' found but name does not match: '" + name
+ "'/'" + actualName + "'");
+ "'/'" + actualName + "'",
HttpStatus.BAD_REQUEST);
}

info.setId(actualId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,17 @@
*/
package org.geoserver.gwc.layer;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Throwables.propagate;
import static org.geoserver.gwc.GWC.tileLayerName;
import static org.geoserver.ows.util.ResponseUtils.buildURL;
import static org.geoserver.ows.util.ResponseUtils.params;

import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.KeywordInfo;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MetadataLinkInfo;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.PublishedInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import org.geoserver.catalog.*;
import org.geoserver.gwc.GWC;
import org.geoserver.gwc.config.GWCConfig;
import org.geoserver.gwc.controller.DispatcherController;
import org.geoserver.gwc.dispatch.GwcServiceDispatcherCallback;
import org.geoserver.ows.LocalWorkspace;
import org.geoserver.ows.Dispatcher;
import org.geoserver.ows.LocalWorkspace;
import org.geoserver.ows.URLMangler;
import org.geoserver.ows.util.RequestUtils;
import org.geoserver.platform.GeoServerExtensions;
Expand All @@ -61,25 +30,14 @@
import org.geowebcache.GeoWebCacheException;
import org.geowebcache.config.ConfigurationException;
import org.geowebcache.config.XMLGridSubset;
import org.geowebcache.config.legends.LegendInfo;
import org.geowebcache.config.legends.LegendInfoBuilder;
import org.geowebcache.conveyor.ConveyorTile;
import org.geowebcache.filter.parameters.ParameterException;
import org.geowebcache.filter.parameters.ParameterFilter;
import org.geowebcache.filter.request.RequestFilter;
import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSet;
import org.geowebcache.grid.GridSetBroker;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.grid.OutsideCoverageException;
import org.geowebcache.grid.SRS;
import org.geowebcache.grid.*;
import org.geowebcache.io.Resource;
import org.geowebcache.layer.ExpirationRule;
import org.geowebcache.layer.LayerListenerList;
import org.geowebcache.layer.MetaTile;
import org.geowebcache.layer.ProxyLayer;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.layer.TileLayerListener;
import org.geowebcache.layer.*;
import org.geowebcache.layer.meta.ContactInformation;
import org.geowebcache.layer.meta.LayerMetaInformation;
import org.geowebcache.layer.meta.MetadataURL;
Expand All @@ -91,12 +49,26 @@
import org.geowebcache.util.GWCVars;
import org.geowebcache.util.ServletUtils;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import com.google.common.base.Throwables;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import org.vfny.geoserver.util.ResponseUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Throwables.propagate;
import static org.geoserver.gwc.GWC.tileLayerName;
import static org.geoserver.ows.util.ResponseUtils.buildURL;
import static org.geoserver.ows.util.ResponseUtils.params;

public class GeoServerTileLayer extends TileLayer implements ProxyLayer {

private static final Logger LOGGER = Logging.getLogger(GeoServerTileLayer.class);
Expand Down
1 change: 1 addition & 0 deletions src/gwc/src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
gwc.context.suffix=
29 changes: 18 additions & 11 deletions src/gwc/src/main/resources/geowebcache-servlet.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<description>
Bean configuration file for the gwc-web module
</description>
Expand All @@ -21,16 +27,17 @@
This mappings are different from the standalone gwc ones in that they prepend the /gwc prefix to the context so it
ends up being, for example, /geoserver/gwc/*
-->
<bean id="gwcUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="mappings">
<props>
<!-- prop key="/gwc/service/**">geowebcacheDispatcher</prop-->
<prop key="/gwc/demo/**">geowebcacheDispatcher</prop>
<prop key="/gwc/proxy/**">gwcProxyDispatcher</prop>
<prop key="/gwc/**">geowebcacheDispatcher</prop>
</props>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:application.properties</value>
</property>
</bean>

<mvc:annotation-driven />
<!--<context:component-scan base-package="org.geowebcache.controller">-->
<!--&lt;!&ndash; So we can use org.geoserver.gwc.controller.DispatcherController instead &ndash;&gt;-->
<!--<context:exclude-filter type="regex" expression="org\.geowebcache\.controller\.GeoWebCacheDispatcherController"/>-->
<!--</context:component-scan>-->
<!--<context:component-scan base-package="org.geoserver.gwc.controller"/>-->

</beans>
Loading

0 comments on commit a354c9d

Please sign in to comment.