/* (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 net.sf.json.JSON;
import net.sf.json.JSONObject;
import org.geoserver.config.GeoServer;
import org.geoserver.rest.RestBaseController;
import org.geoserver.rest.catalog.CatalogRESTTestSupport;
import org.geoserver.wms.WMSInfo;
import org.junit.After;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletResponse;
import org.w3c.dom.Document;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import static org.junit.Assert.*;
public class WMSSettingsControllerTest extends CatalogRESTTestSupport {
@After
public void revertChanges() {
revertService(WMSInfo.class, null);
}
@Test
public void testGetASJSON() throws Exception {
JSON json = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/settings.json");
JSONObject jsonObject = (JSONObject) json;
assertNotNull(jsonObject);
JSONObject wmsinfo = (JSONObject) jsonObject.get("wms");
assertEquals("true", wmsinfo.get("enabled").toString().trim());
assertEquals("WMS", wmsinfo.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/settings.xml");
assertEquals("wms", dom.getDocumentElement().getLocalName());
assertEquals(1, dom.getElementsByTagName("name").getLength());
assertXpathEvaluatesTo("true", "/wms/enabled", 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/settings.html" );
}
@Test
public void testPutAsJSON() throws Exception {
String json = "{'wms': {'id':'wms','enabled':'false','name':'WMS'}}";
MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings/",
json, "text/json");
assertEquals(200, response.getStatus());
JSON jsonMod = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/settings.json");
JSONObject jsonObject = (JSONObject) jsonMod;
assertNotNull(jsonObject);
JSONObject wmsinfo = (JSONObject) jsonObject.get("wms");
assertEquals("false", wmsinfo.get("enabled").toString().trim());
assertEquals("WMS", wmsinfo.get("name"));
}
@Test
public void testPutAsXML() throws Exception {
String xml = "<wms>"
+ "<id>wms</id>"
+ "<enabled>false</enabled>"
+ "<name>WMS</name><title>GeoServer Web Map Service</title>"
+ "<maintainer>http://geoserver.org/comm</maintainer>"
+ "</wms>";
MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings", xml,
"text/xml");
assertEquals(200, response.getStatus());
Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/settings.xml");
assertXpathEvaluatesTo("false", "/wms/enabled", dom);
assertXpathEvaluatesTo("WMS", "/wms/name", dom);
}
@Test
public void testRoundTripJSON() throws Exception {
JSONObject original = (JSONObject) getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/settings.json");
assertNotNull(original);
MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings/",
original.toString(), "text/json");
assertEquals(200, response.getStatus());
JSON updated = getAsJSON(RestBaseController.ROOT_PATH + "/services/wms/settings.json");
assertEquals(original, updated);
}
@Test
public void testRoundTripXML() throws Exception {
Document original = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/settings.xml");
assertEquals("wms", original.getDocumentElement().getLocalName());
String originalString = documentToString(original);
MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings", originalString,
"text/xml");
assertEquals(200, response.getStatus());
Document updated = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/settings.xml");
assertEquals(originalString, documentToString(updated));
}
private String documentToString(Document doc) throws Exception{
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
return writer.toString();
}
@Test
public void testPutNonDestructive() throws Exception {
GeoServer geoServer = getGeoServer();
WMSInfo i = geoServer.getService(WMSInfo.class);
i.setEnabled(true);
geoServer.save(i);
String xml = "<wms>"
+ "<id>wms</id>"
+ "<name>WMS</name><title>GeoServer Web Map Service</title>"
+ "<maintainer>http://geoserver.org/comm</maintainer>"
+ "</wms>";
MockHttpServletResponse response = putAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings", xml,
"text/xml");
assertEquals(200, response.getStatus());
Document dom = getAsDOM(RestBaseController.ROOT_PATH + "/services/wms/settings.xml");
assertXpathEvaluatesTo("true", "/wms/enabled", dom);
assertXpathEvaluatesTo("WMS", "/wms/name", dom);
i = geoServer.getService(WMSInfo.class);
assertTrue(i.isEnabled());
}
@Test
public void testDelete() throws Exception {
assertEquals(405, deleteAsServletResponse(RestBaseController.ROOT_PATH + "/services/wms/settings").getStatus());
}
}