Package org.vfny.geoserver.wms.responses.helpers

Source Code of org.vfny.geoserver.wms.responses.helpers.DescribeLayerTransformerTest

/* Copyright (c) 2001 - 2007 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.vfny.geoserver.wms.responses.helpers;

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

import java.io.StringWriter;

import javax.xml.transform.TransformerException;

import junit.framework.TestCase;

import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.XpathEngine;
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.catalog.impl.CoverageInfoImpl;
import org.geoserver.catalog.impl.CoverageStoreInfoImpl;
import org.geoserver.catalog.impl.DataStoreInfoImpl;
import org.geoserver.catalog.impl.FeatureTypeInfoImpl;
import org.geoserver.catalog.impl.LayerInfoImpl;
import org.geoserver.catalog.impl.NamespaceInfoImpl;
import org.geoserver.catalog.impl.WorkspaceInfoImpl;
import org.geoserver.config.impl.GeoServerImpl;
import org.geoserver.wms.MapLayerInfo;
import org.geoserver.wms.WMS;
import org.geoserver.wms.WMSInfoImpl;
import org.geoserver.wms.WMSTestSupport;
import org.vfny.geoserver.wms.requests.DescribeLayerRequest;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
* Unit test suite for {@link DescribeLayerTransformer}
*
* @author Gabriel Roldan
* @version $Id: DescribeLayerTransformerTest.java 13349 2009-09-17 08:31:10Z aaime $
*/
public class DescribeLayerTransformerTest extends TestCase {

    private static final String TEST_NS_PREFIX = "geos";

    private static final String TEST_NAMESPACE = "http//www.geoserver.org/test";

    /**
     * A request for the tests to fill up with the test spficic parameters. setUp creates it whit a
     * mocked up catalog
     */
    private DescribeLayerRequest request;

    private DescribeLayerTransformer transformer;

    private XpathEngine XPATH;

    private CatalogImpl catalog;

    private FeatureTypeInfoImpl featureTypeInfo;

    private CoverageInfoImpl coverageInfo;

    private LayerInfoImpl vectorLayerInfo;

    private LayerInfoImpl coverageLayerInfo;

