/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program 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. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.datacleaner.util.convert; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.Arrays; import java.util.List; import org.apache.metamodel.util.FileResource; import org.apache.metamodel.util.HdfsResource; import org.apache.metamodel.util.Resource; import org.apache.metamodel.util.UrlResource; import org.datacleaner.configuration.DataCleanerConfiguration; import org.datacleaner.configuration.DataCleanerConfigurationImpl; import org.datacleaner.server.EnvironmentBasedHadoopClusterInformation; import org.datacleaner.test.MockHadoopConfigHelper; import org.datacleaner.util.VFSUtils; import org.datacleaner.util.VfsResource; import org.datacleaner.util.convert.ResourceConverter.ResourceTypeHandler; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ResourceConverterTest { private final DataCleanerConfiguration configuration = new DataCleanerConfigurationImpl(); @Rule public TemporaryFolder _temporaryFolder = new TemporaryFolder(); @Test public void testParse() throws Exception { final ResourceConverter resourceConverter = new ResourceConverter(configuration); assertEquals("url", resourceConverter.parseStructure("url://foobar").getScheme()); assertEquals("foobar", resourceConverter.parseStructure("url://foobar").getPath()); assertEquals("file", resourceConverter.parseStructure("file://c:/blabla").getScheme()); assertEquals("c:/blabla", resourceConverter.parseStructure("file://c:/blabla").getPath()); assertEquals("/c:/blabla", resourceConverter.parseStructure("file:///c:/blabla").getPath()); } @Test public void testConvertFileResource() throws Exception { final List<? extends ResourceTypeHandler<?>> handlers = Arrays.asList(new FileResourceTypeHandler(configuration)); final ResourceConverter converter = new ResourceConverter(handlers, "foo"); final FileResource resource1 = new FileResource("foo/bar.txt"); final String str = converter.toString(resource1); assertEquals("file://foo/bar.txt", str); final Resource resource2 = converter.fromString(Resource.class, str); assertTrue(resource2 instanceof FileResource); assertEquals("foo/bar.txt", ((FileResource) resource2).getFile().getPath().replace('\\', '/')); } @Test public void testConvertUrlResource() throws Exception { final List<? extends ResourceTypeHandler<?>> handlers = Arrays.asList(new UrlResourceTypeHandler()); final ResourceConverter converter = new ResourceConverter(handlers, "foo"); final UrlResource resource1 = new UrlResource("http://localhost"); final String str = converter.toString(resource1); assertEquals("url://http://localhost", str); final Resource resource2 = converter.fromString(Resource.class, str); assertTrue(resource2 instanceof UrlResource); assertEquals("localhost", resource2.getName()); } @Test public void testConvertVfsResource() throws Exception { final List<? extends ResourceTypeHandler<?>> handlers = Arrays.asList(new VfsResourceTypeHandler()); final ResourceConverter converter = new ResourceConverter(handlers, "foo"); final VfsResource resource1 = new VfsResource(VFSUtils.getFileSystemManager().resolveFile("target")); final String str = converter.toString(resource1); final String absoluteFilePath = new File("target").getAbsolutePath().replaceAll("\\\\", "/"); if (absoluteFilePath.startsWith("/")) { assertEquals("vfs://file://" + absoluteFilePath, str); } else { assertEquals("vfs://file:///" + absoluteFilePath, str); } final Resource resource2 = converter.fromString(Resource.class, str); assertTrue(resource2 instanceof VfsResource); assertEquals("target", resource2.getName()); } @Test public void testConvertHdfsResource() throws Exception { final MockHadoopConfigHelper helper = new MockHadoopConfigHelper(_temporaryFolder); helper.generateCoreFile(); try { System.setProperty(EnvironmentBasedHadoopClusterInformation.HADOOP_CONF_DIR, helper.getConfFolder().getAbsolutePath()); final List<? extends ResourceTypeHandler<?>> handlers = Arrays.asList(new HdfsResourceTypeHandler("hdfs")); final ResourceConverter converter = new ResourceConverter(handlers, "foo"); final HdfsResource resource1 = new HdfsResource("hdfs://localhost:9000/user/vagrant/file.csv"); final String str = converter.toString(resource1); assertEquals("hdfs://localhost:9000/user/vagrant/file.csv", str); final Resource resource2 = converter.fromString(Resource.class, str); assertTrue(resource2 instanceof HdfsResource); assertEquals("file.csv", resource2.getName()); } finally { System.clearProperty(EnvironmentBasedHadoopClusterInformation.HADOOP_CONF_DIR); } } }