/* Copyright (c) 2001 - 2011 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.geoserver.monitor.ows;
import static org.junit.Assert.assertEquals;
import static org.easymock.EasyMock.*;
import java.util.Arrays;
import javax.xml.namespace.QName;
import net.opengis.ows11.CodeType;
import net.opengis.ows11.Ows11Factory;
import net.opengis.wcs10.DescribeCoverageType;
import net.opengis.wcs10.GetCoverageType;
import net.opengis.wcs10.Wcs10Factory;
import net.opengis.wcs11.Wcs11Factory;
import net.opengis.wfs.DeleteElementType;
import net.opengis.wfs.DescribeFeatureTypeType;
import net.opengis.wfs.GetFeatureType;
import net.opengis.wfs.LockFeatureType;
import net.opengis.wfs.LockType;
import net.opengis.wfs.QueryType;
import net.opengis.wfs.TransactionType;
import net.opengis.wfs.UpdateElementType;
import net.opengis.wfs.WfsFactory;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.monitor.MemoryMonitorDAO;
import org.geoserver.monitor.Monitor;
import org.geoserver.monitor.MonitorDAO;
import org.geoserver.monitor.MonitorTestData;
import org.geoserver.monitor.RequestData;
import org.geoserver.ows.Request;
import org.geoserver.platform.Operation;
import org.geoserver.platform.Service;
import org.geoserver.wms.GetFeatureInfoRequest;
import org.geoserver.wms.GetLegendGraphicRequest;
import org.geoserver.wms.GetMapRequest;
import org.geoserver.wms.MapLayerInfo;
import org.geoserver.wms.WMS;
import org.geotools.feature.NameImpl;
import org.geotools.util.Version;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opengis.feature.type.FeatureType;
public class MonitorCallbackTest {
static Monitor monitor;
MonitorCallback callback;
RequestData data;
@BeforeClass
public static void setUpData() throws Exception {
MonitorDAO dao = new MemoryMonitorDAO();
new MonitorTestData(dao).setup();
monitor = new Monitor(dao);
}
@Before
public void setUp() throws Exception {
callback = new MonitorCallback(monitor);
data = monitor.start();
}
public void tearDown() throws Exception {
monitor.complete();
}
@Test
public void testBasic() throws Exception {
callback.operationDispatched(new Request(), op("foo", "bar", "1.2.3", null));
assertEquals("BAR", data.getService());
assertEquals("foo", data.getOperation());
assertEquals("1.2.3", data.getOwsVersion());
}
@Test
public void testWFSDescribeFeatureType() throws Exception {
DescribeFeatureTypeType dft = WfsFactory.eINSTANCE.createDescribeFeatureTypeType();
dft.getTypeName().add(new QName("http://acme.org", "foo", "acme"));
dft.getTypeName().add(new QName("http://acme.org", "bar", "acme"));
Operation op = op("DescribeFeatureType", "WFS", "1.0.0", dft);
callback.operationDispatched(new Request(), op);
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWFSGetFeature() throws Exception {
GetFeatureType gf = WfsFactory.eINSTANCE.createGetFeatureType();
QueryType q = WfsFactory.eINSTANCE.createQueryType();
q.setTypeName(Arrays.asList(new QName("http://acme.org", "foo", "acme")));
gf.getQuery().add(q);
q = WfsFactory.eINSTANCE.createQueryType();
q.setTypeName(Arrays.asList(new QName("http://acme.org", "bar", "acme")));
gf.getQuery().add(q);
Operation op = op("GetFeature", "WFS", "1.0.0", gf);
callback.operationDispatched(new Request(), op);
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWFSLockFeature() throws Exception {
LockFeatureType lf = WfsFactory.eINSTANCE.createLockFeatureType();
LockType l = WfsFactory.eINSTANCE.createLockType();
l.setTypeName(new QName("http://acme.org", "foo", "acme"));
lf.getLock().add(l);
Operation op = op("LockFeature", "WFS", "1.0.0", lf);
callback.operationDispatched(new Request(), op);
assertEquals("acme:foo", data.getResources().get(0));
}
@Test
public void testWFSTransaction() throws Exception {
TransactionType t = WfsFactory.eINSTANCE.createTransactionType();
UpdateElementType ue = WfsFactory.eINSTANCE.createUpdateElementType();
ue.setTypeName(new QName("http://acme.org", "foo", "acme"));
t.getUpdate().add(ue);
DeleteElementType de = WfsFactory.eINSTANCE.createDeleteElementType();
de.setTypeName(new QName("http://acme.org", "bar", "acme"));
t.getDelete().add(de);
Operation op = op("Transaction", "WFS", "1.0.0", t);
callback.operationDispatched(new Request(), op);
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWMSGetMap() throws Exception {
GetMapRequest gm = new GetMapRequest();
gm.setLayers(Arrays.asList(createMapLayer("foo", "acme")));
callback.operationDispatched(new Request(), op("GetMap", "WMS", "1.1.1", gm));
assertEquals("acme:foo", data.getResources().get(0));
}
@Test
public void testWMSGetFeatureInfo() throws Exception {
GetFeatureInfoRequest gfi = new GetFeatureInfoRequest();
gfi.setQueryLayers(Arrays.asList(createMapLayer("foo", "acme"), createMapLayer("bar", "acme")));
callback.operationDispatched(new Request(), op("GetFeatureInfo", "WMS", "1.1.1", gfi));
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWMSGetLegendGraphic() throws Exception {
WMS wms = new WMS(createMock(GeoServer.class));
GetLegendGraphicRequest glg = new GetLegendGraphicRequest();
FeatureType type = createMock(FeatureType.class);
expect(type.getName()).andReturn(new NameImpl("http://acme.org", "foo")).anyTimes();
replay(type);
glg.setLayer(type);
callback.operationDispatched(new Request(), op("GetFeatureInfo", "WMS", "1.1.1", glg));
assertEquals("http://acme.org:foo", data.getResources().get(0));
}
@Test
public void testWCS10DescribeCoverage() throws Exception {
DescribeCoverageType dc = Wcs10Factory.eINSTANCE.createDescribeCoverageType();
dc.getCoverage().add("acme:foo");
dc.getCoverage().add("acme:bar");
callback.operationDispatched(new Request(), op("DescribeCoverage", "WCS", "1.0.0", dc));
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWCS10GetCoverage() throws Exception {
GetCoverageType gc = Wcs10Factory.eINSTANCE.createGetCoverageType();
gc.setSourceCoverage("acme:foo");
callback.operationDispatched(new Request(), op("GetCoverage", "WCS", "1.0.0", gc));
assertEquals("acme:foo", data.getResources().get(0));
}
@Test
public void testWCS11DescribeCoverage() throws Exception {
net.opengis.wcs11.DescribeCoverageType dc = Wcs11Factory.eINSTANCE.createDescribeCoverageType();
dc.getIdentifier().add("acme:foo");
dc.getIdentifier().add("acme:bar");
callback.operationDispatched(new Request(), op("DescribeCoverage", "WCS", "1.1.0", dc));
assertEquals("acme:foo", data.getResources().get(0));
assertEquals("acme:bar", data.getResources().get(1));
}
@Test
public void testWCS11GetCoverage() throws Exception {
net.opengis.wcs11.GetCoverageType gc = Wcs11Factory.eINSTANCE.createGetCoverageType();
CodeType c = Ows11Factory.eINSTANCE.createCodeType();
c.setValue("acme:bar");
gc.setIdentifier(c);
callback.operationDispatched(new Request(), op("GetCoverage", "WCS", "1.1.0", gc));
assertEquals("acme:bar", data.getResources().get(0));
}
MapLayerInfo createMapLayer(String name, String ns) {
ResourceInfo r = createMock(ResourceInfo.class);
expect(r.getName()).andReturn(name);
expect(r.getPrefixedName()).andReturn(ns + ":" + name);
expect(r.getTitle()).andReturn(name);
expect(r.getAbstract()).andReturn(name);
replay(r);
LayerInfo l = createMock(LayerInfo.class);
expect(l.getResource()).andReturn(r);
expect(l.getType()).andReturn(LayerInfo.Type.VECTOR);
replay(l);
return new MapLayerInfo(l);
}
Operation op(String name, String service, String version, Object request) {
return new Operation(name, new Service(service, null, new Version(version), null),
null, new Object[]{request});
}
}