package org.geoserver.wcs2_0.xml;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertTrue;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.geoserver.wcs2_0.WCSTestSupport;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.gce.geotiff.GeoTiffReader;
import org.geotools.referencing.CRS;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletResponse;
/**
* Testing Scaling Extension
*
* @author Simone Giannecchini, GeoSolution SAS
*
*/
public class ScalingExtentionTest extends WCSTestSupport {
private GridCoverage2D sourceCoverage;
@Before
public void setup() throws Exception{
// check we can read it as a TIFF and it is similare to the origina one
sourceCoverage = (GridCoverage2D) this.getCatalog().getCoverageByName("BlueMarble")
.getGridCoverageReader(null, null).read(null);
}
@After
public void close(){
try{
if(sourceCoverage!=null){
scheduleForCleaning(sourceCoverage);
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Test
public void testScaleAxesByFactorXML() throws Exception {
final File xml= new File("./src/test/resources/requestGetCoverageScaleAxesByFactor.xml");
final String request= FileUtils.readFileToString(xml);
MockHttpServletResponse response = postAsServletResponse("wcs", request);
assertEquals("image/tiff", response.getContentType());
byte[] tiffContents = getBinary(response);
File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target"));
FileUtils.writeByteArrayToFile(file, tiffContents);
// check the tiff structure is the one requested
final GeoTiffReader reader = new GeoTiffReader(file);
assertTrue(CRS.equalsIgnoreMetadata(reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326",true)));
assertEquals(1260, reader.getOriginalGridRange().getSpan(0));
assertEquals(1260, reader.getOriginalGridRange().getSpan(1));
final GridCoverage2D coverage = reader.read(null);
assertNotNull(coverage);
assertEnvelopeEquals(sourceCoverage, coverage);
reader.dispose();
scheduleForCleaning(coverage);
}
@Test
public void testScaleToSizeXML() throws Exception {
final File xml= new File("./src/test/resources/requestGetCoverageScaleToSize.xml");
final String request= FileUtils.readFileToString(xml);
MockHttpServletResponse response = postAsServletResponse("wcs", request);
assertEquals("image/tiff", response.getContentType());
byte[] tiffContents = getBinary(response);
File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target"));
FileUtils.writeByteArrayToFile(file, tiffContents);
// check the tiff structure is the one requested
final GeoTiffReader reader = new GeoTiffReader(file);
assertTrue(CRS.equalsIgnoreMetadata(reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326",true)));
assertEquals(1000, reader.getOriginalGridRange().getSpan(0));
assertEquals(1000, reader.getOriginalGridRange().getSpan(1));
final GridCoverage2D coverage = reader.read(null);
assertNotNull(coverage);
assertEnvelopeEquals(sourceCoverage, coverage);
reader.dispose();
scheduleForCleaning(coverage);
}
@Test
public void testScaleToExtentXML() throws Exception {
final File xml= new File("./src/test/resources/requestGetCoverageScaleToExtent.xml");
final String request= FileUtils.readFileToString(xml);
MockHttpServletResponse response = postAsServletResponse("wcs", request);
assertEquals("image/tiff", response.getContentType());
byte[] tiffContents = getBinary(response);
File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target"));
FileUtils.writeByteArrayToFile(file, tiffContents);
// check the tiff structure is the one requested
final GeoTiffReader reader = new GeoTiffReader(file);
assertTrue(CRS.equalsIgnoreMetadata(reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326",true)));
assertEquals(200, reader.getOriginalGridRange().getSpan(0));
assertEquals(300, reader.getOriginalGridRange().getSpan(1));
final GridCoverage2D coverage = reader.read(null);
assertNotNull(coverage);
assertEnvelopeEquals(sourceCoverage, coverage);
reader.dispose();
scheduleForCleaning(coverage);
}
@Test
public void testScaleByFactorXML() throws Exception {
final File xml= new File("./src/test/resources/requestGetCoverageScaleByFactor.xml");
final String request= FileUtils.readFileToString(xml);
MockHttpServletResponse response = postAsServletResponse("wcs", request);
assertEquals("image/tiff", response.getContentType());
byte[] tiffContents = getBinary(response);
File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target"));
FileUtils.writeByteArrayToFile(file, tiffContents);
// check the tiff structure is the one requested
final GeoTiffReader reader = new GeoTiffReader(file);
assertTrue(CRS.equalsIgnoreMetadata(reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326",true)));
assertEquals(900, reader.getOriginalGridRange().getSpan(0));
assertEquals(900, reader.getOriginalGridRange().getSpan(1));
final GridCoverage2D coverage = reader.read(null);
assertNotNull(coverage);
assertEnvelopeEquals(sourceCoverage, coverage);
reader.dispose();
scheduleForCleaning(coverage);
}
}