/* (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.rest.service; import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.apache.commons.io.IOUtils; import net.sf.json.JSON; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.rest.RestBaseController; import org.geoserver.rest.catalog.CatalogRESTTestSupport; import org.geoserver.config.GeoServer; import org.geoserver.ows.LocalWorkspace; import org.geoserver.wms.WMSInfo; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.springframework.mock.web.MockHttpServletResponse; public class LocalWMSSettingsControllerTest extends CatalogRESTTestSupport { @After public void clearLocalWorkspace() throws Exception { LocalWorkspace.remove(); revertService(WMSInfo.class, "sf"); } @Before public void initLocalWMS() throws Exception { GeoServer geoServer = getGeoServer(); WorkspaceInfo ws = geoServer.getCatalog().getWorkspaceByName("sf"); WMSInfo wmsInfo = geoServer.getService(ws, WMSInfo.class); if (wmsInfo != null) { geoServer.remove(wmsInfo); } wmsInfo = geoServer.getFactory().create(WMSInfo.class); wmsInfo.setName("WMS"); wmsInfo.setWorkspace(ws); geoServer.add(wmsInfo); } @Test public void testGetAsJSON() throws Exception { JSON json = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.json"); JSONObject jsonObject = (JSONObject) json; assertNotNull(jsonObject); JSONObject wmsinfo = (JSONObject) jsonObject.get("wms"); //assertEquals("wms", wmsinfo.get("id")); assertEquals("WMS", wmsinfo.get("name")); JSONObject workspace = (JSONObject) wmsinfo.get("workspace"); assertNotNull(workspace); assertEquals("sf", workspace.get("name")); JSONObject watermark = (JSONObject) wmsinfo.get("watermark"); assertEquals("false", watermark.get("enabled").toString().trim()); assertEquals("Nearest", wmsinfo.get("interpolation")); } @Test public void testGetAsXML() throws Exception { Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.xml"); assertEquals("wms", dom.getDocumentElement().getLocalName()); assertXpathEvaluatesTo("true", "/wms/enabled", dom); assertXpathEvaluatesTo("sf", "/wms/workspace/name", dom); assertXpathEvaluatesTo("WMS", "/wms/name", dom); assertXpathEvaluatesTo("false", "/wms/watermark/enabled", dom); assertXpathEvaluatesTo("Nearest", "/wms/interpolation", dom); } @Test public void testGetAsHTML() throws Exception { getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.html" ); } public void testCreateAsJSON() throws Exception { removeLocalWorkspace(); String input = "{'wms': {'id' : 'wms_sf', 'workspace':{'name':'sf'},'name' : 'WMS', 'enabled': 'true'}}"; MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings/", input, "text/json"); assertEquals(200, response.getStatus()); JSON json = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.json"); JSONObject jsonObject = (JSONObject) json; assertNotNull(jsonObject); JSONObject wmsinfo = (JSONObject) jsonObject.get("wms"); assertEquals("wms_sf", wmsinfo.get("id")); assertEquals("WMS", wmsinfo.get("name")); assertEquals("true", wmsinfo.get("enabled").toString().trim()); JSONObject workspace = (JSONObject) wmsinfo.get("workspace"); assertNotNull(workspace); assertEquals("sf", workspace.get("name")); } @Test public void testCreateAsXML() throws Exception { removeLocalWorkspace(); String xml = "<wms>" + "<id>wms_sf</id>" + "<workspace>" + "<name>sf</name>" + "</workspace>" + "<name>OGC:WMS</name>" + "<enabled>false</enabled>" + "<interpolation>Nearest</interpolation>" + "</wms>"; MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings", xml, "text/xml"); assertEquals(200, response.getStatus()); Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.xml"); assertEquals("wms", dom.getDocumentElement().getLocalName()); assertXpathEvaluatesTo("false", "/wms/enabled", dom); assertXpathEvaluatesTo("sf", "/wms/workspace/name", dom); assertXpathEvaluatesTo("OGC:WMS", "/wms/name", dom); assertXpathEvaluatesTo("false", "/wms/enabled", dom); assertXpathEvaluatesTo("Nearest", "/wms/interpolation", dom); } @Test public void testPutAsJSON() throws Exception { String json = "{'wms': {'id':'wms','workspace':{'name':'sf'},'enabled':'false','name':'WMS'}}"; MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings/", json, "text/json"); assertEquals(200, response.getStatus()); JSON jsonMod = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.json"); JSONObject jsonObject = (JSONObject) jsonMod; assertNotNull(jsonObject); JSONObject wmsinfo = (JSONObject) jsonObject.get("wms"); //assertEquals("wms", wmsinfo.get("id")); assertEquals("false", wmsinfo.get("enabled").toString().trim()); } @Test public void testPutAsXML() throws Exception { String xml = "<wms>" + "<id>wms</id>" + "<workspace>" + "<name>sf</name>" + "</workspace>" + "<enabled>false</enabled>" + "</wms>"; MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings", xml, "text/xml"); assertEquals(200, response.getStatus()); Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.xml"); assertXpathEvaluatesTo("false", "/wms/enabled", dom); } @Test public void testPutFullAsXML() throws Exception { String xml = IOUtils.toString(LocalWMSSettingsControllerTest.class.getResourceAsStream("wms.xml")); MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings", xml, "text/xml"); assertEquals(200, response.getStatus()); Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.xml"); assertXpathEvaluatesTo("true", "/wms/enabled", dom); } @Test public void testDelete() throws Exception { assertEquals(200, deleteAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings").getStatus()); boolean thrown = false; try { JSON json = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/workspaces/sf/settings.json"); } catch (JSONException e) { thrown = true; } assertEquals(true, thrown); } private void removeLocalWorkspace() { GeoServer geoServer = getGeoServer(); WorkspaceInfo ws = geoServer.getCatalog().getWorkspaceByName("sf"); WMSInfo wmsInfo = geoServer.getService(ws, WMSInfo.class); geoServer.remove(wmsInfo); } }