Package org.geoserver.monitor.rest

Source Code of org.geoserver.monitor.rest.RequestResourceTest

package org.geoserver.monitor.rest;

import static org.geoserver.monitor.MonitorTestData.assertCovered;
import static org.geoserver.monitor.MonitorTestData.assertCoveredInOrder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.geoserver.monitor.MemoryMonitorDAO;
import org.geoserver.monitor.Monitor;
import org.geoserver.monitor.MonitorTestData;
import org.geoserver.monitor.RequestData;
import org.geoserver.rest.PageInfo;
import org.geotools.feature.type.DateUtil;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.restlet.data.Reference;
import org.restlet.data.Request;
import org.restlet.data.Response;

public class RequestResourceTest {

    static Monitor monitor;
    RequestResource resource;
   
    @BeforeClass
    public static void setUpData() throws Exception {
        monitor = new Monitor(new MemoryMonitorDAO());
        new MonitorTestData(monitor.getDAO()).setup();
    }
   
    @Before
    public void setUp() throws Exception {
        resource = new RequestResource(monitor);
    }
   
    @Test
    public void testGetAll() throws Exception {
        Request req = new Request();
        Response res = new Response(req);
       
        resource.init(null, req, res);
        List<RequestData> datas = (List<RequestData>) resource.handleObjectGet();
       
        assertEquals(monitor.getDAO().getRequests().size(), datas.size());
    }
   
    @Test
    public void testGetAllHTML() throws Exception {
        Request req = new Request();
        PageInfo page = new PageInfo();
        page.setBasePath("foo");
        page.setPagePath("bar");
        page.setBaseURL("baz");
        req.getAttributes().put(PageInfo.KEY, page);
        Response res = new Response(req);
       
        RequestResource.HTMLFormat format = new RequestResource.HTMLFormat(req, res, resource);
       
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        format.toRepresentation(monitor.getDAO().getRequests()).write(out);
       
        assertTrue(new String(out.toByteArray()).startsWith("<html>"));
    }
   
    @Test
    public void testGetAllCSV() throws Exception {
        RequestResource.CSVFormat format = new RequestResource.CSVFormat(
            new String[]{"id", "path", "startTime"});
       
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        format.toRepresentation(monitor.getDAO().getRequests()).write(out);
       
        BufferedReader in = new BufferedReader(new InputStreamReader(
            new ByteArrayInputStream(out.toByteArray())));
        String line = in.readLine();
        assertEquals("id,path,startTime", line);
       
        Iterator<RequestData> it = monitor.getDAO().getRequests().iterator();
        while((line = in.readLine()) != null) {
            assertTrue(it.hasNext());
           
            RequestData data = it.next();
            String expected = data.getId() + "," + data.getPath() + "," +
                DateUtil.serializeDateTime(data.getStartTime());
            assertEquals(expected, line);
        }
       
        assertFalse(it.hasNext());
    }
   
    @Test
    public void testGetZIP() throws Exception {
        RequestResource.CSVFormat csv = new RequestResource.CSVFormat(
            new String[]{"id", "path", "startTime"});
        RequestResource.ZIPFormat zip = new RequestResource.ZIPFormat(
            Arrays.asList("id", "path", "startTime", "Error", "Body"), csv, monitor);
       
        Date startTime  = new Date();
        Throwable throwable = new Throwable();
        RequestData data = new RequestData();
        data.setId(12345);
        data.setPath("/foo");
        data.setStartTime(startTime);
       
        data.setBody("<foo></foo>".getBytes());
        data.setError(throwable);
       
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        zip.toRepresentation(data).write(out);
       
        ZipInputStream zin = new ZipInputStream(new ByteArrayInputStream(out.toByteArray()));
        ZipEntry entry = null;
       
        boolean requests = false;
        boolean body = false;
        boolean error = false;
       
        while((entry = zin.getNextEntry()) != null) {
            if ("requests.csv".equals(entry.getName())) {
                requests = true;
               
                String expected = "id,path,startTime\n12345,/foo," + DateUtil.serializeDateTime(startTime);
                assertEquals(expected, readEntry(zin));
            }
            else if ("body.txt".equals(entry.getName())) {
                body = true;
                assertEquals("<foo></foo>", readEntry(zin));
            }
            else if ("error.txt".equals(entry.getName())) {
                error = true;
                ByteArrayOutputStream bout = new ByteArrayOutputStream();
                PrintStream stream = new PrintStream(bout);
                throwable.printStackTrace(stream);
                stream.flush();
               
                assertEquals(new String(bout.toByteArray()).trim(), readEntry(zin));
            }
        }
       
        assertTrue(requests);
        assertTrue(body);
        assertTrue(error);
    }
   
