HADOOP-9038. unit-tests for AllocatorPerContext.PathIterator (Ivan A. Veselovsky via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1413776 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-11-26 18:47:20 +00:00
parent 0d92f54e82
commit 68bc61ab5c
3 changed files with 65 additions and 4 deletions

View File

@ -1155,6 +1155,9 @@ Release 0.23.6 - UNRELEASED
HADOOP-8992. Enhance unit-test coverage of class HarFileSystem (Ivan A.
Veselovsky via bobby)
HADOOP-9038. unit-tests for AllocatorPerContext.PathIterator (Ivan A.
Veselovsky via bobby)
Release 0.23.5 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -481,12 +481,15 @@ public class LocalDirAllocator {
@Override
public Path next() {
Path result = next;
final Path result = next;
try {
advance();
} catch (IOException ie) {
throw new RuntimeException("Can't check existance of " + next, ie);
}
if (result == null) {
throw new NoSuchElementException();
}
return result;
}

View File

@ -22,6 +22,8 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Shell;
@ -32,6 +34,7 @@ import org.junit.runners.Parameterized.Parameters;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assume.*;
/** This test LocalDirAllocator works correctly;
* Every test case uses different buffer dirs to
@ -318,7 +321,7 @@ public class TestLocalDirAllocator {
*/
@Test
public void testNoSideEffects() throws IOException {
if (isWindows) return;
assumeTrue(!isWindows);
String dir = buildBufferDir(ROOT, 0);
try {
conf.set(CONTEXT, dir);
@ -339,8 +342,7 @@ public class TestLocalDirAllocator {
*/
@Test
public void testGetLocalPathToRead() throws IOException {
if (isWindows)
return;
assumeTrue(!isWindows);
String dir = buildBufferDir(ROOT, 0);
try {
conf.set(CONTEXT, dir);
@ -354,7 +356,60 @@ public class TestLocalDirAllocator {
Shell.execCommand(new String[] { "chmod", "u+w", BUFFER_DIR_ROOT });
rmBufferDirs();
}
}
/**
* Test that {@link LocalDirAllocator#getAllLocalPathsToRead(String, Configuration)}
* returns correct filenames and "file" schema.
*
* @throws IOException
*/
@Test
public void testGetAllLocalPathsToRead() throws IOException {
assumeTrue(!isWindows);
String dir0 = buildBufferDir(ROOT, 0);
String dir1 = buildBufferDir(ROOT, 1);
try {
conf.set(CONTEXT, dir0 + "," + dir1);
assertTrue(localFs.mkdirs(new Path(dir0)));
assertTrue(localFs.mkdirs(new Path(dir1)));
localFs.create(new Path(dir0 + Path.SEPARATOR + FILENAME));
localFs.create(new Path(dir1 + Path.SEPARATOR + FILENAME));
// check both the paths are returned as paths to read:
final Iterable<Path> pathIterable = dirAllocator.getAllLocalPathsToRead(FILENAME, conf);
int count = 0;
for (final Path p: pathIterable) {
count++;
assertEquals(FILENAME, p.getName());
assertEquals("file", p.getFileSystem(conf).getUri().getScheme());
}
assertEquals(2, count);
// test #next() while no element to iterate any more:
try {
Path p = pathIterable.iterator().next();
assertFalse("NoSuchElementException must be thrown, but returned ["+p
+"] instead.", true); // exception expected
} catch (NoSuchElementException nsee) {
// okay
}
// test modification not allowed:
final Iterable<Path> pathIterable2 = dirAllocator.getAllLocalPathsToRead(FILENAME, conf);
final Iterator<Path> it = pathIterable2.iterator();
try {
it.remove();
assertFalse(true); // exception expected
} catch (UnsupportedOperationException uoe) {
// okay
}
} finally {
Shell.execCommand(new String[] { "chmod", "u+w", BUFFER_DIR_ROOT });
rmBufferDirs();
}
}
@Test