/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2010-2012, Open Source Geospatial Foundation (OSGeo) * (C) 2010-2012, Geomatys * * 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.geotoolkit.coverage.sql; import java.util.Date; import java.util.Set; import java.util.List; import java.util.SortedSet; import org.opengis.parameter.ParameterValueGroup; import org.apache.sis.test.DependsOn; import org.geotoolkit.util.DateRange; import org.apache.sis.measure.MeasurementRange; import org.geotoolkit.coverage.grid.GridCoverage2D; import org.geotoolkit.coverage.io.CoverageStoreException; import org.geotoolkit.internal.sql.table.CatalogTestBase; import org.junit.*; import static org.junit.Assert.*; import static org.geotoolkit.coverage.sql.LayerTableTest.*; /** * Tests {@link CoverageDatabaseTest}. * * @author Martin Desruisseaux (Geomatys) * @version 3.18 * * @since 3.10 */ @DependsOn(GridCoverageLoaderTest.class) public final strictfp class CoverageDatabaseTest extends CatalogTestBase { /** * Creates a new test suite. */ public CoverageDatabaseTest() { super(CoverageDatabase.class); } /** * Small tolerance factor for comparison of floating point numbers. */ private static final double EPS = 1E-8; /** * The coverage database. */ private static CoverageDatabase database; /** * Creates the database when first needed. */ private static synchronized CoverageDatabase getCoverageDatabase() { if (database == null) { database = new CoverageDatabase((TableFactory) getDatabase()); } return database; } /** * Disposes the database. */ @AfterClass public static synchronized void dispose() { if (database != null) { database.dispose(); database = null; } } /** * Tests {@link CoverageDatabase#getLayers()}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetLayers() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final Set<String> names = database.getLayers().result(); assertTrue(names.contains(TEMPERATURE)); assertTrue(names.contains(NETCDF)); assertTrue(names.contains(GEOSTROPHIC_CURRENT)); assertTrue(names.contains(BLUEMARBLE)); } /** * Tests {@link CoverageDatabase#getLayer(String)}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetLayer() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final Layer layer = database.getLayer(TEMPERATURE).result(); assertEquals(TEMPERATURE, layer.getName()); } /** * Tests {@link CoverageDatabase#getTimeRange(String)}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetTimeRange() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final DateRange range = database.getTimeRange(TEMPERATURE).result(); assertEquals(START_TIME, range.getMinValue()); assertEquals(END_TIME, range.getMaxValue()); } /** * Tests {@link CoverageDatabase#getAvailableTimes(String)}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetAvailableTimes() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final SortedSet<Date> allTimes = database.getAvailableTimes(TEMPERATURE).result(); assertEquals(7, allTimes.size()); assertTrue(allTimes.first().after (LayerTableTest.START_TIME)); assertTrue(allTimes.last ().before(LayerTableTest.END_TIME)); assertTrue(allTimes.contains(LayerTableTest.SAMPLE_TIME)); } /** * Tests {@link CoverageDatabase#getAvailableElevations(String)}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetAvailableElevations() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final SortedSet<Number> z = database.getAvailableElevations(NETCDF).result(); GridGeometryTableTest.checkCoriolisElevations(z); } /** * Tests {@link CoverageDatabase#getSampleValueRanges(String)}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testGetSampleValueRanges() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); final List<MeasurementRange<?>> ranges = database.getSampleValueRanges(TEMPERATURE).result(); assertEquals("Expected only one band.", 1, ranges.size()); final MeasurementRange<?> range = ranges.get(0); assertEquals(-2.85, range.getMinDouble(), EPS); assertEquals(35.25, range.getMaxDouble(), EPS); } /** * Tests {@link CoverageDatabase#readSlice}. * * @throws CoverageStoreException If some data can not be read. */ @Test public void testReadSlice() throws CoverageStoreException { final CoverageDatabase database = getCoverageDatabase(); requireImageData(); final GridCoverage2D coverage = database.readSlice(TEMPERATURE, null, null).result(); GridCoverageLoaderTest.checkTemperatureCoverage(coverage); } /** * Tests the creation of a coverage database using a {@link ParameterValueGroup}. * * @since 3.18 */ @Test public void testParameterValueGroup() { ParameterValueGroup param = CoverageDatabase.PARAMETERS.createValue(); param.parameter("url").setValue("localhost:5432/coverages"); param.parameter("rootDirectory").setValue("/home/someuser/GIS_DATA"); param.parameter("schema").setValue("coverages"); param.parameter("user").setValue("postgres"); param.parameter("password").setValue("postgres"); final CoverageDatabase db = new CoverageDatabase(param); // Do not test a connection; it will not work. We merely // tested that the construction didn't threw an exception. db.dispose(); } }