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()); } }