package org.esa.beam.dataio.smos.dddb;
import org.esa.beam.util.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
public class ResourceHandlerTest {
private ResourceHandler resourceHandler;
@Before
public void setUp() {
resourceHandler = new ResourceHandler();
}
@Test
public void testBuildPath() {
String path = ResourceHandler.buildPath("DBL_SM_XXXX_MIR_SMDAP2_0300", "flags", ".csv");
assertEquals("flags/MIR_/SMDAP2/DBL_SM_XXXX_MIR_SMDAP2_0300.csv", path);
path = ResourceHandler.buildPath("DBL_SM_XXXX_MIR_BWLF1C_0300", "schemas", ".binXschema.xml");
assertEquals("schemas/MIR_/BWLF1C/DBL_SM_XXXX_MIR_BWLF1C_0300.binXschema.xml", path);
}
@Test
public void testGetResourceStream_fromJar() throws IOException {
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
final InputStream resourceStream = resourceHandler.getResourceStream("bands/AUX_/DFFLAI/DBL_SM_XXXX_AUX_DFFLAI_0200.csv");
assertNotNull(resourceStream);
resourceStream.close();
}
@Test
public void testGetResourceStream_fromDirectory() throws IOException {
final String testFileName = "test_me";
File targetDirectory = null;
InputStream resourceStream = null;
try {
targetDirectory = createTestDirectory();
System.setProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME, targetDirectory.getAbsolutePath());
createTestFile(targetDirectory, testFileName);
resourceStream = resourceHandler.getResourceStream(testFileName);
assertNotNull(resourceStream);
} finally {
if (resourceStream != null) {
resourceStream.close();
}
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
if (targetDirectory != null && targetDirectory.isDirectory()) {
if (!FileUtils.deleteTree(targetDirectory)) {
fail("Unable to delete test directory");
}
}
}
}
@Test
public void testGetResourceURL_fromJar() throws IOException {
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
final String resourcePath = "bands/AUX_/DGGFLO/DBL_SM_XXXX_AUX_DGGFLO_0400.csv";
final URL resourceUrl = resourceHandler.getResourceUrl(resourcePath);
assertNotNull(resourceUrl);
assertThat(resourceUrl.getPath(), containsString(resourcePath));
assertEquals("file", resourceUrl.getProtocol());
}
@Test
public void testGetResourceURL_fromDirectory() throws IOException {
File targetDirectory = null;
try {
targetDirectory = createTestDirectory();
System.setProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME, targetDirectory.getAbsolutePath());
final File targetFile = new File(targetDirectory, "wurst");
if (!targetFile.createNewFile()) {
fail("unable to create test file");
}
final URL resourceUrl = resourceHandler.getResourceUrl("wurst");
assertNotNull(resourceUrl);
assertEquals(targetDirectory.getAbsolutePath() + File.separator + "wurst", resourceUrl.getPath());
assertEquals("file", resourceUrl.getProtocol());
} finally {
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
if (targetDirectory != null && targetDirectory.isDirectory()) {
if (!FileUtils.deleteTree(targetDirectory)) {
fail("Unable to delete test directory");
}
}
}
}
@Test
public void testGetResourceURL_fromDirectory_resourceFileDoesNotExist() throws IOException {
File targetDirectory = null;
try {
targetDirectory = createTestDirectory();
System.setProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME, targetDirectory.getAbsolutePath());
final URL resourceUrl = resourceHandler.getResourceUrl("wurst");
assertNull(resourceUrl);
} finally {
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
if (targetDirectory != null && targetDirectory.isDirectory()) {
if (!FileUtils.deleteTree(targetDirectory)) {
fail("Unable to delete test directory");
}
}
}
}
@Test
public void testGetResourceAsProperties_fromJar() throws IOException {
final Properties properties = resourceHandler.getResourceAsProperties("structs_MIR_SCXX1C.properties");
assertNotNull(properties);
assertEquals("true", properties.getProperty("Quality_Information_Type"));
}
@Test
public void testGetResourceAsProperties_fromJar_unknownProperty() throws IOException {
final Properties properties = resourceHandler.getResourceAsProperties("stupid_and_invalid.properties");
assertNotNull(properties);
assertEquals(0, properties.size());
}
@Test
public void testGetResourceAsProperties_fromDirectory() throws IOException {
File targetDirectory = null;
try {
targetDirectory = createTestDirectory();
System.setProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME, targetDirectory.getAbsolutePath());
final File testFile = createTestFile(targetDirectory, "test.properties");
final PrintWriter writer = new PrintWriter(testFile);
writer.println("the_property = a_value");
writer.close();
final Properties properties = resourceHandler.getResourceAsProperties("test.properties");
assertNotNull(properties);
assertEquals("a_value", properties.getProperty("the_property"));
} finally {
System.clearProperty(ResourceHandler.SMOS_DDDB_DIR_PROPERTY_NAME);
if (targetDirectory != null && targetDirectory.isDirectory()) {
if (!FileUtils.deleteTree(targetDirectory)) {
fail("Unable to delete test directory");
}
}
}
}
private File createTestFile(File targetDirectory, String testFileName) throws IOException {
final File testFile = new File(targetDirectory, testFileName);
if (!testFile.createNewFile()) {
fail("unable to create test file.");
}
return testFile;
}
private File createTestDirectory() {
File targetDirectory;
targetDirectory = new File("test_out");
if (!targetDirectory.mkdirs()) {
fail("unable to create test directory.");
}
return targetDirectory;
}
}