/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tika.parser.gdal; //JDK imports import java.io.IOException; import java.io.InputStream; //Tika imports import org.apache.tika.TikaTest; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.external.ExternalParser; import org.apache.tika.sax.BodyContentHandler; //Junit imports import org.junit.Test; import org.xml.sax.SAXException; import static org.junit.Assert.fail; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assume.assumeTrue; /** * Test harness for the GDAL parser. */ public class TestGDALParser extends TikaTest { private boolean canRun() { String[] checkCmd = {"gdalinfo"}; // If GDAL is not on the path, do not run the test. return ExternalParser.check(checkCmd); } @Test public void testParseBasicInfo() { assumeTrue(canRun()); final String expectedDriver = "netCDF/Network Common Data Format"; final String expectedUpperRight = "512.0, 0.0"; final String expectedUpperLeft = "0.0, 0.0"; final String expectedLowerLeft = "0.0, 512.0"; final String expectedLowerRight = "512.0, 512.0"; final String expectedCoordinateSystem = "`'"; final String expectedSize = "512, 512"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream("/test-documents/sresa1b_ncar_ccsm3_0_run1_200001.nc"); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } assertNotNull(met); assertNotNull(met.get("Driver")); assertEquals(expectedDriver, met.get("Driver")); assumeTrue(met.get("Files") != null); assertNotNull(met.get("Coordinate System")); assertEquals(expectedCoordinateSystem, met.get("Coordinate System")); assertNotNull(met.get("Size")); assertEquals(expectedSize, met.get("Size")); assertNotNull(met.get("Upper Right")); assertEquals(expectedUpperRight, met.get("Upper Right")); assertNotNull(met.get("Upper Left")); assertEquals(expectedUpperLeft, met.get("Upper Left")); assertNotNull(met.get("Upper Right")); assertEquals(expectedLowerRight, met.get("Lower Right")); assertNotNull(met.get("Upper Right")); assertEquals(expectedLowerLeft, met.get("Lower Left")); } @Test public void testParseMetadata() { assumeTrue(canRun()); final String expectedNcInst = "NCAR (National Center for Atmospheric Research, Boulder, CO, USA)"; final String expectedModelNameEnglish = "NCAR CCSM"; final String expectedProgramId = "Source file unknown Version unknown Date unknown"; final String expectedProjectId = "IPCC Fourth Assessment"; final String expectedRealization = "1"; final String expectedTitle = "model output prepared for IPCC AR4"; final String expectedSub8Name = "\":ua"; final String expectedSub8Desc = "[1x17x128x256] eastward_wind (32-bit floating-point)"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream("/test-documents/sresa1b_ncar_ccsm3_0_run1_200001.nc"); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); assertNotNull(met); assertNotNull(met.get("NC_GLOBAL#institution")); assertEquals(expectedNcInst, met.get("NC_GLOBAL#institution")); assertNotNull(met.get("NC_GLOBAL#model_name_english")); assertEquals(expectedModelNameEnglish, met.get("NC_GLOBAL#model_name_english")); assertNotNull(met.get("NC_GLOBAL#prg_ID")); assertEquals(expectedProgramId, met.get("NC_GLOBAL#prg_ID")); assertNotNull(met.get("NC_GLOBAL#prg_ID")); assertEquals(expectedProgramId, met.get("NC_GLOBAL#prg_ID")); assertNotNull(met.get("NC_GLOBAL#project_id")); assertEquals(expectedProjectId, met.get("NC_GLOBAL#project_id")); assertNotNull(met.get("NC_GLOBAL#realization")); assertEquals(expectedRealization, met.get("NC_GLOBAL#realization")); assertNotNull(met.get("NC_GLOBAL#title")); assertEquals(expectedTitle, met.get("NC_GLOBAL#title")); assertNotNull(met.get("SUBDATASET_8_NAME")); assertTrue(met.get("SUBDATASET_8_NAME").endsWith(expectedSub8Name)); assertNotNull(met.get("SUBDATASET_8_DESC")); assertEquals(expectedSub8Desc, met.get("SUBDATASET_8_DESC")); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void testParseFITS() { String fitsFilename = "/test-documents/WFPC2u5780205r_c0fx.fits"; assumeTrue(canRun()); // If the exit code is 1 (meaning FITS isn't supported by the installed version of gdalinfo, don't run this test. String[] fitsCommand = {"gdalinfo", TestGDALParser.class.getResource(fitsFilename).getPath()}; assumeTrue(ExternalParser.check(fitsCommand, 1)); String expectedAllgMin = "-7.319537E1"; String expectedAtodcorr = "COMPLETE"; String expectedAtodfile = "uref$dbu1405iu.r1h"; String expectedCalVersion = " "; String expectedCalibDef = "1466"; GDALParser parser = new GDALParser(); InputStream stream = TestGDALParser.class .getResourceAsStream(fitsFilename); Metadata met = new Metadata(); BodyContentHandler handler = new BodyContentHandler(); try { parser.parse(stream, handler, met, new ParseContext()); assertNotNull(met); assertNotNull(met.get("ALLG-MIN")); assertEquals(expectedAllgMin, met.get("ALLG-MIN")); assertNotNull(met.get("ATODCORR")); assertEquals(expectedAtodcorr, met.get("ATODCORR")); assertNotNull(met.get("ATODFILE")); assertEquals(expectedAtodfile, met.get("ATODFILE")); assertNotNull(met.get("CAL_VER")); assertEquals(expectedCalVersion, met.get("CAL_VER")); assertNotNull(met.get("CALIBDEF")); assertEquals(expectedCalibDef, met.get("CALIBDEF")); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } } }