/* (c) 2014 - 2015 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.catalog; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.StringWriter; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.geoserver.rest.RestBaseController; import org.geoserver.test.GeoServerSystemTestSupport; import org.junit.Assert; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * @author Carlo Cancellieri - GeoSolutions SAS */ public class AboutControllerTest extends GeoServerSystemTestSupport { private static String BASEPATH = RestBaseController.ROOT_PATH; @Test public void testEmptyListHTMLTemplate() throws Exception { try { getAsDOM(BASEPATH + "/about/version?manifest=NOTEXISTS.*"); } catch (Exception e) { Assert.fail(e.getLocalizedMessage()); e.printStackTrace(); } } @Test public void testGetVersionsAsXML() throws Exception { // make the request, parsing the result as a dom Document dom = getAsDOM(BASEPATH + "/about/version.xml"); checkXMLModel(dom); } @Test public void testGetManifestsAsXML() throws Exception { // make the request, parsing the result as a dom Document dom = getAsDOM(BASEPATH + "/about/manifest.xml"); checkXMLModel(dom); } @Test public void testGetAsVersionsHTML() throws Exception { // make the request, parsing the result into a Dom object Document dom = getAsDOM(BASEPATH + "/about/version"); checkHTMLModel(dom); } @Test public void testGetAsManifestsHTML() throws Exception { // make the request, parsing the result into a Dom object Document dom = getAsDOM(BASEPATH + "/about/manifest?manifest=freemarker.*"); checkHTMLModel(dom); } @Test public void testGetAsVersionsJSON() throws Exception { // make the request, parsing the result into a json object JSONObject json = (JSONObject) getAsJSON(BASEPATH + "/about/version.json"); //print(json); checkJSONModel(json); } @Test public void testGetAsManifestsJSON() throws Exception { // make the request, parsing the result into a json object JSONObject json = (JSONObject) getAsJSON(BASEPATH + "/about/manifest.json"); checkJSONModel(json); } @Test public void testGetStatusAsHTML() throws Exception { // make the request, parsing the result into a Dom object Document dom = getAsDOM(BASEPATH + "/about/status"); checkHTMLModel(dom); Document dom2 = getAsDOM(BASEPATH + "/about/status.html"); checkHTMLModel(dom2); } @Test public void testGetStatusAsJSON() throws Exception { // make the request, parsing the result into a Dom object JSON dom = getAsJSON(BASEPATH + "/about/status.json"); } @Test public void testGetStatusAsXML() throws Exception { // make the request, parsing the result into a Dom object Document dom = getAsDOM(BASEPATH + "/about/status.xml"); } private void checkHTMLModel(Document dom) { // make assertions Node resource = getFirstElementByTagName(dom, "h2"); resource.getTextContent().equalsIgnoreCase("About:"); assertNotNull(resource); try { serializeXML(dom); } catch (Exception e) { Assert.fail(e.getLocalizedMessage()); } } private void checkJSONModel(JSONObject json) { // StringWriter sw = new StringWriter(); // json.write(sw); // System.out.println(sw.toString()); // make assertions assertTrue(json != null); Object obj = json.get("about"); assertTrue(obj instanceof JSONObject); JSONObject about = (JSONObject) obj; obj = about.get("resource"); assertTrue(obj instanceof JSONArray); // JSONArray resources = (JSONArray) obj; } private void checkXMLModel(Document dom) { // make assertions Node resource = getFirstElementByTagName(dom, "resource"); // serializeXML(dom); assertNotNull(resource); assertTrue(((Element) resource).getAttribute("name").length() > 0); } protected static void serializeXML(Document domDoc) throws TransformerException { DOMSource domSrc; Transformer txformer; StringWriter sw; StreamResult sr; try { domSrc = new DOMSource(domDoc); txformer = TransformerFactory.newInstance().newTransformer(); txformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); txformer.setOutputProperty(OutputKeys.METHOD, "xml"); txformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); txformer.setOutputProperty(OutputKeys.INDENT, "yes"); txformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); txformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); sw = new StringWriter(); sr = new StreamResult(sw); txformer.transform(domSrc, sr); //System.out.println(sw.toString()); } catch (TransformerFactoryConfigurationError | TransformerException ex) { ex.printStackTrace(); throw ex; } } }