Package org.geoserver.monitor.hib

Source Code of org.geoserver.monitor.hib.HibernateMonitorDAO2Test

/* (c) 2014 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.monitor.hib;

import static org.junit.Assert.*;
import static org.geoserver.monitor.MonitorTestData.assertCovered;

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

import org.apache.commons.io.IOUtils;
import org.geoserver.hibernate.HibUtil;
import org.geoserver.monitor.Filter;
import org.geoserver.monitor.MonitorConfig.Mode;
import org.geoserver.monitor.MonitorDAOTestSupport;
import org.geoserver.monitor.Query;
import org.geoserver.monitor.Query.Comparison;
import org.geoserver.monitor.Query.SortOrder;
import org.geoserver.monitor.RequestData;
import org.geoserver.monitor.RequestDataVisitor;
import org.geoserver.monitor.hib.HibernateMonitorDAO2.Sync;
import org.h2.tools.DeleteDbFiles;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.web.context.support.XmlWebApplicationContext;

public class HibernateMonitorDAO2Test extends MonitorDAOTestSupport {

 
 
    private static XmlWebApplicationContext ctx;

  @BeforeClass
    public static void initHibernate() throws Exception {
     
      // setup in memory h2 db
      Properties p = new Properties();
      p.put("driver", "org.h2.Driver");
      p.put("url", "jdbc:h2:mem:monitoring");
      File file = new File("./target/monitoring/db.properties");
      FileOutputStream fos = null;
      try {
          if(!file.getParentFile().exists()) {
              assertTrue(file.getParentFile().mkdirs());
          }
          fos = new FileOutputStream(file);
          p.store(fos, null);
      } finally {
          IOUtils.closeQuietly(fos);
      }
     
        ctx = new XmlWebApplicationContext() {
            public String[] getConfigLocations() {
                return new String[]{
                    "classpath*:applicationContext-hibtest.xml",
                    "classpath*:applicationContext-hib2.xml"};
            }
        };
        ctx.refresh();
        HibernateMonitorDAO2 hibdao = (HibernateMonitorDAO2) ctx.getBean("hibMonitorDAO");
        hibdao.setSync(Sync.SYNC);
        hibdao.setMode(Mode.HYBRID);
        dao = hibdao;
       
        setUpData();
    }
   
    @AfterClass
    public static void destroy() throws Exception {
      dao.dispose();
      ctx.close();
        DeleteDbFiles.execute("target/monitoring", "monitoring", false);
    }

    @Before
    public void setUpSession() throws Exception {
        HibUtil.setUpSession(((HibernateMonitorDAO2)dao).getSessionFactory());
    }

    @After
    public void tearDownSession() throws Exception {
        HibUtil.tearDownSession(((HibernateMonitorDAO2)dao).getSessionFactory(), null);
    }
   
    @Test
    public void testGetRequestsFilterIN3() throws Exception {
        List<RequestData> datas = dao.getRequests( new Query().filter(
                "widgets", "resources", Comparison.IN ));
        assertCovered(datas, 11, 14, 18);
    }
   
    @Test
    public void testGetRequestsAggregate() throws Exception {
        final List<RequestData> datas = new ArrayList();
        final List<Object> aggs = new ArrayList();
       
        RequestDataVisitor v = new RequestDataVisitor() {
            public void visit(RequestData data, Object... aggregates) {
                datas.add(data);
                aggs.addAll(Arrays.asList(aggregates));
            }
        };
        dao.getRequests(new Query().properties("path").filter("path","/foo", Comparison.EQ).
                aggregate("count()").group("path"), v);
       
        assertEquals(1, datas.size());
        assertEquals("/foo", datas.get(0).getPath());
        assertEquals(4, ((Number)aggs.get(0)).intValue());
       
        datas.clear();
        aggs.clear();
       
        dao.getRequests(new Query().properties("service", "operation")
                .filter("service", null,  Comparison.NEQ).aggregate("count()")
                .group("service", "operation").sort("count()", SortOrder.DESC), v);
       
        RequestData r = datas.get(0);
        assertEquals("foo", r.getService());
        assertEquals("x", r.getOperation());
        assertEquals(4, ((Number)aggs.get(0)).intValue());
       
        r = datas.get(1);
        assertEquals("bam", r.getService());
        assertEquals("y", r.getOperation());
        assertEquals(2, ((Number)aggs.get(1)).intValue());
    }
   
    @Test
    public void testGetRequestsCount() throws Exception {
        final List<Object> aggs = new ArrayList();
       
        RequestDataVisitor v = new RequestDataVisitor() {
            public void visit(RequestData data, Object... aggregates) {
                aggs.addAll(Arrays.asList(aggregates));
            }
        };
        dao.getRequests(new Query().aggregate("count()").filter("path","/foo", Comparison.EQ), v);
       
        assertEquals(1, aggs.size());
        assertEquals(4, ((Number)aggs.get(0)).intValue());
    }
   
    @Test
    public void testGetRequestsFilterAnd() throws Exception {
        assertEquals(1, dao.getRequests(new Query().filter("path", "/foo", Comparison.EQ)
            .filter("widgets", "resources", Comparison.IN)).size());
    }
   
    @Test
    public void testGetRequestsFilterOr() throws Exception {
        assertEquals(4, dao.getRequests(new Query().filter("path", "/seven", Comparison.EQ)
            .or("widgets", "resources", Comparison.IN)).size());
    }
   
    @Test
    public void testGetRequestsJoin() throws Exception {
        List<RequestData> datas = dao.getRequests(new Query().properties("path", "resource")
            .filter("path","/foo", Comparison.EQ). group("path", "resource")
            .sort("resource", SortOrder.ASC));
       
        assertEquals(3, datas.size());
        assertEquals("stuff", datas.get(0).getResources().get(0));
        assertEquals("things", datas.get(1).getResources().get(0));
        assertEquals("widgets", datas.get(2).getResources().get(0));
    }
    @Test
    public void testGetRequestsJoinVisitor() throws Exception {
        final List<RequestData> datas = new ArrayList();
        final List<Object> aggs = new ArrayList();
       
        RequestDataVisitor v = new RequestDataVisitor() {
            public void visit(RequestData data, Object... aggregates) {
                datas.add(data);
                //aggs.addAll(Arrays.asList(aggregates));
            }
        };
        dao.getRequests(new Query().properties("path", "resource").filter("path","/foo", Comparison.EQ).
                group("path", "resource").sort("resource", SortOrder.ASC), v);
       
        assertEquals(3, datas.size());
        assertEquals(1, datas.get(0).getResources().size());
        assertEquals("stuff", datas.get(0).getResources().get(0));
        assertEquals(1, datas.get(1).getResources().size());
        assertEquals("things", datas.get(1).getResources().get(0));
        assertEquals(1, datas.get(2).getResources().size());
        assertEquals("widgets", datas.get(2).getResources().get(0));
    }
   
    @Test
    public void testGetRequestsJoin2() throws Exception {
        final List<RequestData> datas = new ArrayList();
        final List<Object> aggs = new ArrayList();
       
        dao.getRequests(new Query().properties("resource").aggregate("count()")
            .filter("resource", null, Comparison.NEQ).group("resource"), new RequestDataVisitor() {
            public void visit(RequestData data, Object... aggregates) {
                datas.add(data);
                aggs.add(aggregates[0]);
            }
        });
       
        //assertEquals(3, datas.size());
        for (RequestData data : datas) {
            System.out.println(data.getResources());
        }
    }
   
    @Test
    public void testGetRequestsJoinIN() throws Exception {
        List<String> resources = Arrays.asList("widgets", "things");
        List<RequestData> datas = dao.getRequests(new Query().properties("resource")
            .aggregate("count()").filter("resource", resources, Comparison.IN)
            .group("resource").sort("resource", SortOrder.ASC));
       
        assertEquals(2, datas.size());
        assertEquals("things", datas.get(0).getResources().get(0));
        assertEquals("widgets", datas.get(1).getResources().get(0));
    }
   
    @Test
    public void testGetRequestsAdvancedFilter() throws Exception {
        Filter filter = new Filter("path", "/four", Comparison.EQ)
            .or(new Filter("service", "foo", Comparison.EQ).and(
                new Filter("resource", Arrays.asList("widgets"), Comparison.IN)));
       
        List<RequestData> datas = dao.getRequests(new Query().filter(filter));
        assertEquals(2, datas.size());
        assertCovered(datas, 4, 11);
    }
   
//    @Test
//    public void testFoo() throws Exception {
//        SessionFactory sessionFactory = ((HibernateMonitorDAO2)dao).getSessionFactory();
//        Session session = sessionFactory.getCurrentSession();
//       
//        /*Query q = session.createQuery("SELECT rd.path FROM RequestData rd, LayerData ld " +
//                "WHERE ld in elements(rd.layers) " +
//                "AND ld.name = 'things'");*/
//        /*Query q = session.createQuery("SELECT rd.path FROM RequestData rd " +
//            "INNER JOIN rd.layers as layer WITH layer.name = 'things'");*/
//        Query q = session.createQuery(
//            "SELECT r.path, layer FROM RequestData r LEFT JOIN r.layers as layer " +
//            " WHERE r.path = '/foo' GROUP BY r.path, layer");
//       
//        for (Object o : q.list()) {
//            Object[] vals = (Object[]) o;
//            System.out.println(String.format("%s, %s", vals[0].toString(), vals[1].toString()));
//        }
//       
//    }
}
TOP

Related Classes of org.geoserver.monitor.hib.HibernateMonitorDAO2Test

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.