Package org.geoserver.catalog.rest

Source Code of org.geoserver.catalog.rest.DataStoreTest

/* Copyright (c) 2001 - 2009 TOPP - www.openplans.org.  All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.catalog.rest;

import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Properties;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geotools.data.DataStore;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import com.mockrunner.mock.web.MockHttpServletResponse;


public class DataStoreTest extends CatalogRESTTestSupport {

    public void testGetAllAsXML() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores.xml");
        assertEquals( catalog.getStoresByWorkspace( "sf", DataStoreInfo.class ).size(),
            dom.getElementsByTagName( "dataStore").getLength() );
    }
   
    public void testGetAllAsJSON() throws Exception {
        JSON json = getAsJSON( "/rest/workspaces/sf/datastores.json");
        assertTrue( json instanceof JSONObject );
       
        Object datastores = ((JSONObject)json).getJSONObject("dataStores").get("dataStore");
        assertNotNull( datastores );
       
        if( datastores instanceof JSONArray ) {
            assertEquals( catalog.getDataStoresByWorkspace("sf").size() , ((JSONArray)datastores).size() );   
        }
        else {
            assertEquals( 1, catalog.getDataStoresByWorkspace("sf").size() );
        }
    }
   
    public void testGetAllAsHTML() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores.html");
        List<DataStoreInfo> datastores = catalog.getDataStoresByWorkspace("sf");
       
        NodeList links = xp.getMatchingNodes("//html:a", dom );
        assertEquals( datastores.size(), links.getLength() );
       
        for ( int i = 0; i < datastores.size(); i++ ){
            DataStoreInfo ds = datastores.get( i );
            Element link = (Element) links.item( i );
           
            assertTrue( link.getAttribute("href").endsWith( ds.getName() + ".html") );
        }
    }
   
    public void testPutAllUnauthorized() throws Exception {
        assertEquals( 405, putAsServletResponse("/rest/workspaces/sf/datastores").getStatusCode() );
    }
   
    public void testDeleteAllUnauthorized() throws Exception {
        assertEquals( 405, deleteAsServletResponse("/rest/workspaces/sf/datastores").getStatusCode() );
    }
   
    public void testGetAsXML() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores/sf.xml");
        assertEquals( "dataStore", dom.getDocumentElement().getNodeName() );
        assertEquals( "sf", xp.evaluate( "/dataStore/name", dom) );
        assertEquals( "sf", xp.evaluate( "/dataStore/workspace/name", dom) );
        assertXpathExists( "/dataStore/connectionParameters", dom );
    }
   
    public void testGetAsHTML() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores/sf.html");
       
        DataStoreInfo ds = catalog.getDataStoreByName( "sf" );
        List<FeatureTypeInfo> featureTypes = catalog.getFeatureTypesByDataStore( ds );
       
        NodeList links = xp.getMatchingNodes("//html:a", dom );
        assertEquals( featureTypes.size(), links.getLength() );
       
        for ( int i = 0; i < featureTypes.size(); i++ ){
            FeatureTypeInfo ft = featureTypes.get( i );
            Element link = (Element) links.item( i );
           
            assertTrue( link.getAttribute("href").endsWith( ft.getName() + ".html") );
        }
    }
   
    File setupNewDataStore() throws Exception {
        Properties props = new Properties();
        props.put( "_", "name:StringpointProperty:Point");
        props.put( "NewDataStore.0", "'zero'|POINT(0 0)");
        props.put( "NewDataStore.1", "'one'|POINT(1 1)");
       
        File dir = new File( "./target/nds" );
        dir.mkdir();
       
        File file = new File( dir, "newDataStore.properties");
        file.deleteOnExit();
        dir.deleteOnExit();
       
        props.store( new FileOutputStream( file ), null );
        return dir;
    }
   
    public void testPostAsXML() throws Exception {
       
        File dir = setupNewDataStore();
        String xml =
            "<dataStore>" +
              "<name>newDataStore</name>" +
              "<connectionParameters>" +
                 "<namespace><string>sf</string></namespace>" +
                 "<directory>" +
                  "<string>" + dir.getAbsolutePath() + "</string>" +
                 "</directory>" +
              "</connectionParameters>" +
              "<workspace>sf</workspace>" +
            "</dataStore>";
        MockHttpServletResponse response =
            postAsServletResponse( "/rest/workspaces/sf/datastores", xml, "text/xml" );
        assertEquals( 201, response.getStatusCode() );
        assertNotNull( response.getHeader( "Location") );
        assertTrue( response.getHeader("Location").endsWith( "/workspaces/sf/datastores/newDataStore" ) );

        DataStoreInfo newDataStore = catalog.getDataStoreByName( "newDataStore" );
        assertNotNull( newDataStore );
       
        DataStore ds = (DataStore) newDataStore.getDataStore(null);
        assertNotNull(ds);
    }
   
    public void testGetAsJSON() throws Exception {
        JSON json = getAsJSON( "/rest/workspaces/sf/datastores/sf.json" );
       
        JSONObject dataStore = ((JSONObject)json).getJSONObject("dataStore");
        assertNotNull(dataStore);
       
        assertEquals( "sf", dataStore.get( "name") );
        assertEquals( "sf", dataStore.getJSONObject( "workspace").get( "name" ) );
        assertNotNull( dataStore.get( "connectionParameters") );
    }
   
    public void testPostAsJSON() throws Exception {
        File dir = setupNewDataStore();
        String json =
            "{'dataStore':{" +
               "'connectionParameters': {" +
                   "'namespace': {'string':'sf'}," +
                   "'directory': {'string':'" + dir.getAbsolutePath().replace('\\','/'+ "'}" +
                "}," +
                "'workspace':'sf'," +
                "'name':'newDataStore'," +
              "}" +
            "}";
        MockHttpServletResponse response =
            postAsServletResponse( "/rest/workspaces/sf/datastores", json, "text/json" );
       
        assertEquals( 201, response.getStatusCode() );
        assertNotNull( response.getHeader( "Location") );
        assertTrue( response.getHeader("Location").endsWith( "/workspaces/sf/datastores/newDataStore" ) );
       
        DataStoreInfo newDataStore = catalog.getDataStoreByName( "newDataStore" );
        assertNotNull( newDataStore );
       
        DataStore ds = (DataStore) newDataStore.getDataStore(null);
        assertNotNull(ds);
    }
   
    public void testPostToResource() throws Exception {
        String xml =
        "<dataStore>" +
         "<name>sf</name>" +
         "<enabled>false</enabled>" +
        "</dataStore>";
       
        MockHttpServletResponse response =
            postAsServletResponse( "/rest/workspaces/sf/datastores/sf", xml, "text/xml");
        assertEquals( 405, response.getStatusCode() );
    }
   
    public void testPut() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores/sf.xml");
        assertXpathEvaluatesTo("true", "/dataStore/enabled", dom );
       
        String xml =
        "<dataStore>" +
         "<name>sf</name>" +
         "<enabled>false</enabled>" +
        "</dataStore>";
       
        MockHttpServletResponse response =
            putAsServletResponse( "/rest/workspaces/sf/datastores/sf", xml, "text/xml");
        assertEquals( 200, response.getStatusCode() );

        dom = getAsDOM( "/rest/workspaces/sf/datastores/sf.xml");
        assertXpathEvaluatesTo("false", "/dataStore/enabled", dom );
       
        assertFalse( catalog.getDataStoreByName( "sf", "sf").isEnabled() );
    }
   
    public void testPut2() throws Exception {
        Document dom = getAsDOM( "/rest/workspaces/sf/datastores/sf.xml");
        assertXpathEvaluatesTo("2", "count(//dataStore/connectionParameters/*)", dom );
       
        String xml =
        "<dataStore>" +
         "<name>sf</name>" +
         "<connectionParameters>"
          "<one>" +
           "<string>1</string>" +
         "</one>" +
         "<two>"+
           "<string>2</string>" +
         "</two>" +
        "</connectionParameters>"+
        "</dataStore>";
       
        MockHttpServletResponse response =
            putAsServletResponse( "/rest/workspaces/sf/datastores/sf", xml, "text/xml");
        assertEquals( 200, response.getStatusCode() );
       
        DataStoreInfo ds = catalog.getDataStoreByName( "sf", "sf" );
        assertEquals( 2, ds.getConnectionParameters().size() );
        assertTrue( ds.getConnectionParameters().containsKey( "one" ) );
        assertTrue( ds.getConnectionParameters().containsKey( "two" ) );
    }
   
    public void testPutNonExistant() throws Exception {
        String xml =
            "<dataStore>" +
            "<name>changed</name>" +
            "</dataStore>";

        MockHttpServletResponse response =
            putAsServletResponse("/rest/workspaces/sf/datastores/nonExistant", xml, "text/xml" );
        assertEquals( 404, response.getStatusCode() );
    }
   
    public void testDeleteNonExistant() throws Exception {
        assertEquals( 404, deleteAsServletResponse("/rest/workspaces/sf/datastores/nonExistant").getStatusCode() );
    }
   
    public void testDelete() throws Exception {
        File dir = setupNewDataStore();
        String xml =
            "<dataStore>" +
              "<name>newDataStore</name>" +
              "<connectionParameters>" +
                "<entry>" +
                  "<string>namespace</string>" +
                  "<string>sf</string>" +
                "</entry>" +
                "<entry>" +
                  "<string>directory</string>" +
                  "<string>" + dir.getAbsolutePath() + "</string>" +
                "</entry>" +
              "</connectionParameters>" +
              "<workspace>sf</workspace>" +
            "</dataStore>";
        MockHttpServletResponse response =
            postAsServletResponse( "/rest/workspaces/sf/datastores", xml, "text/xml" );
        assertEquals( 201, response.getStatusCode() );
        assertNotNull( catalog.getDataStoreByName("sf", "newDataStore"));
       
        assertEquals( 200, deleteAsServletResponse("/rest/workspaces/sf/datastores/newDataStore").getStatusCode());
        assertNull( catalog.getDataStoreByName("sf", "newDataStore"));
    }
   
    public void testDeleteNonEmptyForbidden() throws Exception {
        assertEquals( 403, deleteAsServletResponse("/rest/workspaces/sf/datastores/sf").getStatusCode());
    }
   
    public void testPutNameChangeForbidden() throws Exception {
        String xml = "<dataStore>" +
            "<name>newName</name>" +
            "</dataStore>";
        assertEquals( 403, putAsServletResponse("/rest/workspaces/sf/datastores/sf", xml, "text/xml").getStatusCode());
    }
   
    public void testPutWorkspaceChangeForbidden() throws Exception {
        String xml = "<dataStore>" +
        "<workspace>gs</workspace>" +
        "</dataStore>";
        assertEquals( 403, putAsServletResponse("/rest/workspaces/sf/datastores/sf", xml, "text/xml").getStatusCode());
    }
}
TOP

Related Classes of org.geoserver.catalog.rest.DataStoreTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.