/* (c) 2014 - 2016 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.wps.web; import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.wicket.Component; import org.apache.wicket.behavior.AbstractAjaxBehavior; import org.custommonkey.xmlunit.SimpleNamespaceContext; import org.custommonkey.xmlunit.XMLUnit; import org.geoserver.data.test.SystemTestData; import org.geoserver.web.GeoServerApplication; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.wps.MonkeyProcess; import org.geoserver.wps.executor.ProcessStatusTracker; import org.geoserver.wps.executor.WPSExecutionManager; import org.geotools.process.Processors; import org.junit.Test; import org.w3c.dom.Document; public class ProcessStatusPageTest extends WPSPagesTestSupport { static { Processors.addProcessFactory(MonkeyProcess.getFactory()); } @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); // init xmlunit Map<String, String> namespaces = new HashMap<String, String>(); namespaces.put("wps", "http://www.opengis.net/wps/1.0.0"); namespaces.put("ows", "http://www.opengis.net/ows/1.1"); namespaces.put("gml", "http://www.opengis.net/gml"); namespaces.put("wfs", "http://www.opengis.net/wfs"); namespaces.put("xlink", "http://www.w3.org/1999/xlink"); namespaces.put("xsi", "http://www.w3.org/2001/XMLSchema-instance"); namespaces.put("feature", "http://geoserver.sf.net"); XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(namespaces)); } @Test public void test() throws Exception { login(); // submit a monkey process String request = "wps?service=WPS&version=1.0.0&request=Execute&Identifier=gs:Monkey&storeExecuteResponse=true&DataInputs=" + URLEncoder.encode("id=x2", "ASCII"); Document dom = getAsDOM(request); // print(dom); assertXpathExists("//wps:ProcessAccepted", dom); // start the page, should have one process running tester.startPage(new ProcessStatusPage()); // print(tester.getLastRenderedPage(), true, true); tester.assertLabel("table:listContainer:items:1:itemProperties:3:component", "gs:Monkey"); tester.assertLabel("table:listContainer:items:1:itemProperties:5:component", "RUNNING"); // select the process and delete it GeoServerTablePanel<?> table = (GeoServerTablePanel<?>) tester.getComponentFromLastRenderedPage("table"); table.selectIndex(0); tester.getComponentFromLastRenderedPage("headerPanel:dismissSelected").setEnabled(true); tester.clickLink("headerPanel:dismissSelected"); // this submits the dialog tester.clickLink("dialog:dialog:content:form:submit", true); // this makes the dialog actually close tester.getComponentFromLastRenderedPage("dialog:dialog").getBehaviors().forEach(b -> { final String name = b.getClass().getSimpleName(); if(name.contains("WindowClosedBehavior")) { tester.executeBehavior((AbstractAjaxBehavior) b); } }); // check the table is refreshed and process is dismissing tester.assertComponentOnAjaxResponse("table"); tester.assertLabel("table:listContainer:items:2:itemProperties:3:component", "gs:Monkey"); tester.assertLabel("table:listContainer:items:2:itemProperties:5:component", "DISMISSING"); // let the process exit to ensure clean shutdown MonkeyProcess.exit("x2", null, true); } }