package org.geoserver.gwc;
import static org.geoserver.data.test.MockData.BASIC_POLYGONS;
import junit.framework.Test;
import org.geoserver.data.test.MockData;
import org.geoserver.test.GeoServerTestSupport;
import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.layer.TileLayer;
import com.mockrunner.mock.web.MockHttpServletResponse;
public class GWCIntegrationTest extends GeoServerTestSupport {
/**
* This is a READ ONLY TEST so we can use one time setup
*/
public static Test suite() {
return new OneTimeTestSetup(new GWCIntegrationTest());
}
@Override
protected void setUpInternal() {
GWC.get().getConfig().setDirectWMSIntegrationEnabled(false);
}
public void testPngIntegration() throws Exception {
String layerId = getLayerId(MockData.BASIC_POLYGONS);
MockHttpServletResponse sr = getAsServletResponse("gwc/service/wmts?request=GetTile&layer="
+ layerId
+ "&format=image/png&tilematrixset=EPSG:4326&tilematrix=EPSG:4326:0&tilerow=0&tilecol=0");
assertEquals(200, sr.getErrorCode());
assertEquals("image/png", sr.getContentType());
}
public void testDirectWMSIntegration() throws Exception {
final GWC gwc = GWC.get();
gwc.getConfig().setDirectWMSIntegrationEnabled(true);
final String layerName = BASIC_POLYGONS.getPrefix() + ":" + BASIC_POLYGONS.getLocalPart();
String request;
MockHttpServletResponse response;
request = buildGetMap(true, layerName, "EPSG:4326", null);
response = getAsServletResponse(request);
assertEquals(200, response.getErrorCode());
assertEquals("image/png", response.getContentType());
assertNull(response.getHeader("geowebcache-tile-index"));
request = request + "&tiled=true";
response = getAsServletResponse(request);
assertEquals(200, response.getErrorCode());
assertEquals("image/png", response.getContentType());
assertEquals("[0, 0, 0]", response.getHeader("geowebcache-tile-index"));
}
private String buildGetMap(final boolean directWMSIntegrationEndpoint, final String layerName,
final String gridsetId, String styles) {
final GWC gwc = GWC.get();
final TileLayer tileLayer = gwc.getTileLayerByName(layerName);
final GridSubset gridSubset = tileLayer.getGridSubset(gridsetId);
long[] coverage = gridSubset.getCoverage(0);
long[] tileIndex = { coverage[0], coverage[1], coverage[4] };
BoundingBox bounds = gridSubset.boundsFromIndex(tileIndex);
final String endpoint = directWMSIntegrationEndpoint ? "wms" : "gwc/service/wms";
StringBuilder sb = new StringBuilder(endpoint);
sb.append("?service=WMS&request=GetMap&version=1.1.1&format=image/png");
sb.append("&layers=").append(layerName);
sb.append("&srs=").append(gridSubset.getSRS());
sb.append("&width=").append(gridSubset.getGridSet().getTileWidth());
sb.append("&height=").append(gridSubset.getGridSet().getTileHeight());
sb.append("&styles=");
if (styles != null) {
sb.append(styles);
}
sb.append("&bbox=").append(bounds.toString());
return sb.toString();
}
public void testReloadConfiguration() throws Exception {
String path = "/gwc/rest/reload";
String content = "reload_configuration=1";
String contentType = "application/x-www-form-urlencoded";
MockHttpServletResponse response = postAsServletResponse(path, content, contentType);
assertEquals(200, response.getStatusCode());
}
}