diff --git a/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTImageMosaicTest.java b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTImageMosaicTest.java
new file mode 100644
index 0000000..3b84a91
--- /dev/null
+++ b/src/test/java/it/geosolutions/geoserver/rest/GeoserverRESTImageMosaicTest.java
@@ -0,0 +1,166 @@
+/*
+ * GeoServer-Manager - Simple Manager Library for GeoServer
+ *
+ * Copyright (C) 2007,2011 GeoSolutions S.A.S.
+ * http://www.geo-solutions.it
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package it.geosolutions.geoserver.rest;
+
+
+import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore;
+import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
+import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy;
+import it.geosolutions.geoserver.rest.encoder.coverage.GSImageMosaicEncoder;
+import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder;
+import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+import org.springframework.core.io.ClassPathResource;
+
+/**
+ * Testcase for creating postgis-based resources on geoserver.
+ *
+ * Since these tests require a running postgis instance, this is more like integration tests.
+ * You may skip them by defining
+ * -DpgIgnore=true
+ * When pgIgnore is defined that way, failing tests will not break
+ * the build: they will be logged as errors instead.
+ *
+ *
+ * The target postgis instance can be customized by defining the following env vars:
+ * - pgHost (default localhost)
+ * - pgPort (default: 5432)
+ * - pgDatabase (default: test)
+ * - pgSchema (default: public)
+ * - pgUser (default: utest)
+ * - pgPassword (default: ptest)
+ *
+ *
+ * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it
+ *
+ * @see GeoserverRESTTest
+ */
+public class GeoserverRESTImageMosaicTest extends GeoserverRESTTest {
+
+ private final static Logger LOGGER = Logger.getLogger(GeoserverRESTImageMosaicTest.class);
+
+
+ public GeoserverRESTImageMosaicTest(String testName) {
+ super(testName);
+ }
+
+ public void testCreateDeleteImageMosaicDatastore() {
+ if (!enabled()) {
+ return;
+ }
+ deleteAll();
+
+ final String wsName = "geosolutions";
+ final String coverageStoreName = "resttestImageMosaic";
+
+ final GSImageMosaicEncoder coverageEncoder = new GSImageMosaicEncoder();
+ /*
+ * unused in mosaic creation
+ * this is only useful if you want to modify an existing coverage:
+ * publisher.configureCoverage(ce, wsname, csname);
+ * or create a new one from an existing store:
+ * publisher.createCoverage(ce, wsname, csname);
+ */
+ coverageEncoder.setName("CoverageName");
+
+ coverageEncoder.setAllowMultithreading(true);
+ coverageEncoder.setBackgroundValues("");
+ coverageEncoder.setFilter("");
+ coverageEncoder.setInputTransparentColor("");
+ coverageEncoder.setLatLonBoundingBox(-180, -90, 180, -90, "EPSG:4326");
+ coverageEncoder.setMaxAllowedTiles(6000);
+ coverageEncoder.setNativeBoundingBox(-180, -90, 180, -90, "EPSG:4326");
+ coverageEncoder.setOutputTransparentColor("");
+ coverageEncoder.setProjectionPolicy(ProjectionPolicy.REPROJECT_TO_DECLARED);
+ coverageEncoder.setSRS("EPSG:4326");
+ coverageEncoder.setSUGGESTED_TILE_SIZE("256,256");
+ coverageEncoder.setUSE_JAI_IMAGEREAD(true);
+ // activate time
+ final GSDimensionInfoEncoder time=new GSDimensionInfoEncoder(true);
+ time.setPresentation(Presentation.LIST);
+ // set time metadata
+ coverageEncoder.setMetadata("time", time);
+ // not active elevation
+ coverageEncoder.setMetadata("elevation", new GSDimensionInfoEncoder());
+
+ assertTrue(publisher.createWorkspace(wsName));
+
+ LOGGER.info(coverageEncoder.toString());
+
+ final String styleName = "raster";
+ File sldFile;
+ try {
+ sldFile = new ClassPathResource("testdata/raster.sld").getFile();
+ // insert style
+ assertTrue(publisher.publishStyle(sldFile));
+ } catch (IOException e1) {
+ assertFalse(e1.getLocalizedMessage(),Boolean.FALSE);
+ e1.printStackTrace();
+ }
+
+
+ GSLayerEncoder layerEncoder=new GSLayerEncoder();
+
+ layerEncoder.setDefaultStyle(styleName);
+ LOGGER.info(layerEncoder.toString());
+ // creation test
+ RESTCoverageStore coverageStore =null;
+ try {
+ if (!publisher.createExternalMosaic(wsName,coverageStoreName,new File("/home/carlo/work/data/arw_3km_Wind_20110929T120000000Z/"),coverageEncoder,layerEncoder)){
+ fail();
+ }
+ coverageStore = reader.getCoverageStore(wsName,coverageStoreName);
+
+ if (coverageStore==null){
+ LOGGER.error("*** coveragestore " + coverageStoreName + " has not been created.");
+ fail("*** coveragestore " + coverageStoreName + " has not been created.");
+ }
+
+
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ fail(e.getLocalizedMessage());
+ }
+
+
+ // removing recursively coveragestore
+ boolean removed = publisher.removeCoverageStore(coverageStore.getWorkspaceName(), coverageStore.getName(), true);
+ if( ! removed ){
+ LOGGER.error("*** CoverageStore " + coverageStoreName + " has not been removed.");
+ fail("*** CoverageStore " + coverageStoreName + " has not been removed.");
+ }
+
+ assertTrue(publisher.removeStyle(styleName));
+ assertTrue(publisher.removeWorkspace(wsName));
+ }
+
+}