@Test public void testOnMessageSuccessful() throws IOException { TestRemoteIterator statuses = newRemoteIterator( new FileStatus(1337, false, 1, 4096, 1, 2, FsPermission.getFileDefault(), "testowner", "testgroup", new Path(TEST_PATH, "bar")), new FileStatus(0, true, 0, 0, 3, 4, FsPermission.getDirDefault(), "testowner", "testgroup", new Path(TEST_PATH, "baz")) ); DFS.ListStatusResponse response = getResponse(TEST_PATH_STRING, statuses); assertEquals(2, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/bar", response.getStatusesList().get(0).getPath()); assertEquals(TEST_PATH_STRING + "/baz", response.getStatusesList().get(1).getPath()); assertFalse(response.hasHandle()); assertTrue(statuses.isClosed()); }
@Test public void testOnMessageFileNotFound() throws IOException { try { getResponse(TEST_PATH_STRING, new FileNotFoundException("Where is the file?")); fail("Was expecting UserException/FileNotFoundException"); } catch(UserException e) { assertEquals(ErrorType.IO_EXCEPTION, e.getErrorType()); assertSame(FileNotFoundException.class, e.getCause().getClass()); assertEquals("Where is the file?", e.getCause().getMessage()); } }
@Test public void testOnMessageIOException() throws IOException { try { getResponse(TEST_PATH_STRING, new IOException()); fail("Was expecting UserException/IOException"); } catch(UserException e) { assertEquals(ErrorType.IO_EXCEPTION, e.getErrorType()); assertSame(IOException.class, e.getCause().getClass()); } }
@Test public void testStreamOptionalPath() throws IOException { TestRemoteIterator statuses = newRemoteIterator( new FileStatus(1337, false, 1, 4096, 1, 2, FsPermission.getFileDefault(), "testowner", "testgroup", new Path(TEST_PATH, "bar")), new FileStatus(0, true, 0, 0, 3, 4, FsPermission.getDirDefault(), "testowner", "testgroup", new Path(TEST_PATH, "baz")) ); final ListStatusContinuationHandle handle; { DFS.ListStatusResponse response = getResponse(TEST_PATH_STRING, statuses, 1, null); assertEquals(1, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/bar", response.getStatusesList().get(0).getPath()); assertTrue(response.hasHandle()); handle = response.getHandle(); assertTrue(getPDFSProtocol().isIteratorOpen(handle)); assertFalse(statuses.isClosed()); } { DFS.ListStatusResponse response = getResponse(null, null, 1, handle); assertEquals(1, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/baz", response.getStatusesList().get(0).getPath()); assertFalse(response.hasHandle()); assertFalse(getPDFSProtocol().isIteratorOpen(handle)); assertTrue(statuses.isClosed()); } }
@Test public void testStream() throws IOException { TestRemoteIterator statuses = newRemoteIterator( new FileStatus(1337, false, 1, 4096, 1, 2, FsPermission.getFileDefault(), "testowner", "testgroup", new Path(TEST_PATH, "bar")), new FileStatus(0, true, 0, 0, 3, 4, FsPermission.getDirDefault(), "testowner", "testgroup", new Path(TEST_PATH, "baz")) ); final ListStatusContinuationHandle handle; { DFS.ListStatusResponse response = getResponse(TEST_PATH_STRING, statuses, 1, null); assertEquals(1, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/bar", response.getStatusesList().get(0).getPath()); assertTrue(response.hasHandle()); handle = response.getHandle(); assertTrue(getPDFSProtocol().isIteratorOpen(handle)); assertFalse(statuses.isClosed()); } { DFS.ListStatusResponse response = getResponse(TEST_PATH_STRING, null, 1, handle); assertEquals(1, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/baz", response.getStatusesList().get(0).getPath()); assertFalse(response.hasHandle()); assertFalse(getPDFSProtocol().isIteratorOpen(handle)); assertTrue(statuses.isClosed()); } }
@Test public void testStreamWithCacheExpiration() throws IOException { TestRemoteIterator statuses = newRemoteIterator( new FileStatus(1337, false, 1, 4096, 1, 2, FsPermission.getFileDefault(), "testowner", "testgroup", new Path(TEST_PATH, "bar")), new FileStatus(0, true, 0, 0, 3, 4, FsPermission.getDirDefault(), "testowner", "testgroup", new Path(TEST_PATH, "baz")) ); final ListStatusContinuationHandle handle; { DFS.ListStatusResponse response = getResponse(TEST_PATH_STRING, statuses, 1, null); assertEquals(1, response.getStatusesList().size()); assertEquals(TEST_PATH_STRING + "/bar", response.getStatusesList().get(0).getPath()); assertTrue(response.hasHandle()); handle = response.getHandle(); assertTrue(getPDFSProtocol().isIteratorOpen(handle)); assertFalse(statuses.isClosed()); } // Moving ticker so that open iterators expire getTicker().advance(5, TimeUnit.MINUTES); try { getResponse(TEST_PATH_STRING, null, 1, handle); fail(); } catch (UserException e) { assertEquals(ErrorType.IO_EXCEPTION, e.getErrorType()); assertSame(IOException.class, e.getCause().getClass()); } }
/** * Get the response produced by the handler for a given filesystem response. * * @return * @throws IOException * @throws UserException */ private DFS.ListStatusResponse getResponse(final String path, final Object o) throws IOException, UserException { return getResponse(path, o, null, null); }