    String readEntry(ZipInputStream zin) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int n = -1;
        while ((n = zin.read(buf)) != -1) {
            out.write(buf, 0, n);
        }
       
        return new String(out.toByteArray()).trim();
    }
   
    @Test
    public void testGetById() throws Exception {
        Request req = new Request();
        req.getAttributes().put("request", 2);
       
        Response res = new Response(req);
       
        resource.init(null, req, res);
        RequestData data = (RequestData) resource.handleObjectGet();
        assertEquals("/two", data.getPath());
    }
   
    @Test
    public void testGetByIdHTML() throws Exception {
        Request req = new Request();
        Response res = new Response(req);
       
        RequestResource.HTMLFormat format = new RequestResource.HTMLFormat(req, res, resource);
       
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        format.toRepresentation(monitor.getDAO().getRequest(2)).write(out);
       
        assertTrue(new String(out.toByteArray()).startsWith("<html>"));
    }
   
    @Test
    public void testGetDateRange() throws Exception {
        Request req = new Request();
        setKVP(req, "from", "2010-07-23T15:56:44", "to", "2010-07-23T16:16:44");
       
        Response res = new Response(req);
        resource.init(null, req, res);
        List<RequestData> datas = (List<RequestData>) resource.handleObjectGet();
       
        assertCoveredInOrder(datas, 6, 5, 4);
    }
   
    @Test
    public void testSorting() throws Exception {
        Request req = new Request();
        setKVP(req, "order", "path");
       
        Response res = new Response(req);
        resource.init(null, req, res);
        List<RequestData> datas = (List<RequestData>) resource.handleObjectGet();
        assertCoveredInOrder(datas, 8, 5, 4, 9, 1, 7, 6, 10, 3, 2);
       
        setKVP(req, "order", "path;ASC");
        res = new Response(req);
        resource.init(null, req, res);
        datas = (List<RequestData>) resource.handleObjectGet();
        assertCoveredInOrder(datas, 8, 5, 4, 9, 1, 7, 6, 10, 3, 2);
       
        setKVP(req, "order", "path;DESC");
        res = new Response(req);
        resource.init(null, req, res);
        datas = (List<RequestData>) resource.handleObjectGet();
        assertCoveredInOrder(datas, 2, 3, 10, 6, 7, 1, 9, 4, 5, 8);
    }
   
    @Test
    public void testPaging() throws Exception {
        Request req = new Request();
        setKVP(req, "order", "startTime", "offset", "5", "count", "2");
       
        Response res = new Response(req);
        resource.init(null, req, res);
        List<RequestData> datas = (List<RequestData>) resource.handleObjectGet();
       
        assertCoveredInOrder(datas, 6, 7);
    }
   
    @Test
    public void testLive() throws Exception {
        Request req = new Request();
        setKVP(req, "live", "yes");
       
        Response res = new Response(req);
        resource.init(null, req, res);
        List<RequestData> datas = (List<RequestData>) resource.handleObjectGet();
       
        assertCovered(datas, 1, 2, 5, 6, 9, 10);
    }
   
    void setKVP(Request req, String... kvp) {
        Reference ref = new Reference();
       
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < kvp.length; i += 2) {
            sb.append(kvp[i]).append("=").append(kvp[i+1]).append("&");
        }
        sb.setLength(sb.length()-1);
        ref.setQuery(sb.toString());
       
        req.setResourceRef(ref);
    }
}
TOP

Related Classes of org.geoserver.monitor.rest.RequestResourceTest

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.