org.geoserver.ows.StylePublisherTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.ows.StylePublisherTest.java

Source

/* (c) 2014 - 2017 Open Source Geospatial Foundation - all rights reserved
 * (c) 2001 - 2013 OpenPlans
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.ows;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.geoserver.catalog.Catalog;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.test.GeoServerSystemTestSupport;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;

/**
 *
 * @author Ian Schneider <ischneider@boundlessgeo.com>
 */
public class StylePublisherTest extends GeoServerSystemTestSupport {

    static StylePublisher publisher;

    static List<String[]> paths = new ArrayList<String[]>();

    @Override
    protected void onSetUp(SystemTestData testData) throws Exception {

        Catalog catalog = getCatalog();
        publisher = new StylePublisher(catalog);
        publisher.setServletContext(new MockServletContext());
        GeoServerResourceLoader resourceLoader = getResourceLoader();

        // add style - global
        resourceLoader.copyFromClassPath("org/geoserver/ows/smileyface.png", "styles/smileyface.png");
        paths.add(new String[] { "styles", "smileyface.png" });

        // add style - global in subdirectory
        resourceLoader.copyFromClassPath("org/geoserver/ows/smileyface.png", "styles/icons/smileyface.png");
        paths.add(new String[] { "styles", "icons", "smileyface.png" });

        // add style - workspaced
        resourceLoader.copyFromClassPath("org/geoserver/ows/house.svg", "workspaces/cite/styles/house.svg");
        paths.add(new String[] { "styles", "cite", "house.svg" });

        // add style - workspaced in subdirectory
        resourceLoader.copyFromClassPath("org/geoserver/ows/house.svg", "workspaces/cite/styles/icons/house.svg");
        paths.add(new String[] { "styles", "cite", "icons", "house.svg" });

        // add style - workspaced style with global image
        paths.add(new String[] { "styles", "cite", "smileyface.png" });

        // add style - workspaced style with global image in subdirectory
        paths.add(new String[] { "styles", "cite", "icons", "smileyface.png" });

        // testing over-riding global image with workspaced image
        resourceLoader.copyFromClassPath("org/geoserver/ows/smileyface.png", "styles/override.png");
        resourceLoader.copyFromClassPath("org/geoserver/ows/grass_fill.png", "workspaces/cite/styles/override.png");

        // testing over-riding global image with workspaced image in subdirectory
        resourceLoader.copyFromClassPath("org/geoserver/ows/smileyface.png", "styles/icons/override.png");
        resourceLoader.copyFromClassPath("org/geoserver/ows/grass_fill.png",
                "workspaces/cite/styles/icons/override.png");
    }

    private MockHttpServletResponse request(String[] path, String modifiedSince) throws Exception {
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setContextPath("/geoserver");
        request.setMethod("GET");
        StringBuilder b = new StringBuilder("/geoserver");
        for (int i = 0; i < path.length; i++) {
            b.append('/').append(path[i]);
        }
        String uri = URLEncoder.encode(b.toString(), "UTF-8");
        request.setRequestURI(uri);
        if (modifiedSince != null) {
            request.addHeader("If-Modified-Since", modifiedSince);
        }
        MockHttpServletResponse response = new MockHttpServletResponse();
        publisher.handleRequest(request, response);
        return response;
    }

    @Test
    public void testEncoding() throws Exception {
        for (String[] path : paths) {
            MockHttpServletResponse response = request(path, null);
            assertEquals(Arrays.toString(path), 200, response.getStatus());

            assertArrayEquals(
                    IOUtils.toByteArray(this.getClass().getClassLoader()
                            .getResourceAsStream("org/geoserver/ows/" + path[path.length - 1])),
                    response.getContentAsByteArray());
        }
    }

    @Test
    public void testOverride() throws Exception {
        String[] path = new String[] { "styles", "override.png" };
        MockHttpServletResponse response = request(path, null);
        assertEquals(Arrays.toString(path), 200, response.getStatus());

        assertArrayEquals(
                IOUtils.toByteArray(
                        this.getClass().getClassLoader().getResourceAsStream("org/geoserver/ows/smileyface.png")),
                response.getContentAsByteArray());

        path = new String[] { "styles", "cite", "override.png" };
        response = request(path, null);
        assertEquals(Arrays.toString(path), 200, response.getStatus());

        assertArrayEquals(
                IOUtils.toByteArray(
                        this.getClass().getClassLoader().getResourceAsStream("org/geoserver/ows/grass_fill.png")),
                response.getContentAsByteArray());

        path = new String[] { "styles", "icons", "override.png" };
        response = request(path, null);
        assertEquals(Arrays.toString(path), 200, response.getStatus());

        assertArrayEquals(
                IOUtils.toByteArray(
                        this.getClass().getClassLoader().getResourceAsStream("org/geoserver/ows/smileyface.png")),
                response.getContentAsByteArray());

        path = new String[] { "styles", "cite", "icons", "override.png" };
        response = request(path, null);
        assertEquals(Arrays.toString(path), 200, response.getStatus());

        assertArrayEquals(
                IOUtils.toByteArray(
                        this.getClass().getClassLoader().getResourceAsStream("org/geoserver/ows/grass_fill.png")),
                response.getContentAsByteArray());
    }

    @Test
    public void testLastModified() throws Exception {
        for (String[] path : paths) {
            MockHttpServletResponse response = request(path, null);

            String lastModified = response.getHeader("Last-Modified");
            assertNotNull(lastModified);
            response = request(path, lastModified);
            assertEquals(304, response.getStatus());

            long timeStamp = AbstractURLPublisher.lastModified(lastModified) + 10000;
            response = request(path, AbstractURLPublisher.lastModified(timeStamp));
            assertEquals(304, response.getStatus());

            timeStamp -= 20000;
            response = request(path, AbstractURLPublisher.lastModified(timeStamp));
            assertEquals(200, response.getStatus());
            assertArrayEquals(
                    IOUtils.toByteArray(this.getClass().getClassLoader()
                            .getResourceAsStream("org/geoserver/ows/" + path[path.length - 1])),
                    response.getContentAsByteArray());

        }
    }

}