    /**
     * Sets up a base request with a mocked up geoserver and catalog for the tests
     */
    protected void setUp() throws Exception {
        // Map<String, String> namespaces = new HashMap<String, String>();
        // namespaces.put("xlink", "http://www.w3.org/1999/xlink");
        // namespaces.put(TEST_NS_PREFIX, TEST_NAMESPACE);
        // XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(namespaces));
        XPATH = XMLUnit.newXpathEngine();

        GeoServerImpl geoServerImpl = new GeoServerImpl();
        catalog = new CatalogImpl();
        geoServerImpl.setCatalog(catalog);
        NamespaceInfoImpl ns = new NamespaceInfoImpl();
        ns.setPrefix(TEST_NS_PREFIX);
        ns.setURI(TEST_NAMESPACE);

        WorkspaceInfoImpl workspace = new WorkspaceInfoImpl();
        workspace.setId("fakeWs");
        workspace.setName("fakeWs");

        DataStoreInfoImpl dataStoreInfo = new DataStoreInfoImpl(catalog);
        dataStoreInfo.setName("fakeDs");
        dataStoreInfo.setId("fakeDs");
        dataStoreInfo.setWorkspace(workspace);

        featureTypeInfo = new FeatureTypeInfoImpl(catalog);
        featureTypeInfo.setNamespace(ns);
        featureTypeInfo.setName("states");
        featureTypeInfo.setStore(dataStoreInfo);

        vectorLayerInfo = new LayerInfoImpl();
        vectorLayerInfo.setResource(featureTypeInfo);
        vectorLayerInfo.setId("states");
        vectorLayerInfo.setName("states");

        catalog.add(ns);
        catalog.add(workspace);
        catalog.add(dataStoreInfo);
        catalog.add(featureTypeInfo);
        catalog.add(vectorLayerInfo);

        CoverageStoreInfoImpl coverageStoreInfo = new CoverageStoreInfoImpl(catalog);
        coverageStoreInfo.setId("coverageStore");
        coverageStoreInfo.setName("coverageStore");
        coverageStoreInfo.setWorkspace(workspace);

        coverageInfo = new CoverageInfoImpl(catalog);
        coverageInfo.setNamespace(ns);
        coverageInfo.setName("fakeCoverage");
        coverageInfo.setStore(coverageStoreInfo);

        coverageLayerInfo = new LayerInfoImpl();
        coverageLayerInfo.setResource(coverageInfo);
        coverageLayerInfo.setId("fakeCoverage");
        coverageLayerInfo.setName("fakeCoverage");

        catalog.add(coverageStoreInfo);
        catalog.add(coverageInfo);
        catalog.add(coverageLayerInfo);

        geoServerImpl.add(new WMSInfoImpl());
        WMS wms = new WMS(geoServerImpl);
        request = new DescribeLayerRequest(wms);
        request.setBaseUrl("http://localhost:8080/geoserver");
        request.setVersion("1.1.1");
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testPreconditions() throws TransformerException {
        try {
            new DescribeLayerTransformer(null);
            fail("expected NPE on null base url");
        } catch (NullPointerException e) {
            assertTrue(true);
        }

        transformer = new DescribeLayerTransformer("http://geoserver.org");
        try {
            transformer.transform(null);
            fail("expected IAE on null request");
        } catch (TransformerException e) {
            assertTrue(e.getCause() instanceof IllegalArgumentException);
        }
        try {
            transformer.transform(new Object());
            fail("expected IAE on argument non a DescribeLayerRequest instance");
        } catch (TransformerException e) {
            assertTrue(e.getCause() instanceof IllegalArgumentException);
        }
    }

    /**
     * Test the root element name and version attribute.
     * <p>
     * This test does not set a requested layer to the request and {@link DescribeLayerTransformer}
     * does not care since checking the mandatory arguments shall be done prior to using the
     * transformer, so it'll return an empty root element in this case.
     * </p>
     *
     * @throws Exception
     */
    public void testRootElement() throws Exception {
        transformer = new DescribeLayerTransformer("http://geoserver.org");
        Document dom = WMSTestSupport.transform(request, transformer);
        Element root = dom.getDocumentElement();
        assertEquals("WMS_DescribeLayerResponse", root.getNodeName());
        assertEquals("1.1.1", root.getAttribute("version"));
    }

    public void testDTDLocation() throws Exception {
        final String expected = "!DOCTYPE WMS_DescribeLayerResponse SYSTEM \"http://geoserver.org/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd\"";
        transformer = new DescribeLayerTransformer("http://geoserver.org");
        StringWriter writer = new StringWriter();
        transformer.transform(request, writer);
        assertTrue(writer.getBuffer().indexOf(expected) > 0);
    }

    public void testSingleVectorLayer() throws Exception {
        MapLayerInfo mapLayerInfo = new MapLayerInfo(vectorLayerInfo);

        request.addLayer(mapLayerInfo);

        final String serverBaseUrl = "http://geoserver.org";

        transformer = new DescribeLayerTransformer(serverBaseUrl);
        final Document dom = WMSTestSupport.transform(request, transformer);

        final String layerDescPath = "/WMS_DescribeLayerResponse/LayerDescription";
        assertXpathExists(layerDescPath, dom);
        assertXpathEvaluatesTo("geos:states", layerDescPath + "/@name", dom);

        final String expectedWfsAtt = serverBaseUrl + "/wfs/WfsDispatcher?";
        assertXpathExists(layerDescPath + "/@wfs", dom);
        assertXpathEvaluatesTo(expectedWfsAtt, layerDescPath + "/@wfs", dom);

        assertXpathExists(layerDescPath + "/@owsURL", dom);
        assertXpathEvaluatesTo(expectedWfsAtt, layerDescPath + "/@owsURL", dom);

        assertXpathExists(layerDescPath + "/@owsType", dom);
        assertXpathEvaluatesTo("WFS", layerDescPath + "/@owsType", dom);

        assertXpathExists(layerDescPath + "/Query", dom);
        assertXpathEvaluatesTo("geos:states", layerDescPath + "/Query/@typeName", dom);
    }

    public void testSingleRasterLayer() throws Exception {
        MapLayerInfo mapLayerInfo = new MapLayerInfo(coverageLayerInfo);

        request.addLayer(mapLayerInfo);

        final String serverBaseUrl = "http://geoserver.org";

        transformer = new DescribeLayerTransformer(serverBaseUrl);
        final Document dom = WMSTestSupport.transform(request, transformer);

        final String layerDescPath = "/WMS_DescribeLayerResponse/LayerDescription";
        assertXpathExists(layerDescPath, dom);
        assertXpathEvaluatesTo("geos:fakeCoverage", layerDescPath + "/@name", dom);

        // no wfs attribute for a coverage layer
        assertXpathEvaluatesTo("", layerDescPath + "/@wfs", dom);

        assertXpathExists(layerDescPath + "/@owsURL", dom);
        final String expectedOWSURLAtt = serverBaseUrl + "/wcs?";
        assertXpathEvaluatesTo(expectedOWSURLAtt, layerDescPath + "/@owsURL", dom);

        assertXpathExists(layerDescPath + "/@owsType", dom);
        assertXpathEvaluatesTo("WCS", layerDescPath + "/@owsType", dom);

        assertXpathExists(layerDescPath + "/Query", dom);
        assertXpathEvaluatesTo("geos:fakeCoverage", layerDescPath + "/Query/@typeName", dom);
    }

    public void testMultipleLayers() throws Exception {
        request.addLayer(new MapLayerInfo(vectorLayerInfo));
        request.addLayer(new MapLayerInfo(coverageLayerInfo));

        final String serverBaseUrl = "http://geoserver.org";

        transformer = new DescribeLayerTransformer(serverBaseUrl);
        final Document dom = WMSTestSupport.transform(request, transformer);

        final String layerDescPath1 = "/WMS_DescribeLayerResponse/LayerDescription[1]";
        final String layerDescPath2 = "/WMS_DescribeLayerResponse/LayerDescription[2]";

        assertXpathExists(layerDescPath1, dom);
        assertXpathExists(layerDescPath2, dom);
        assertXpathEvaluatesTo("geos:states", layerDescPath1 + "/@name", dom);
        assertXpathEvaluatesTo("geos:fakeCoverage", layerDescPath2 + "/@name", dom);
    }
}
TOP

Related Classes of org.vfny.geoserver.wms.responses.helpers.DescribeLayerTransformerTest

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.