/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.wms.test; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.Properties; import org.geotools.data.ows.CRSEnvelope; import org.geotools.data.ows.Layer; import org.geotools.data.ows.Specification; import org.geotools.data.ows.WMSCapabilities; import org.geotools.data.wms.WMS1_1_0; import org.geotools.data.wms.WebMapServer; import org.geotools.data.wms.request.GetMapRequest; import org.xml.sax.SAXException; /** * @author Richard Gould * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates * * @source $URL$ */ public class WMS1_1_0_OnlineTest extends WMS1_0_0_OnlineTest { protected URL getStylesURL; public WMS1_1_0_OnlineTest() throws Exception { server = new URL("http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?VERSION=1.1.0&REQUEST=GetCapabilities"); spec = new WMS1_1_0(); } public void testGetVersion() { assertEquals(spec.getVersion(), "1.1.0"); } /* (non-Javadoc) * @see org.geotools.data.wms.test.WMS1_0_0Test#checkProperties(java.util.Properties) */ protected void checkProperties(Properties properties) { assertEquals(properties.get("REQUEST"), "GetCapabilities"); assertEquals(properties.get("VERSION"), "1.1.0"); assertEquals(properties.get("SERVICE"), "WMS"); } public void testCreateDescribeLayerRequest() throws Exception { /* TODO FIX try{ WebMapServer wms = new CustomWMS(server); DescribeLayerRequest request = wms.createDescribeLayerRequest(); assertNotNull(request); request.setLayers("land_fn,park,drain_fn,road,popplace"); System.out.println(request.getFinalURL()); DescribeLayerResponse response = (DescribeLayerResponse) wms.issueRequest(request); assertNotNull(response); LayerDescription[] layerDescs = response.getLayerDescs(); assertEquals(layerDescs.length, 5); assertEquals(layerDescs[0].getName(), "land_fn"); assertEquals(layerDescs[1].getName(), "park"); assertEquals(layerDescs[2].getName(), "drain_fn"); assertEquals(layerDescs[3].getName(), "road"); assertEquals(layerDescs[4].getName(), "popplace"); assertEquals(layerDescs[1].getWfs(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?")); assertEquals(layerDescs[4].getWfs(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswfs_gmap?")); assertEquals(layerDescs[1].getQueries().length, 1); assertEquals(layerDescs[4].getQueries().length, 1); assertEquals(layerDescs[1].getQueries()[0], "park"); assertEquals(layerDescs[4].getQueries()[0], "popplace"); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } */ } public void testCreateGetLegendGraphicRequest() throws Exception { /* TODO FIX try{ WebMapServer wms = new CustomWMS(server); GetLegendGraphicRequest request = wms.createGetLegendGraphicRequest(); assertNotNull(request); Layer[] layers = WMSUtils.getNamedLayers(wms.getCapabilities()); SimpleLayer park = null; for (int i = 0; i < layers.length; i++) { if (layers[i].getName().equals("park")) { park = new SimpleLayer(layers[i].getName(), ""); break; } } assertNotNull(park); request.setLayer(park); request.setFormat("image/gif"); request.setWidth("50"); request.setHeight("50"); System.out.println(request.getFinalURL()); GetLegendGraphicResponse response = (GetLegendGraphicResponse) wms.issueRequest(request); assertNotNull(response); assertEquals(response.getContentType(), "image/gif"); BufferedImage image = ImageIO.read(response.getInputStream()); assertEquals(image.getHeight(), 50); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } */ } //Cannot test 1.1.0 versioning.. I don't have a 1.1.0 server that will do GetStyles // public void testCreateGetStylesRequest() throws Exception { // WebMapServer wms = new CustomWMS(getStylesURL); // // GetStylesRequest request = wms.createGetStylesRequest(); // assertNotNull(request); // // } public void testCreateParser() throws Exception { WMSCapabilities capabilities = createCapabilities("1.1.0Capabilities.xml"); try{ assertEquals(capabilities.getVersion(), "1.1.0"); assertEquals(capabilities.getService().getName(), "OGC:WMS"); assertEquals(capabilities.getService().getTitle(), "GMap WMS Demo Server"); assertNotNull(capabilities.getService().get_abstract()); assertEquals(capabilities.getService().getOnlineResource(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?")); assertNull(capabilities.getService().getKeywordList()); assertEquals(capabilities.getRequest().getGetCapabilities().getFormats().size(), 1); assertEquals(capabilities.getRequest().getGetCapabilities().getFormats().get(0), "application/vnd.ogc.wms_xml"); assertEquals(capabilities.getRequest().getGetCapabilities().getGet(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?")); assertEquals(capabilities.getRequest().getGetCapabilities().getPost(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?")); assertEquals(capabilities.getRequest().getGetMap().getFormats().size(), 7); assertEquals(capabilities.getRequest().getGetMap().getFormats().get(0), "image/gif"); assertEquals(capabilities.getRequest().getGetMap().getFormats().get(3), "image/wbmp"); assertEquals(capabilities.getRequest().getGetMap().getFormats().get(6), "image/tiff"); assertEquals(capabilities.getRequest().getGetMap().getGet(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?")); assertEquals(capabilities.getRequest().getGetMap().getPost(), new URL("http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?")); assertEquals(capabilities.getRequest().getGetFeatureInfo().getFormats().size(), 3); assertEquals(capabilities.getRequest().getGetFeatureInfo().getFormats().get(0), "text/plain"); assertEquals(capabilities.getRequest().getGetFeatureInfo().getFormats().get(1), "text/html"); assertEquals(capabilities.getRequest().getGetFeatureInfo().getFormats().get(2), "application/vnd.ogc.gml"); assertEquals(capabilities.getLayerList().size(), 12); Layer layer = (Layer) capabilities.getLayerList().get(0); assertNull(layer.getParent()); assertEquals(layer.getName(), "DEMO"); assertEquals(layer.get_abstract(), "Abstract Test"); String[] keywords = layer.getKeywords(); assertNotNull(keywords); assertEquals(keywords.length, 2); assertEquals(keywords[0], "word1"); assertEquals(keywords[1], "word2"); assertEquals(layer.getTitle(), "GMap WMS Demo Server"); assertEquals(layer.getSrs().size(), 4); assertTrue(layer.getSrs().contains("EPSG:42304")); assertTrue(layer.getSrs().contains("EPSG:42101")); assertTrue(layer.getSrs().contains("EPSG:4269")); assertTrue(layer.getSrs().contains("EPSG:4326")); CRSEnvelope llbbox = layer.getLatLonBoundingBox(); validateBoundingBox(llbbox, -172.367, 35.6673, -11.5624, 83.8293); assertEquals(layer.getBoundingBoxes().size(), 1); assertNotNull(layer.getBoundingBoxes().get("EPSG:42304")); Layer layer2 = (Layer) capabilities.getLayerList().get(1); assertEquals(layer2.getParent(), layer); assertEquals(layer2.getName(), "bathymetry"); assertEquals(layer2.getTitle(), "Elevation/Bathymetry"); assertTrue(layer2.getSrs().contains("EPSG:42304")); assertFalse(layer2.isQueryable()); layer2 = (Layer) capabilities.getLayerList().get(2); assertEquals(layer2.getParent(), layer); assertEquals(layer2.getName(), "land_fn"); assertEquals(layer2.getTitle(), "Foreign Lands"); validateBoundingBox(layer2.getLatLonBoundingBox(), -178.838, 31.8844, 179.94, 89.8254); assertTrue(layer2.getSrs().contains("EPSG:42304")); assertFalse(layer2.isQueryable()); assertNotNull(layer2.getBoundingBoxes().get("EPSG:42304")); layer2 = (Layer) capabilities.getLayerList().get(3); assertEquals(layer2.getParent(), layer); assertEquals(layer2.getName(), "park"); assertEquals(layer2.getTitle(), "Parks"); validateBoundingBox(layer2.getLatLonBoundingBox(), -173.433, 41.4271, -13.3643, 83.7466); assertTrue(layer2.getSrs().contains("EPSG:42304")); assertTrue(layer2.isQueryable()); assertNotNull(layer2.getBoundingBoxes().get("EPSG:42304")); layer2 = (Layer) capabilities.getLayerList().get(11); assertEquals(layer2.getParent(), layer); assertEquals(layer2.getName(), "grid"); assertEquals(layer2.getTitle(), "Grid"); llbbox = layer2.getLatLonBoundingBox(); validateBoundingBox(llbbox, -178.838, 31.8844, 179.94, 89.8254); assertTrue(layer2.getSrs().contains("EPSG:42304")); assertFalse(layer2.isQueryable()); assertNotNull(layer2.getBoundingBoxes().get("EPSG:42304")); } catch(Exception e){ if(e.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+e); } else{ throw(e); } } } public void testCreateGetMapRequest() throws Exception { try{ WebMapServer wms = new WebMapServer(server); WMSCapabilities caps = wms.getCapabilities(); GetMapRequest request = wms.createGetMapRequest(); request.setFormat("image/jpeg"); //System.out.println(request.getFinalURL().toExternalForm()); assertTrue(request.getFinalURL().toExternalForm().indexOf("image/jpeg") >= 0); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } } protected WebMapServer getCustomWMS( URL featureURL ) throws SAXException, URISyntaxException, IOException { return new CustomWMS(featureURL); } protected void validateBoundingBox(CRSEnvelope llbbox, double minX, double minY, double maxX, double maxY) { assertNotNull(llbbox); assertEquals(llbbox.getMinX(), minX, 0.0); assertEquals(llbbox.getMinY(), minY, 0.0); assertEquals(llbbox.getMaxX(), maxX, 0.0); assertEquals(llbbox.getMaxY(), maxY, 0.0); } //forces use of 1.1.0 spec private class CustomWMS extends WebMapServer { /** * @param serverURL * @param wait * @throws SAXException * @throws URISyntaxException * @throws IOException */ public CustomWMS( URL serverURL) throws SAXException, URISyntaxException, IOException { super(serverURL); // TODO Auto-generated constructor stub } protected void setupSpecifications() { specs = new Specification[1]; specs[0] = new WMS1_1_0(); } } }