package org.geoserver.wps;
import static org.easymock.EasyMock.*;
import static org.easymock.classextension.EasyMock.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.easymock.IArgumentMatcher;
import org.easymock.internal.LastControl;
import org.geoserver.config.ConfigurationListener;
import org.geoserver.config.GeoServer;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.wps.executor.DefaultProcessManager;
import org.geoserver.wps.executor.WPSExecutionManager;
import org.geoserver.wps.resource.ProcessArtifactsStore;
import org.geoserver.wps.resource.WPSResourceManager;
import org.junit.Before;
import org.junit.Test;
public class WPSInitializerTest {
WPSInitializer initer;
@Before
public void mockUp() {
WPSExecutionManager execMgr = createNiceMock(WPSExecutionManager.class);
DefaultProcessManager procMgr = createNiceMock(DefaultProcessManager.class);
WPSStorageCleaner cleaner = createNiceMock(WPSStorageCleaner.class);
WPSResourceManager resources = createNiceMock(WPSResourceManager.class);
expect(resources.getArtifactsStore())
.andReturn(createNiceMock(ProcessArtifactsStore.class)).anyTimes();
replay(resources);
GeoServerResourceLoader loader = createNiceMock(GeoServerResourceLoader.class);
replay(execMgr, procMgr, cleaner);
initer = new WPSInitializer(execMgr, procMgr, cleaner, resources, loader);
}
@Test
public void testNoSave() throws Exception {
GeoServer gs = createMock(GeoServer.class);
List<ConfigurationListener> listeners = new ArrayList();
gs.addListener(capture(listeners));
expectLastCall().atLeastOnce();
//load all process groups so there is no call to save
List<ProcessGroupInfo> procGroups = WPSInitializer.lookupProcessGroups();
WPSInfo wps = createNiceMock(WPSInfo.class);
expect(wps.getProcessGroups()).andReturn(procGroups).anyTimes();
replay(wps);
expect(gs.getService(WPSInfo.class)).andReturn(wps).anyTimes();
replay(gs);
initer.initialize(gs);
assertEquals(1, listeners.size());
ConfigurationListener l = listeners.get(0);
l.handleGlobalChange(null, null, null, null);
l.handlePostGlobalChange(null);
verify(gs);
}
@Test
public void testSingleSave() throws Exception {
GeoServer gs = createMock(GeoServer.class);
List<ConfigurationListener> listeners = new ArrayList();
gs.addListener(capture(listeners));
expectLastCall().atLeastOnce();
//empty list should cause save
List<ProcessGroupInfo> procGroups = new ArrayList();
WPSInfo wps = createNiceMock(WPSInfo.class);
expect(wps.getProcessGroups()).andReturn(procGroups).anyTimes();
replay(wps);
expect(gs.getService(WPSInfo.class)).andReturn(wps).anyTimes();
gs.save(wps);
expectLastCall().once();
replay(gs);
initer.initialize(gs);
assertEquals(1, listeners.size());
ConfigurationListener l = listeners.get(0);
l.handleGlobalChange(null, null, null, null);
l.handlePostGlobalChange(null);
verify(gs);
}
ConfigurationListener capture(List<ConfigurationListener> listeners) {
LastControl.reportMatcher(new ListenerCapture(listeners));
return null;
}
static class ListenerCapture implements IArgumentMatcher {
List<ConfigurationListener> listeners;
public ListenerCapture(List<ConfigurationListener> listeners) {
this.listeners = listeners;
}
@Override
public boolean matches(Object argument) {
if (argument instanceof ConfigurationListener) {
listeners.add((ConfigurationListener) argument);
return true;
}
return false;
}
@Override
public void appendTo(StringBuffer buffer) {
buffer.append("ListenerCapture");
}
}
}