/*
* Copyright 2013 Cloudera Inc.
*
* Licensed 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.kitesdk.data.spi.filesystem;
import org.kitesdk.data.DatasetIOException;
import org.kitesdk.data.MiniDFSTest;
import org.kitesdk.data.spi.DatasetRepository;
import org.kitesdk.data.spi.MetadataProvider;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.junit.Assert;
import org.junit.Test;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.fs.LocalFileSystem;
import org.junit.BeforeClass;
import org.kitesdk.data.spi.DatasetRepositories;
public class TestFileSystemRepositoryURIs extends MiniDFSTest {
@BeforeClass
public static void loadImpl() {
new Loader().load();
}
@Test
public void testLocalRelative() throws URISyntaxException {
URI repositoryUri = new URI("repo:file:target/dsr-repo-test");
DatasetRepository repository = DatasetRepositories.repositoryFor(repositoryUri);
// We only do the deeper implementation checks one per combination.
Assert.assertNotNull("Received a repository", repository);
Assert.assertTrue("Repo is a FileSystem repo",
repository instanceof FileSystemDatasetRepository);
MetadataProvider provider = ((FileSystemDatasetRepository) repository)
.getMetadataProvider();
Assert.assertTrue("Repo is using a FileSystemMetadataProvider",
provider instanceof FileSystemMetadataProvider);
FileSystemMetadataProvider fsProvider = (FileSystemMetadataProvider) provider;
Assert.assertTrue("FileSystem is a LocalFileSystem",
fsProvider.getFileSytem() instanceof LocalFileSystem);
Path expected = fsProvider.getFileSytem().makeQualified(
new Path("target/dsr-repo-test"));
Assert.assertEquals("Root directory should be the correct qualified path",
expected, fsProvider.getRootDirectory());
Assert.assertEquals("Repository URI scheme", "repo", repository.getUri()
.getScheme());
Assert.assertEquals("Repository URI scheme", expected.toUri(),
new URI(repository.getUri().getSchemeSpecificPart()));
}
@Test
public void testLocalAbsolute() throws URISyntaxException {
URI repositoryUri = new URI("repo:file:///tmp/dsr-repo-test");
DatasetRepository repository = DatasetRepositories.repositoryFor(repositoryUri);
FileSystemMetadataProvider provider = (FileSystemMetadataProvider)
((FileSystemDatasetRepository) repository).getMetadataProvider();
Assert.assertEquals("Root directory should be the correct qualified path",
new Path("file:/tmp/dsr-repo-test"), provider.getRootDirectory());
Assert.assertEquals("Repository URI", repositoryUri, repository.getUri());
}
@Test(expected = DatasetIOException.class)
public void testHdfsFailsDefault() {
// the environment doesn't contain the HDFS URI, so this should cause a
// DatasetRepository exception about not finding HDFS
DatasetRepositories.repositoryFor("repo:hdfs:/");
}
@Test
public void testHdfsAbsolute() throws URISyntaxException {
URI hdfsUri = getDFS().getUri();
URI repositoryUri = new URI("repo:hdfs://" + hdfsUri.getAuthority() + "/tmp/dsr-repo-test");
DatasetRepository repository = DatasetRepositories.repositoryFor(repositoryUri);
// We only do the deeper implementation checks one per combination.
Assert.assertNotNull("Received a repository", repository);
Assert.assertTrue("Repo is a FileSystem repo",
repository instanceof FileSystemDatasetRepository);
MetadataProvider provider = ((FileSystemDatasetRepository) repository)
.getMetadataProvider();
Assert.assertTrue("Repo is using a FileSystemMetadataProvider",
provider instanceof FileSystemMetadataProvider);
FileSystemMetadataProvider fsProvider = (FileSystemMetadataProvider) provider;
Assert.assertTrue("FileSystem is a DistributedFileSystem",
fsProvider.getFileSytem() instanceof DistributedFileSystem);
Path expected = fsProvider.getFileSytem().makeQualified(
new Path("/tmp/dsr-repo-test"));
Assert.assertEquals("Root directory should be the correct qualified path",
expected, fsProvider.getRootDirectory());
Assert.assertEquals("Repository URI", repositoryUri, repository.getUri());
}
}