/* (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.catalog; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.geoserver.data.test.SystemTestData; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletResponse; import static org.geoserver.rest.RestBaseController.ROOT_PATH; public class TemplateControllerTest extends CatalogRESTTestSupport { public void setUpTestData(SystemTestData testData) throws Exception { super.setUpTestData(testData); testData.setUpDefaultRasterLayers(); } @Before public void login() throws Exception { login("admin", "geoserver", "ROLE_ADMINISTRATOR"); } private String getIndexAsString(String childPath, String format) throws Exception { String indexUrl = childPath.substring(0, childPath.lastIndexOf("/")); if (format != null) { indexUrl += "." + format; } return getAsString(indexUrl); } private static String getName(String path) { return path.substring(path.lastIndexOf('/') + 1, path.length()); } private void testGetPutGetDeleteGet(String path, String content) throws Exception { String name = getName(path); String htmlIndexToken = "geoserver" + path + "\">" + name + "</a></li>"; String xmlIndexToken = "<name>" + name + "</name>"; String jsonIndexToken = "{\"name\":\"" + name + "\""; // GET assertNotFound(path); assertFalse(getIndexAsString(path, null).contains(htmlIndexToken)); assertFalse(getIndexAsString(path, "html").contains(htmlIndexToken)); assertFalse(getIndexAsString(path, "xml").contains(xmlIndexToken)); assertFalse(getIndexAsString(path, "json").contains(jsonIndexToken)); // PUT put(path, content).close(); String list = getIndexAsString(path,null); if(!list.contains(htmlIndexToken)){ assertTrue("list "+path, list.contains(htmlIndexToken)); } assertTrue("list "+path,getIndexAsString(path, "html").contains(htmlIndexToken)); assertTrue("list "+path,getIndexAsString(path, "xml").contains(xmlIndexToken)); assertTrue("list "+path,getIndexAsString(path, "json").contains(jsonIndexToken)); // GET assertEquals(content, getAsString(path).trim()); // DELETE assertEquals(200, deleteAsServletResponse(path).getStatus()); // GET assertNotFound(path); assertFalse(getIndexAsString(path, null).contains(htmlIndexToken)); assertFalse(getIndexAsString(path, "html").contains(htmlIndexToken)); assertFalse(getIndexAsString(path, "xml").contains(xmlIndexToken)); assertFalse(getIndexAsString(path, "json").contains(jsonIndexToken)); } @Test public void testGetPutGetDeleteGet() throws Exception { String path = ROOT_PATH+"/templates/my_template.ftl"; testGetPutGetDeleteGet(path, "hello world"); } private List<String> getAllPaths() { List<String> paths = new ArrayList<>(); paths.add(ROOT_PATH+"/templates/aTemplate.ftl"); paths.add(ROOT_PATH+"/templates/anotherTemplate.ftl"); paths.add(ROOT_PATH+"/workspaces/topp/templates/aTemplate.ftl"); paths.add(ROOT_PATH+"/workspaces/topp/templates/anotherTemplate.ftl"); paths.add(ROOT_PATH+"/workspaces/topp/datastores/states_shapefile/templates/aTemplate.ftl"); paths.add( ROOT_PATH+"/workspaces/topp/datastores/states_shapefile/templates/anotherTemplate.ftl"); paths.add( ROOT_PATH+"/workspaces/topp/datastores/states_shapefile/featuretypes/states/templates/aTemplate.ftl"); paths.add( ROOT_PATH+"/workspaces/topp/datastores/states_shapefile/featuretypes/states/templates/anotherTemplate.ftl"); paths.add(ROOT_PATH+"/workspaces/wcs/coveragestores/DEM/templates/aTemplate.ftl"); paths.add(ROOT_PATH+"/workspaces/wcs/coveragestores/DEM/templates/anotherTemplate.ftl"); paths.add( ROOT_PATH+"/workspaces/wcs/coveragestores/DEM/coverages/tazdem.tiff/templates/aTemplate.ftl"); paths.add( ROOT_PATH+"/workspaces/wcs/coveragestores/DEM/coverages/tazdem.tiff/templates/anotherTemplate.ftl"); return paths; } @Test public void testAllPathsSequentially() throws Exception { Random random = new Random(); for (String path : getAllPaths()) { testGetPutGetDeleteGet(path, "hello test " + random.nextInt(1000)); } } void assertNotFound(String path) throws Exception { MockHttpServletResponse response = getAsServletResponse(path+"?quietOnNotFound=true"); assertEquals("404 expected for '" + path + "'", 404, response.getStatus()); } @Test public void testAllPaths() throws Exception { String contentHeader = "hello path "; List<String> paths = getAllPaths(); for (String path : paths) { // GET - confirm template not there assertNotFound(path); } for (String path : paths) { // PUT put(path, contentHeader + path).close(); } for (String path : paths) { // GET assertEquals(contentHeader + path, getAsString(path).trim()); } for (String path : paths) { // DELETE MockHttpServletResponse response = deleteAsServletResponse(path); assertEquals(200, response.getStatus()); } for (String path : paths) { // GET - confirm template removed assertNotFound(path); } } @Test public void testUpdate() throws Exception { String fooTemplate = ROOT_PATH+"/templates/foo.ftl"; String barTemplate = ROOT_PATH+"/templates/bar.ftl"; String fooContent = "hello foo - longer than bar"; String barContent = "hello bar"; // PUT put(fooTemplate, fooContent).close(); put(barTemplate, barContent).close(); // GET assertEquals(fooContent, getAsString(fooTemplate).trim()); assertEquals(barContent, getAsString(barTemplate).trim()); fooContent = "goodbye foo"; // PUT put(fooTemplate, fooContent).close(); // GET assertEquals(fooContent, getAsString(fooTemplate).trim()); assertEquals(barContent, getAsString(barTemplate).trim()); } }