/* (c) 2014 - 2015 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.wms;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.XpathEngine;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.TestHttpClientProvider;
import org.geoserver.catalog.WMSLayerInfo;
import org.geoserver.catalog.WMSStoreInfo;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.test.http.MockHttpClient;
import org.geoserver.test.http.MockHttpResponse;
import org.junit.Before;
/**
* Base class for WMS cascading tests
*
* @author Andrea Aime - GeoSolutions
*/
public abstract class WMSCascadeTestSupport extends WMSTestSupport {
protected static final String WORLD4326_130 = "world4326_130";
protected static final String WORLD4326_110 = "world4326_110";
protected static final String WORLD4326_110_NFI = "world4326_110_NFI";
protected MockHttpClient wms13Client;
protected URL wms13BaseURL;
protected MockHttpClient wms11Client;
protected URL wms11BaseURL;
protected MockHttpClient wms11ClientNfi;
protected URL wms11BaseNfiURL;
protected XpathEngine xpath;
@Before
public void setupXpathEngine() {
xpath = XMLUnit.newXpathEngine();
}
@Override
protected void setUpTestData(SystemTestData testData) throws Exception {
// we only setup the cascaded WMS layer, so no call to super
testData.setUpSecurity();
}
@Override
protected void onSetUp(SystemTestData testData) throws Exception {
// we only setup the cascaded WMS layer, so no call to super
setupWMS130Layer();
setupWMS110Layer();
setupWMS110NfiLayer();
}
private void setupWMS130Layer() throws MalformedURLException, IOException {
// prepare the WMS 1.3 mock client
wms13Client = new MockHttpClient();
wms13BaseURL = new URL(TestHttpClientProvider.MOCKSERVER + "/wms13");
URL capsDocument = WMSTestSupport.class.getResource("caps130.xml");
wms13Client.expectGet(new URL(wms13BaseURL + "?service=WMS&request=GetCapabilities&version=1.3.0"), new MockHttpResponse(capsDocument, "text/xml"));
URL pngImage = WMSTestSupport.class.getResource("world.png");
// we expect a getmap request with flipped coordinates
wms13Client.expectGet(new URL(wms13BaseURL + "?service=WMS&version=1.3.0&request=GetMap&layers=world4326"
+ "&styles&bbox=-90.0,-180.0,90.0,180.0&crs=EPSG:4326&bgcolor=0xFFFFFF&transparent=FALSE&format=image/png&width=180&height=90"), new MockHttpResponse(pngImage, "image/png"));
String caps = wms13BaseURL + "?service=WMS&request=GetCapabilities&version=1.3.0";
TestHttpClientProvider.bind(wms13Client, caps);
// setup the WMS layer
CatalogBuilder cb = new CatalogBuilder(getCatalog());
WMSStoreInfo store = cb.buildWMSStore("mock-wms-store-130");
getCatalog().add(store);
cb.setStore(store);
store.setCapabilitiesURL(caps);
WMSLayerInfo wmsLayer = cb.buildWMSLayer("world4326");
wmsLayer.setName(WORLD4326_130);
getCatalog().add(wmsLayer);
LayerInfo gsLayer = cb.buildLayer(wmsLayer);
getCatalog().add(gsLayer);
}
private void setupWMS110Layer() throws MalformedURLException, IOException {
// prepare the WMS 1.1 mock client
wms11Client = new MockHttpClient();
wms11BaseURL = new URL(TestHttpClientProvider.MOCKSERVER + "/wms11");
URL capsDocument = WMSTestSupport.class.getResource("caps111.xml");
wms11Client.expectGet(new URL(wms11BaseURL + "?service=WMS&request=GetCapabilities&version=1.1.1"), new MockHttpResponse(capsDocument, "text/xml"));
URL pngImage = WMSTestSupport.class.getResource("world.png");
// we expect a getmap request with flipped coordinates
wms11Client.expectGet(new URL(wms11BaseURL + "?service=WMS&version=1.1.1&request=GetMap&layers=world4326"
+ "&styles&bbox=-180.0,-90.0,180.0,90.0&srs=EPSG:4326&bgcolor=0xFFFFFF&transparent=FALSE&format=image/png&width=180&height=90"), new MockHttpResponse(pngImage, "image/png"));
String caps = wms11BaseURL + "?service=WMS&request=GetCapabilities&version=1.1.1";
TestHttpClientProvider.bind(wms11Client, caps);
// setup the WMS layer
CatalogBuilder cb = new CatalogBuilder(getCatalog());
WMSStoreInfo store = cb.buildWMSStore("mock-wms-store-110");
getCatalog().add(store);
cb.setStore(store);
store.setCapabilitiesURL(caps);
WMSLayerInfo wmsLayer = cb.buildWMSLayer("world4326");
wmsLayer.setName(WORLD4326_110);
getCatalog().add(wmsLayer);
LayerInfo gsLayer = cb.buildLayer(wmsLayer);
getCatalog().add(gsLayer);
}
private void setupWMS110NfiLayer() throws MalformedURLException, IOException {
// prepare the WMS 1.1 mock client
wms11ClientNfi = new MockHttpClient();
wms11BaseNfiURL = new URL(TestHttpClientProvider.MOCKSERVER + "/wms11_nfi");
URL capsDocument = WMSTestSupport.class.getResource("caps111_no_feature_info.xml");
wms11ClientNfi.expectGet(new URL(wms11BaseNfiURL + "?service=WMS&request=GetCapabilities&version=1.1.1"), new MockHttpResponse(capsDocument, "text/xml"));
String caps = wms11BaseNfiURL + "?service=WMS&request=GetCapabilities&version=1.1.1";
TestHttpClientProvider.bind(wms11ClientNfi, caps);
// setup the WMS layer
CatalogBuilder cb = new CatalogBuilder(getCatalog());
WMSStoreInfo store = cb.buildWMSStore("mock-wms-store-110-nfi");
getCatalog().add(store);
cb.setStore(store);
store.setCapabilitiesURL(caps);
WMSLayerInfo wmsLayer = cb.buildWMSLayer("world4326");
wmsLayer.setName(WORLD4326_110_NFI);
getCatalog().add(wmsLayer);
LayerInfo gsLayer = cb.buildLayer(wmsLayer);
getCatalog().add(gsLayer);
}
}