Author: bobby Date: Mon Nov 26 18:48:24 2012 New Revision: 1413778 URL: http://svn.apache.org/viewvc?rev=1413778&view=rev Log: svn merge -c 1413776 FIXES: HADOOP-9038. unit-tests for AllocatorPerContext.PathIterator (Ivan A. Veselovsky via bobby)
Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1413778&r1=1413777&r2=1413778&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt Mon Nov 26 18:48:24 2012 @@ -863,6 +863,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 Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java?rev=1413778&r1=1413777&r2=1413778&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java Mon Nov 26 18:48:24 2012 @@ -478,12 +478,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; } Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java?rev=1413778&r1=1413777&r2=1413778&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java Mon Nov 26 18:48:24 2012 @@ -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.P 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 @@ -301,7 +304,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); @@ -322,8 +325,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); @@ -337,7 +339,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