/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
*
*/
package org.geoserver.wfsng;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.junit.Assume;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.impl.DataStoreInfoImpl;
import org.geoserver.catalog.impl.FeatureTypeInfoImpl;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.feature.retype.RetypingDataStore;
import org.geoserver.test.GeoServerSystemTestSupport;
import org.geotools.data.DataAccess;
import org.geotools.data.wfs.WFSDataStore;
import org.junit.Test;
import org.opengis.feature.Feature;
import org.opengis.feature.type.FeatureType;
/**
*
* Test wfg-ng backwards compatibility with wfs datastores.
*
* This test assumes a running GeoServer on port 8080 with the release data dir.
*
* @author Niels Charlier
*
*/
public class WfsCompatibilityTest extends GeoServerSystemTestSupport {
private boolean isOnline() {
try {
URL u = new URL("http://localhost:8080/geoserver");
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
return huc.getResponseCode() == 200;
} catch (IOException e) {
return false;
}
}
@Test
public void testWfsCompatitibility() throws IOException {
Assume.assumeTrue(isOnline());
XStreamPersister xp = new XStreamPersisterFactory().createXMLPersister();
DataStoreInfo storeInfo = xp.load(getClass().getResourceAsStream("datastore.xml"), DataStoreInfoImpl.class);
storeInfo.setWorkspace(getCatalog().getDefaultWorkspace());
getCatalog().add(storeInfo);
FeatureTypeInfo ftInfo = xp.load(getClass().getResourceAsStream("featuretype.xml"), FeatureTypeInfoImpl.class);
((FeatureTypeInfoImpl) ftInfo).setStore(storeInfo);
getCatalog().add(ftInfo);
DataAccess<? extends FeatureType, ? extends Feature> store = storeInfo.getDataStore(null);
if (store instanceof RetypingDataStore) {
store = ((RetypingDataStore) store).getWrapped();
}
assertTrue(store instanceof WFSDataStore);
try {
FeatureType type = ftInfo.getFeatureType();
assertEquals("sf_archsites", type.getName().getLocalPart());
assertEquals("sf_archsites", ftInfo.getFeatureSource(null, null).getName().getLocalPart());
} catch(IOException e) {
String expectedMessage = "Schema 'sf_archsites' does not exist.";
assertEquals("Exception message must be correct", expectedMessage, e.getMessage());
}
}
}