/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.util; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mule.tck.ZipUtils.compress; import static org.mule.runtime.core.util.FileUtils.unzip; import org.mule.tck.ZipUtils.ZipResource; import org.mule.tck.junit4.AbstractMuleTestCase; import java.io.File; import java.io.IOException; import java.net.URL; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class FileUtilsTestCase extends AbstractMuleTestCase { private static final String TEST_FILE = "testFile.txt"; private static final String TEST_DIRECTORY = "target" + File.separator + "testDirectory"; private static final String UNZIPPED_FILE_PATH = TEST_DIRECTORY + File.separator + "testFolder" + File.separator + "testFile.txt"; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); private File toDir; @Before public void setupDir() { toDir = temporaryFolder.getRoot(); } @Test public void testFileTools() throws Exception { File file = null; try { file = FileUtils.stringToFile(TEST_FILE, "this is a test file"); assertNotNull(file); assertTrue(file.exists()); file = FileUtils.stringToFile(TEST_FILE, " and this is appended content", true); String content = FileUtils.readFileToString(FileUtils.newFile(TEST_FILE), (String) null); assertNotNull(content); assertTrue(content.indexOf("this is a test file") > -1); assertTrue(content.indexOf(" and this is appended content") > -1); file = FileUtils.newFile(TEST_FILE); assertNotNull(file); assertTrue(file.exists()); file = FileUtils.createFile(TEST_FILE); assertNotNull(file); assertTrue(file.exists()); file = FileUtils.createFile(TEST_FILE + "2"); assertNotNull(file); assertTrue(file.exists()); assertTrue(file.canRead()); file.delete(); file = FileUtils.newFile(TEST_FILE); file.delete(); File dir = FileUtils.openDirectory("src"); assertNotNull(dir); assertTrue(dir.exists()); assertTrue(dir.canRead()); assertTrue(dir.isDirectory()); dir = FileUtils.openDirectory("doesNotExist"); assertNotNull(dir); assertTrue(dir.exists()); assertTrue(dir.canRead()); assertTrue(dir.isDirectory()); dir.delete(); } finally { if (file != null) { file.delete(); } } } @Test public void testFileNameTools() throws Exception { String filename = "Blah<Blah>.txt"; String result = FileUtils.prepareWinFilename(filename); assertEquals("Blah(Blah).txt", result); filename = "Bla]h<Blah:a;b|c?d=e_f*g>.txt"; result = FileUtils.prepareWinFilename(filename); assertEquals("Bla-h(Blah-a-b-c-d=e_f-g).txt", result); filename = "B\"la-h<Blah:a;b|c?d=e_f*g>.txt"; result = FileUtils.prepareWinFilename(filename); assertEquals("B-la-h(Blah-a-b-c-d=e_f-g).txt", result); } @Test public void testDirectoryTools() throws Exception { File dir = FileUtils.openDirectory("src"); assertNotNull(dir); assertTrue(dir.exists()); assertTrue(dir.canRead()); assertTrue(dir.isDirectory()); dir = FileUtils.openDirectory("doesNotExist"); assertNotNull(dir); assertTrue(dir.exists()); assertTrue(dir.canRead()); assertTrue(dir.isDirectory()); FileUtils.deleteTree(dir); } @Test public void testExtractResource() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-1"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { assertTrue("Failed to create output dirs.", outputDir.mkdirs()); } String res = "META-INF/MANIFEST.MF"; FileUtils.extractResources(res, getClass(), outputDir, true); File result = FileUtils.newFile(testDir, res); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testExtractResources() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-2"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String res = "META-INF/"; FileUtils.extractResources(res, getClass(), outputDir, true); File result = FileUtils.newFile(testDir, res); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isDirectory()); FileUtils.deleteTree(outputDir); } @Test public void testExtractFileResource() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-3"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String res = "org/mule/runtime/core/util/FileUtils.class"; FileUtils.extractResources(res, FileUtils.class, outputDir, true); File result = FileUtils.newFile(testDir, res); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testExtractFileResources() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-4"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String res = "org/mule/runtime/core/util/"; FileUtils.extractResources(res, FileUtils.class, outputDir, true); File result = FileUtils.newFile(testDir, res); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isDirectory()); FileUtils.deleteTree(outputDir); } @Test public void testExtractResourceWithoutKeepingDirStructure() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-5"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String fileName = "MANIFEST.MF"; String res = "META-INF/" + fileName; FileUtils.extractResources(res, getClass(), outputDir, false); File result = FileUtils.newFile(testDir, fileName); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testExtractResourcesWithoutKeepingDirStructure() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-6"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String fileName = "util/FileUtilsTestCase.class"; String res = "org/mule/runtime/core"; FileUtils.extractResources(res, FileUtilsTestCase.class, outputDir, false); File result = FileUtils.newFile(testDir, fileName); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testExtractFileResourceWithoutKeepingDirStructure() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-7"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String fileName = "FileUtils.class"; String res = "org/mule/runtime/core/util/" + fileName; FileUtils.extractResources(res, FileUtils.class, outputDir, false); File result = FileUtils.newFile(testDir, fileName); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testExtractFileResourcesWithoutKeepingDirStructure() throws Exception { String testDir = TEST_DIRECTORY + File.separator + "Test-8"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } String fileName = "util/FileUtilsTestCase.class"; String res = "org/mule/runtime/core/"; FileUtils.extractResources(res, FileUtilsTestCase.class, outputDir, false); File result = FileUtils.newFile(testDir, fileName); assertNotNull(result); assertTrue(result.exists()); assertTrue(result.canRead()); assertTrue(result.isFile()); assertTrue(result.length() > 0); FileUtils.deleteTree(outputDir); } @Test public void testDeleteTreeWithIgnoredDirectories() throws Exception { final String testDir = TEST_DIRECTORY + File.separator + "Test-deleting"; File outputDir = FileUtils.newFile(testDir); if (!outputDir.exists()) { outputDir.mkdirs(); } File toBeDeleted1 = FileUtils.newFile(outputDir, "toBeDeleted1/"); toBeDeleted1.mkdirs(); File toBeDeleted2 = FileUtils.newFile(outputDir, "toBeDeleted2/"); toBeDeleted2.mkdirs(); File keepMeIntact = FileUtils.newFile(outputDir, "keepMeIntact/"); keepMeIntact.mkdirs(); FileUtils.deleteTree(outputDir, new String[] {"keepMeIntact"}); assertTrue("Shouldn't have been deleted.", keepMeIntact.exists()); FileUtils.deleteTree(outputDir); } @Test public void testRenameFile() { try { File sourceFile = createTestFile("source"); File destFile = createTestFile("dest"); assertTrue(destFile.delete()); assertTrue(FileUtils.renameFile(sourceFile, destFile)); assertTrue(destFile.exists()); assertTrue(destFile.delete()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void testRenameFileAcrossFolders() { try { File dir = createTestDir("test"); File sourceFile = createTestFile("source"); File destFile = new File(dir, "dest"); assertTrue(FileUtils.renameFile(sourceFile, destFile)); assertTrue(destFile.exists()); assertTrue(destFile.delete()); assertTrue(dir.delete()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void testUnzipFileToSameFolderTwice() throws Exception { URL resourceAsUrl = IOUtils.getResourceAsUrl("testFolder.zip", getClass()); File zipFile = new File(resourceAsUrl.getFile()); File outputDir = FileUtils.newFile(TEST_DIRECTORY); for (int i = 0; i < 2; i++) { unzip(zipFile, outputDir); File testFile = new File(UNZIPPED_FILE_PATH); assertTrue(testFile.exists()); } } @Test public void unzipsFileWithoutParentFolderEntry() throws Exception { final String resourceName = "dummy.xml"; final String resourceAlias = "folder" + File.separator + resourceName; final File compressedFile = new File(toDir, "test.zip"); compress(compressedFile, new ZipResource[] {new ZipResource(resourceName, resourceAlias)}); unzip(compressedFile, toDir); assertThat(new File(new File(toDir, "folder"), resourceName).exists(), is(true)); } private File createTestFile(String filePath) throws IOException { return File.createTempFile(filePath, ".junit"); } private File createTestDir(String dirPath) throws IOException { File file = createTestFile(dirPath); file.delete(); file.mkdir(); return file; } }