svn merge -c 1413776 FIXES: HADOOP-9038. unit-tests for AllocatorPerContext.PathIterator (Ivan A. Veselovsky via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1413778 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-11-26 18:48:24 +00:00
parent 6fef82baad
commit e192a00f15
3 changed files with 65 additions and 4 deletions

View File

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

View File

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

View File

@ -22,6 +22,8 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.Shell;
@ -32,6 +34,7 @@ import org.junit.runners.Parameterized.Parameters;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import static org.junit.Assume.*;
/** This test LocalDirAllocator works correctly; /** This test LocalDirAllocator works correctly;
* Every test case uses different buffer dirs to * Every test case uses different buffer dirs to
@ -301,7 +304,7 @@ public class TestLocalDirAllocator {
*/ */
@Test @Test
public void testNoSideEffects() throws IOException { public void testNoSideEffects() throws IOException {
if (isWindows) return; assumeTrue(!isWindows);
String dir = buildBufferDir(ROOT, 0); String dir = buildBufferDir(ROOT, 0);
try { try {
conf.set(CONTEXT, dir); conf.set(CONTEXT, dir);
@ -322,8 +325,7 @@ public class TestLocalDirAllocator {
*/ */
@Test @Test
public void testGetLocalPathToRead() throws IOException { public void testGetLocalPathToRead() throws IOException {
if (isWindows) assumeTrue(!isWindows);
return;
String dir = buildBufferDir(ROOT, 0); String dir = buildBufferDir(ROOT, 0);
try { try {
conf.set(CONTEXT, dir); conf.set(CONTEXT, dir);
@ -337,7 +339,60 @@ public class TestLocalDirAllocator {
Shell.execCommand(new String[] { "chmod", "u+w", BUFFER_DIR_ROOT }); Shell.execCommand(new String[] { "chmod", "u+w", BUFFER_DIR_ROOT });
rmBufferDirs(); 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 @Test