Index: src/test/java/org/geoserver/wms/kvp/GetMapKvpRequestReaderTest.java =================================================================== --- src/test/java/org/geoserver/wms/kvp/GetMapKvpRequestReaderTest.java (revision 12446) +++ src/test/java/org/geoserver/wms/kvp/GetMapKvpRequestReaderTest.java (working copy) @@ -266,7 +266,7 @@ } public void testRemoteWFS() throws Exception { - if(!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if(!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER)) return; HashMap raw = new HashMap(); @@ -291,7 +291,7 @@ } public void testRemoteWFSNoStyle() throws Exception { - if(!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if(!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER)) return; HashMap raw = new HashMap(); @@ -314,7 +314,7 @@ } public void testRemoteWFSInvalidURL() throws Exception { - if(!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if(!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER)) return; HashMap raw = new HashMap(); Index: src/test/java/org/geoserver/wms/RemoteOWSTestSupport.java =================================================================== --- src/test/java/org/geoserver/wms/RemoteOWSTestSupport.java (revision 12446) +++ src/test/java/org/geoserver/wms/RemoteOWSTestSupport.java (working copy) @@ -5,8 +5,10 @@ package org.geoserver.wms; import java.io.IOException; +import java.io.InputStream; import java.io.Serializable; import java.net.URL; +import java.net.URLConnection; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; @@ -20,20 +22,26 @@ import org.geotools.feature.FeatureCollection; import org.opengis.filter.FilterFactory; + /** * Utility class used to check wheter REMOTE_OWS_XXX related tests can be run against Sigma * or not. * @author Andrea Aime - TOPP + * @author Ben Caradoc-Davies, CSIRO Exploration and Mining */ public class RemoteOWSTestSupport { - static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.geoserver.test"); - + // support for remote OWS layers public static final String TOPP_STATES = "topp:states"; + public static final String WFS_SERVER_URL = "http://demo.opengeo.org/geoserver/wfs?"; + + // URL for RemoteOWS specified in remoteOws.sld + public static final String REMOTE_OWS_USER_STYLE_URL = "http://sigma.openplans.org:8080/geoserver/wfs?"; + static Boolean remoteStatesAvailable; - - public static boolean isRemoteStatesAvailable() { + + public static boolean isRemoteStatesAvailable(Logger logger) { if(remoteStatesAvailable == null) { // let's check if the remote WFS tests are runnable try { @@ -53,16 +61,56 @@ dq.setFilter(ff.greater(ff.property("PERSONS"), ff.literal(20000000))); FeatureCollection fc = fs.getFeatures(dq); if(fc.size() != 1) { - LOGGER.log(Level.WARNING, "Remote database status invalid, there should be one and only one " + + logger.log(Level.WARNING, "Remote database status invalid, there should be one and only one " + "feature with more than 20M persons in topp:states"); remoteStatesAvailable = Boolean.FALSE; } } catch(IOException e) { - LOGGER.log(Level.WARNING, "Skipping remote OWS test, either demo " + + logger.log(Level.WARNING, "Skipping remote OWS test, either demo " + "is down or the topp:states layer is not there", e); remoteStatesAvailable = Boolean.FALSE; } } return remoteStatesAvailable.booleanValue(); - } + } + + /** + * Test whether the RemoteOWS URL specified in remoteOws.sld is responsive. + * + * @param logger the logger to which status will be reported + * @return true if the service appears to be available + */ + public static boolean isRemoteOwsUserStyleAvailable(Logger logger) { + InputStream input = null; + try { + URL url = new URL(REMOTE_OWS_USER_STYLE_URL + "service=WFS&request=GetCapabilities"); + URLConnection connection = url.openConnection(); + // service must connect within five seconds + connection.setConnectTimeout(5000); + // service must respond to read within five seconds + connection.setReadTimeout(5000); + input = connection.getInputStream(); + if (input.read() < 0) { + // end of the stream + throw new IOException("Unexpected end of input stream"); + } else { + // successfully read a byte + logger.info("RemoteOWS user style appears to be available"); + return true; + } + } catch (IOException e) { + // this includes SocketTimeoutException + logger.log(Level.WARNING, "RemoteOWS user style not available", e); + return false; + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + // ignore, we tried + } + } + } + } + } Index: src/test/java/org/vfny/geoserver/wms/responses/map/kml/KMLTest.java =================================================================== --- src/test/java/org/vfny/geoserver/wms/responses/map/kml/KMLTest.java (revision 12446) +++ src/test/java/org/vfny/geoserver/wms/responses/map/kml/KMLTest.java (working copy) @@ -55,7 +55,7 @@ } public void testVectorWithRemoteLayer() throws Exception { - if(!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if(!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER)) return; Document doc = getAsDOM( Index: src/test/java/org/vfny/geoserver/wms/responses/map/png/GetMapTest.java =================================================================== --- src/test/java/org/vfny/geoserver/wms/responses/map/png/GetMapTest.java (revision 12446) +++ src/test/java/org/vfny/geoserver/wms/responses/map/png/GetMapTest.java (working copy) @@ -1,6 +1,9 @@ package org.vfny.geoserver.wms.responses.map.png; import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URL; import javax.imageio.ImageIO; @@ -118,7 +121,7 @@ } public void testRemoteOWSGet() throws Exception { - if(!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if(!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER)) return; ServletResponse response = getAsServletResponse( @@ -135,8 +138,10 @@ } public void testRemoteOWSUserStyleGet() throws Exception { - if (!RemoteOWSTestSupport.isRemoteStatesAvailable()) + if (!RemoteOWSTestSupport.isRemoteStatesAvailable(LOGGER) + || !RemoteOWSTestSupport.isRemoteOwsUserStyleAvailable(LOGGER)) { return; + } URL url = GetMapTest.class.getResource("remoteOws.sld"); @@ -148,5 +153,5 @@ assertEquals("image/png", response.getContentType()); } - + }