package org.geoserver.wfs.response; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import junit.framework.Test; import junit.framework.TestResult; import org.geoserver.data.test.MockData; import org.geoserver.test.GeoServerTestSupport; import org.w3c.dom.Document; import com.mockrunner.mock.web.MockHttpServletResponse; public class Ogr2OgrWfsTest extends GeoServerTestSupport { public static Test suite() { OgrConfiguration.DEFAULT.ogr2ogrLocation = Ogr2OgrTestUtil.getOgr2Ogr(); OgrConfiguration.DEFAULT.gdalData = Ogr2OgrTestUtil.getGdalData(); return new OneTimeTestSetup(new Ogr2OgrWfsTest()); } @Override protected void setUpInternal() throws Exception { super.setUpInternal(); } @Override public void run(TestResult result) { if (!Ogr2OgrTestUtil.isOgrAvailable()) System.out.println("Skipping ogr2ogr wfs tests, ogr2ogr could not be found, " + getName()); else super.run(result); } public void testSimpleRequest() throws Exception { String request = "wfs?request=GetFeature&typename=" + getLayerId(MockData.BUILDINGS) + "&version=1.0.0&service=wfs&outputFormat=OGR-KML"; MockHttpServletResponse resp = getAsServletResponse(request); // check content type assertEquals("application/vnd.google-earth.kml", resp.getContentType()); // read back Document dom = dom(getBinaryInputStream(resp)); // print(dom); // some very light assumptions on the contents, since we // cannot control how ogr encodes the kml... let's just assess // it's kml with the proper number of features assertEquals("kml", dom.getDocumentElement().getTagName()); assertEquals(2, dom.getElementsByTagName("Placemark").getLength()); } public void testDoubleRequest() throws Exception { String request = "wfs?request=GetFeature&typename=" + getLayerId(MockData.BUILDINGS) + "," + getLayerId(MockData.BRIDGES) + "&version=1.0.0&service=wfs&outputFormat=OGR-KML"; MockHttpServletResponse resp = getAsServletResponse(request); // check content type assertEquals("application/zip", resp.getContentType()); // check content disposition assertEquals("attachment; filename=Buildings.zip", resp.getHeader("Content-Disposition")); // read back ZipInputStream zis = new ZipInputStream(getBinaryInputStream(resp)); // get buildings entry ZipEntry entry = null; entry = zis.getNextEntry(); while (entry != null) { if (entry.getName().equals("Buildings.kml")) { break; } entry = zis.getNextEntry(); } assertNotNull(entry); assertEquals("Buildings.kml", entry.getName()); // parse the kml to check it's really xml... Document dom = dom(zis); // print(dom); // some very light assumptions on the contents, since we // cannot control how ogr encodes the kml... let's just assess // it's kml with the proper number of features assertEquals("kml", dom.getDocumentElement().getTagName()); assertEquals(2, dom.getElementsByTagName("Placemark").getLength()); } }