/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * */ package org.geotools.gce.imagecollection; import java.awt.Rectangle; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import junit.framework.Assert; import org.apache.commons.io.FilenameUtils; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.coverage.grid.GridEnvelope2D; import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.coverage.grid.io.AbstractGridFormat; import org.geotools.data.DataSourceException; import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.cql2.CQLException; import org.geotools.geometry.GeneralEnvelope; import org.geotools.referencing.factory.epsg.CartesianAuthorityFactory; import org.geotools.test.TestData; import org.junit.Ignore; import org.junit.Test; import org.opengis.filter.Filter; import org.opengis.parameter.GeneralParameterValue; import org.opengis.parameter.ParameterValue; import org.opengis.referencing.NoSuchAuthorityCodeException; /** * @author Daniele Romagnoli, GeoSolutions * @author Andrea Aime, GeoSolutions * @author Simone Giannecchini, GeoSolutions * * * @source $URL: http://svn.osgeo.org/geotools/trunk/modules/unsupported/imagecollection/src/test/java/org/geotools/gce/imagecollection/ImageCollectionReaderTest.java $ */ public class ImageCollectionReaderTest extends Assert { @Test public void testReader() throws IllegalArgumentException, IOException, NoSuchAuthorityCodeException, CQLException { final File file = TestData.file(this, "sample"); final String string = "PATH='folder1/world.tif'"; Filter filter = CQL.toFilter(string); final ImageCollectionReader reader = new ImageCollectionReader(file); final ParameterValue<GridGeometry2D> gg = AbstractGridFormat.READ_GRIDGEOMETRY2D.createValue(); final GeneralEnvelope envelope = new GeneralEnvelope(new Rectangle(1000,-800,1000,400)); envelope.setCoordinateReferenceSystem(CartesianAuthorityFactory.GENERIC_2D); final Rectangle rasterArea = new Rectangle(0, 0, 500, 200); final GridEnvelope2D range= new GridEnvelope2D(rasterArea); gg.setValue(new GridGeometry2D(range, envelope)); final ParameterValue<Filter> ff = ImageCollectionFormat.FILTER.createValue(); ff.setValue(filter); final ParameterValue<double[]> background = ImageCollectionFormat.BACKGROUND_VALUES.createValue(); background.setValue(new double[]{0}); GeneralParameterValue[] params = new GeneralParameterValue[] {ff, gg, background}; if (reader != null) { // reading the coverage GridCoverage2D coverage = (GridCoverage2D) reader.read(params); RenderedImage image = coverage.getRenderedImage(); assertTrue(image.getWidth() == 500); assertTrue(image.getHeight() == 200); } } @Test public void testForbiddenPath() throws IllegalArgumentException, IOException, NoSuchAuthorityCodeException, CQLException { final File file = TestData.file(this, "sample"); final String absolutePath = FilenameUtils.separatorsToUnix(file.getAbsolutePath()); final String string = "PATH='" + absolutePath + "/folder1/../../forbiddenFolder/classifiedFile.tif'"; Filter filter = CQL.toFilter(string); final ImageCollectionReader reader = new ImageCollectionReader(file); final ParameterValue<Filter> ff = ImageCollectionFormat.FILTER.createValue(); ff.setValue(filter); GeneralParameterValue[] params = new GeneralParameterValue[] {ff}; if (reader != null) { // reading the coverage GridCoverage2D coverage = null; boolean exception = true; try { coverage = (GridCoverage2D) reader.read(params); exception = false; } catch (DataSourceException exc){ assertTrue(exception); } } } }