Package org.vfny.geoserver.wms.responses

Source Code of org.vfny.geoserver.wms.responses.GetMapResponseTest

/* 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;

import java.awt.geom.Point2D;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.logging.Level;

import junit.framework.TestCase;

import org.geoserver.ows.adapters.ResponseAdapter;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.MapLayerInfo;
import org.geoserver.wms.WMS;
import org.geoserver.wms.WMSMockData;
import org.geoserver.wms.WMSMockData.DummyRasterMapProducer;
import org.geotools.factory.CommonFactoryFinder;
import org.opengis.filter.FilterFactory;
import org.vfny.geoserver.Response;
import org.vfny.geoserver.wms.GetMapProducer;
import org.vfny.geoserver.wms.WmsException;
import org.vfny.geoserver.wms.requests.GetMapRequest;
import org.vfny.geoserver.wms.responses.map.metatile.MetatileMapProducer;

import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Point;

/**
* Unit test for {@link GetMapResponse}
* <p>
* Trying to mock up collaborators lead to 3 direct ones needing to be mocked up, plus {@link WMS}
* obtained from this test super class. Smells like too much coupling to me, though I'm not going to
* change that until we have a plan to get rid of the old {@link Response} stuff in favor of the new
* dispatching system, for which GetMapResponse is being adapted right now ({@link ResponseAdapter})
* </p>
*
* @author Gabriel Roldan (TOPP)
* @version $Id: GetMapResponseTest.java 14049 2010-02-24 20:09:49Z aaime $
* @since 2.5.x
* @source $URL:
*         https://svn.codehaus.org/geoserver/branches/1.7.x/geoserver/wms/src/test/java/org/vfny
*         /geoserver/wms/responses/GetMapResponseTest.java $
*/
public class GetMapResponseTest extends TestCase {

    private WMSMockData mockData;

    private GetMapRequest request;

    private GetMapResponse response;

    @Override
    protected void setUp() throws Exception {
        GetMapResponse.LOGGER.setLevel(Level.FINEST);
        mockData = new WMSMockData();
        mockData.setUp();

        request = mockData.createRequest();
        //add a layer so its a valid request
        MapLayerInfo layer = mockData.addFeatureTypeLayer("testType", Point.class);
        request.setLayers(new MapLayerInfo[] { layer });

        response = mockData.createResponse();
    }

    @Override
    protected void tearDown() throws Exception {
        GetMapResponse.LOGGER.setLevel(Level.INFO);
    }

    public void testConstructor() {
        try {
            new GetMapResponse(null);
            fail("should fail on null list of available producers");
        } catch (NullPointerException e) {
            assertTrue(true);
        }
        try {
            Collection<GetMapProducer> producers = Collections.emptyList();
            new GetMapResponse(producers);
            fail("should fail on empty list of available producers");
        } catch (IllegalArgumentException e) {
            assertTrue(true);
        }
    }

    /**
     * Test method for {@link GetMapResponse#execute(org.vfny.geoserver.Request)}.
     */
    public void testDelegateLookup() {
        GetMapProducer producer = new WMSMockData.DummyRasterMapProducer();
        response = new GetMapResponse(Collections.singleton(producer));
        request.setFormat(WMSMockData.DummyRasterMapProducer.MIME_TYPE);

        response.execute(request);

        GetMapProducer delegate = response.getDelegate();
        assertSame(producer, delegate);
    }

    /**
     * Test method for {@link GetMapResponse#execute(org.vfny.geoserver.Request)}.
     */
    public void testExecuteNoExtent() {
        request.setBbox(null);
        assertInvalidMandatoryParam("MissingBBox");
    }

    public void testExecuteEmptyExtent() {
        request.setBbox(new Envelope());
        assertInvalidMandatoryParam("InvalidBBox");
    }

    public void testExecuteTilingRequested() {
        request.setBbox(new Envelope(-180, -90, 180, 90));
        // request tiling
        request.setTiled(true);
        request.setTilesOrigin(new Point2D.Double(0, 0));
        request.setWidth(256);
        request.setHeight(256);

        try {
            response.execute(request);
            fail("Expected failure");
        } catch (RuntimeException e) {
            // let execute crash, we're only interested in the delegate
            assertTrue(true);
        }
        GetMapProducer delegate = response.getDelegate();
        assertTrue(delegate instanceof MetatileMapProducer);
    }

    public void testSingleVectorLayer() throws IOException {
        DummyRasterMapProducer producer = new DummyRasterMapProducer();
        response = new GetMapResponse(Collections.singleton((GetMapProducer) producer));
        request.setFormat(DummyRasterMapProducer.MIME_TYPE);

        MapLayerInfo layer = mockData.addFeatureTypeLayer("testSingleVectorLayer", Point.class);
        request.setLayers(new MapLayerInfo[] { layer });

        response.execute(request);
       
        assertNotNull(producer.mapContext);
       
        assertEquals(1, producer.mapContext.getLayerCount());
       
        assertEquals(DummyRasterMapProducer.MIME_TYPE, producer.outputFormat);
       
        assertFalse(producer.abortCalled);
       
        assertTrue(producer.produceMapCalled);
    }

    public void testExecuteNoLayers() throws Exception {
        request.setLayers(null);
        assertInvalidMandatoryParam("LayerNotDefined");
    }

    public void testExecuteNoWidth() {
        request.setWidth(0);
        assertInvalidMandatoryParam("MissingOrInvalidParameter");

        request.setWidth(-1);
        assertInvalidMandatoryParam("MissingOrInvalidParameter");
    }

    public void testExecuteNoHeight() {
        request.setHeight(0);
        assertInvalidMandatoryParam("MissingOrInvalidParameter");

        request.setHeight(-1);
        assertInvalidMandatoryParam("MissingOrInvalidParameter");
    }

    public void testExecuteInvalidFormat() {
        request.setFormat("non-existent-output-format");
        assertInvalidMandatoryParam("InvalidFormat");
    }

    public void testExecuteNoFormat() {
        request.setFormat(null);
        assertInvalidMandatoryParam("InvalidFormat");
    }

    public void testExecuteNoStyles() {
        request.setStyles(null);
        assertInvalidMandatoryParam("StyleNotDefined");
    }
   
    public void testEnviroment() {
        final FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
        request.setEnv(Collections.singletonMap("myParam", 23));
        DummyRasterMapProducer producer = new DummyRasterMapProducer() {
            @Override
            public void produceMap() throws WmsException {
                assertEquals(23, ff.function("env", ff.literal("myParam")).evaluate(null));
                assertEquals(10, ff.function("env", ff.literal("otherParam"), ff.literal(10)).evaluate(null));
            }
        };
        response = new GetMapResponse(Collections.singleton((GetMapProducer) producer));
        response.execute(request);
       
        // only defaults
        assertNull(ff.function("env", ff.literal("myParam")).evaluate(null));
        assertEquals(10, ff.function("env", ff.literal("otherParam"), ff.literal(10)).evaluate(null));
    }

    private void assertInvalidMandatoryParam(String expectedExceptionCode) {
        try {
            response.execute(request);
            fail("Expected ServiceException");
        } catch (ServiceException e) {
            assertEquals(expectedExceptionCode, e.getCode());
        }
    }

}
TOP

Related Classes of org.vfny.geoserver.wms.responses.GetMapResponseTest

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.