/* (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.ows; import static org.junit.Assert.*; import java.lang.reflect.Proxy; 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.monitor.RequestData.Status; import org.geoserver.ows.DispatcherCallback; import org.geoserver.ows.Request; import org.geoserver.ows.Response; import org.geoserver.ows.util.OwsUtils; import org.geoserver.platform.Operation; import org.geoserver.platform.Service; import org.geoserver.platform.ServiceException; import org.junit.BeforeClass; import org.junit.Test; public class ControlFlowCallbackProxyTest { static Monitor monitor; @BeforeClass public static void setUpData() throws Exception { MonitorDAO dao = new MemoryMonitorDAO(); new MonitorTestData(dao).setup(); monitor = new Monitor(dao); } @Test public void test() throws Exception { final RequestData data = monitor.start(); DispatcherCallback callback = new DispatcherCallback() { public Service serviceDispatched(Request request, Service service) throws ServiceException { return null; } public Response responseDispatched(Request request, Operation operation, Object result, Response response) { return null; } public Object operationExecuted(Request request, Operation operation, Object result) { return null; } public Operation operationDispatched(Request request, Operation operation) { assertEquals(Status.WAITING, data.getStatus()); return operation; } public Request init(Request request) { return null; } public void finished(Request request) { } }; callback = createProxy(callback); callback.operationDispatched(new Request(), new Operation("foo", new Service("bar", null, null, null), null, null)); assertEquals(Status.RUNNING, data.getStatus()); } public void testGetRunningAndBlockedRequests() throws Exception { DispatcherCallback callback = new DispatcherCallback() { public long getRunningRequests() { return 10; } public long getBlockedRequests() { return 2; } public Service serviceDispatched(Request request, Service service) throws ServiceException { return null; } public Response responseDispatched(Request request, Operation operation, Object result, Response response) { return null; } public Object operationExecuted(Request request, Operation operation, Object result) { return null; } public Operation operationDispatched(Request request, Operation operation) { return null; } public Request init(Request request) { return null; } public void finished(Request request) { } }; callback = createProxy(callback); ControlFlowCallbackProxy proxy = (ControlFlowCallbackProxy) Proxy.getInvocationHandler(callback); assertNotNull(proxy); assertEquals(10l, proxy.getRunningRequests()); assertEquals(2l, proxy.getBlockedRequests()); } DispatcherCallback createProxy(DispatcherCallback callback) { ControlFlowCallbackProxy proxy = new ControlFlowCallbackProxy(monitor, callback); return (DispatcherCallback) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{DispatcherCallback.class}, proxy); } }