@Test public void testDeleteOnExit() throws Exception { // Create deleteOnExit entries Path file1 = helper.getTestRootPath(fc, "file1"); createFile(fc, file1, numBlocks, blockSize); fc.deleteOnExit(file1); checkDeleteOnExitData(1, fc, file1); // Ensure shutdown hook is added Assert.assertTrue(ShutdownHookManager.get().hasShutdownHook(FileContext.FINALIZER)); Path file2 = helper.getTestRootPath(fc, "dir1/file2"); createFile(fc, file2, numBlocks, blockSize); fc.deleteOnExit(file2); checkDeleteOnExitData(1, fc, file1, file2); Path dir = helper.getTestRootPath(fc, "dir3/dir4/dir5/dir6"); createFile(fc, dir, numBlocks, blockSize); fc.deleteOnExit(dir); checkDeleteOnExitData(1, fc, file1, file2, dir); // trigger deleteOnExit and ensure the registered // paths are cleaned up FileContext.FINALIZER.run(); checkDeleteOnExitData(0, fc, new Path[0]); Assert.assertFalse(exists(fc, file1)); Assert.assertFalse(exists(fc, file2)); Assert.assertFalse(exists(fc, dir)); }
@Test(timeout = 60000) public void testSymlinkHdfsDisable() throws Exception { Configuration conf = new HdfsConfiguration(); // disable symlink resolution conf.setBoolean(CommonConfigurationKeys.FS_CLIENT_RESOLVE_REMOTE_SYMLINKS_KEY, false); // spin up minicluster, get dfs and filecontext MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build(); DistributedFileSystem dfs = cluster.getFileSystem(); FileContext fc = FileContext.getFileContext(cluster.getURI(0), conf); // Create test files/links FileContextTestHelper helper = new FileContextTestHelper("/tmp/TestSymlinkHdfsDisable"); Path root = helper.getTestRootPath(fc); Path target = new Path(root, "target"); Path link = new Path(root, "link"); DFSTestUtil.createFile(dfs, target, 4096, (short) 1, 0xDEADDEAD); fc.createSymlink(target, link, false); // Try to resolve links with FileSystem and FileContext try { fc.open(link); fail("Expected error when attempting to resolve link"); } catch (IOException e) { GenericTestUtils.assertExceptionContains("resolution is disabled", e); } try { dfs.open(link); fail("Expected error when attempting to resolve link"); } catch (IOException e) { GenericTestUtils.assertExceptionContains("resolution is disabled", e); } }
@After public void tearDown() throws IOException { fc.delete(helper.getTestRootPath(fc), true); }