/* * Copyright 2015 herd contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.finra.herd.core; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Test driver for the FileUtils class. */ public class HerdFileUtilsTest extends AbstractCoreTest { private Path localTempPath; @Before public void setup() throws IOException { // Create a local temp directory. localTempPath = Files.createTempDirectory(null); } @After public void cleanup() throws IOException { FileUtils.deleteDirectory(localTempPath.toFile()); } @Test public void testVerifyFileExistsAndReadable() throws IOException { File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); HerdFileUtils.verifyFileExistsAndReadable(testFile); } @Test public void testVerifyFileExistsAndReadableFileNoExists() throws IOException { File testFile = new File("I_DO_NOT_EXIST"); try { HerdFileUtils.verifyFileExistsAndReadable(testFile); fail("Should throw an IllegalArgumentException when file does not exist."); } catch (IllegalArgumentException e) { assertEquals(String.format("File \"%s\" doesn't exist.", testFile.getName()), e.getMessage()); } } @Test public void testVerifyFileExistsAndReadableFileIsDirectory() throws IOException { File testDirectory = localTempPath.toFile(); try { HerdFileUtils.verifyFileExistsAndReadable(testDirectory); fail("Should throw an IllegalArgumentException when argument is a directory."); } catch (IllegalArgumentException e) { assertEquals(String.format("File \"%s\" is not a valid file that can be read as a manifest. Is it a directory?", testDirectory.getName()), e.getMessage()); } } @Test public void testVerifyFileExistsAndReadableFileNotReadable() throws IOException { File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); if (testFile.setReadable(false)) { try { HerdFileUtils.verifyFileExistsAndReadable(testFile); fail("Should throw an IllegalArgumentException when file is not readable."); } catch (IllegalArgumentException e) { assertEquals(String.format("Unable to read file \"%s\". Check permissions.", testFile.getName()), e.getMessage()); } } } /** * Cleans up a local test directory by deleting a test file. * * @throws IOException if fails to create a local test file */ @Test public void testCleanDirectoryIgnoreException() throws IOException { File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); HerdFileUtils.cleanDirectoryIgnoreException(localTempPath.toFile()); assertFalse(testFile.exists()); assertTrue(localTempPath.toFile().exists()); } /** * Tries to clean a directory which is actually a file. */ @Test public void testCleanDirectoryIgnoreExceptionWithException() throws Exception { final File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); executeWithoutLogging(HerdFileUtils.class, new Command() { @Override public void execute() throws Exception { HerdFileUtils.cleanDirectoryIgnoreException(testFile); } }); assertTrue(testFile.exists()); } /** * Deletes a local test directory with a test file. * * @throws IOException if fails to create a local test file */ @Test public void testDeleteDirectoryIgnoreException() throws IOException { File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); HerdFileUtils.deleteDirectoryIgnoreException(localTempPath.toFile()); assertFalse(testFile.exists()); assertFalse(localTempPath.toFile().exists()); } /** * Tries to delete a directory which is actually a file. */ @Test public void testDeleteDirectoryIgnoreExceptionWithException() throws Exception { final File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); executeWithoutLogging(HerdFileUtils.class, new Command() { @Override public void execute() throws Exception { HerdFileUtils.deleteDirectoryIgnoreException(testFile); } }); assertTrue(testFile.exists()); } /** * Deletes a local test file. * * @throws IOException if fails to create a local test file */ @Test public void testDeleteFileIgnoreException() throws IOException { File testFile = createLocalFile(localTempPath.toString(), "SOME_FILE", FILE_SIZE_1_KB); HerdFileUtils.deleteFileIgnoreException(testFile); assertFalse(testFile.exists()); assertTrue(localTempPath.toFile().exists()); } /** * Tries to delete a non-existing local test file. */ @Test public void testDeleteFileIgnoreExceptionWithException() throws Exception { executeWithoutLogging(HerdFileUtils.class, new Command() { @Override public void execute() throws Exception { HerdFileUtils.deleteDirectoryIgnoreException(new File("I_DO_NOT_EXIST")); } }); } }