/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.core.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import junit.framework.TestCase; import org.teiid.core.CorePlugin; import org.teiid.core.TeiidException; /** * @since 4.0 */ public final class TestFileUtils extends TestCase { private static final String FILE_NAME = UnitTestUtil.getTestDataPath() + File.separator + "fakeScript.txt"; //$NON-NLS-1$ private static final String TEMP_FILE_PREFFIX = "mmtmp"; //$NON-NLS-1$ private final static String TEMP_DIR_NAME = "tempdir"; //$NON-NLS-1$ File tempDir; public static final String TEMP_FILE = "delete.me"; //$NON-NLS-1$ public static final String TEMP_FILE_RENAMED = "delete.me.old"; //$NON-NLS-1$ private final static String TEMP_FILE_NAME = "tempfile.txt"; //$NON-NLS-1$ private final static String TEMP_FILE_NAME2 = "tempfile2.txt"; //$NON-NLS-1$ // ========================================================================= // F R A M E W O R K // ========================================================================= /** * Constructor for TestJDBCRepositoryWriter. * @param name */ public TestFileUtils(String name) { super(name); } // ========================================================================= // S E T U P A N D T E A R D O W N // ========================================================================= public void setUp() throws Exception { super.setUp(); //create a temp directory tempDir = new File(TEMP_DIR_NAME); tempDir.mkdir(); } public void tearDown() throws Exception { super.tearDown(); try { tempDir.delete(); } catch (Exception e) { } try { new File(TEMP_FILE_NAME).delete(); } catch (Exception e) { e.printStackTrace(); } try { new File(TEMP_FILE_NAME2).delete(); } catch (Exception e) { e.printStackTrace(); } } public void testWrite() throws Exception{ File tmp = null; try { tmp = File.createTempFile(TEMP_FILE_PREFFIX, null); final FileInputStream is = new FileInputStream(FILE_NAME); FileUtils.write(is, tmp); if(tmp == null || tmp.length() == 0){ fail("Content not written to new file"); //$NON-NLS-1$ } }finally { if(tmp != null) { tmp.delete(); } } } public void testWriteEmptyFile() throws Exception{ File tmp = null; File emptyFile = null; try { tmp = File.createTempFile(TEMP_FILE_PREFFIX, null); emptyFile = File.createTempFile("EMPTY", null); //$NON-NLS-1$ final FileInputStream is = new FileInputStream(emptyFile); FileUtils.write(is, tmp); if(tmp == null || tmp.length() > 0){ fail("content available; must be empty"); //$NON-NLS-1$ } }finally { if(tmp != null) { tmp.delete(); } if (emptyFile != null) { emptyFile.delete(); } } } /** * Tests FileUtils.testDirectoryPermissions() * @since 4.3 */ public void testTestDirectoryPermissions() throws Exception { //positive case TestFileUtils.testDirectoryPermissions(TEMP_DIR_NAME); //negative case: dir doesn't exist try { TestFileUtils.testDirectoryPermissions("fakeDir"); //$NON-NLS-1$ fail("Expected a MetaMatrixCoreException"); //$NON-NLS-1$ } catch (TeiidException e) { } } /** * Tests FileUtils.copy() * @since 4.3 */ public void testCopy() throws Exception { String contents1 = ObjectConverterUtil.convertFileToString(new File(FILE_NAME)); //positive case FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, false); String contents2 = ObjectConverterUtil.convertFileToString(new File(TEMP_FILE_NAME)); assertEquals("Expected file contents to be the same", contents1, contents2); //$NON-NLS-1$ assertTrue("Expected original file to still exist", new File(FILE_NAME).exists()); //$NON-NLS-1$ //negative case: should fail because file already exists try { FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, false); fail("Expected MetaMatrixException"); //$NON-NLS-1$ } catch (IOException e) { } //positive case: should succeed because we've specified to overwrite FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, true); contents2 = ObjectConverterUtil.convertFileToString(new File(TEMP_FILE_NAME)); assertEquals("Expected file contents to be the same", contents1, contents2); //$NON-NLS-1$ assertTrue("Expected original file to still exist", new File(FILE_NAME).exists()); //$NON-NLS-1$ } /** * Tests FileUtils.rename() * @since 4.3 */ public void testRename() throws Exception { String contents1 = ObjectConverterUtil.convertFileToString(new File(FILE_NAME)); //positive case FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, true); FileUtils.rename(TEMP_FILE_NAME, TEMP_FILE_NAME2, false); String contents2 = ObjectConverterUtil.convertFileToString(new File(TEMP_FILE_NAME2)); assertEquals("Expected file contents to be the same", contents1, contents2); //$NON-NLS-1$ assertFalse("Expected original file to not exist", new File(TEMP_FILE_NAME).exists()); //$NON-NLS-1$ //negative case: should fail because file already exists FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, true); FileUtils.copy(FILE_NAME, TEMP_FILE_NAME2, true); try { FileUtils.rename(FILE_NAME, TEMP_FILE_NAME2, false); fail("Expected MetaMatrixException"); //$NON-NLS-1$ } catch (IOException e) { } //positive case: should succeed because we've specified to overwrite FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, true); FileUtils.copy(FILE_NAME, TEMP_FILE_NAME2, true); FileUtils.rename(TEMP_FILE_NAME, TEMP_FILE_NAME2, true); contents2 = ObjectConverterUtil.convertFileToString(new File(TEMP_FILE_NAME2)); assertEquals("Expected file contents to be the same", contents1, contents2); //$NON-NLS-1$ assertFalse("Expected original file to not exist", new File(TEMP_FILE_NAME).exists()); //$NON-NLS-1$ } /** * Tests FileUtils.remove() * @since 4.3 */ public void testRemove() throws Exception { FileUtils.copy(FILE_NAME, TEMP_FILE_NAME, true); //positive case FileUtils.remove(TEMP_FILE_NAME); assertFalse("Expected File to not exist", new File(TEMP_FILE_NAME).exists()); //$NON-NLS-1$ //call again - this should not throw an exception FileUtils.remove(TEMP_FILE_NAME); } /** * Tests FileUtils.copyRecursively() * Should fail because a file is given for source dir * @since 4.3 */ public void testCopyRecursivelyNull() throws Exception { File fileSource = new File(TEMP_FILE_NAME); fileSource.delete(); fileSource.createNewFile(); try { FileUtils.copyDirectoriesRecursively(fileSource, fileSource); fail("File arg should have been illegal."); //$NON-NLS-1$ } catch (final Exception err) { // source was a file instead of dir - exception // err.printStackTrace(); } finally { fileSource.delete(); } } /** * Test whether it's possible to read and write files in the specified directory. * @param dirPath Name of the directory to test * @throws TeiidException * @since 4.3 */ public static void testDirectoryPermissions(String dirPath) throws TeiidException { //try to create a file File tmpFile = new File(dirPath + File.separatorChar + TestFileUtils.TEMP_FILE); boolean success = false; try { success = tmpFile.createNewFile(); } catch (IOException e) { } if (!success) { throw new TeiidException("cannot create file in " + dirPath); //$NON-NLS-1$ } //test if file can be written to if (!tmpFile.canWrite()) { throw new TeiidException("cannot write " +dirPath); //$NON-NLS-1$ } //test if file can be read if (!tmpFile.canRead()) { throw new TeiidException("cannot read " + dirPath); //$NON-NLS-1$ } //test if file can be renamed File newFile = new File(dirPath + File.separatorChar + TestFileUtils.TEMP_FILE_RENAMED); success = false; try { success = tmpFile.renameTo(newFile); } catch (Exception e) { } if (!success) { throw new TeiidException("failed to rename " + dirPath); //$NON-NLS-1$ } //test if file can be deleted success = false; try { success = newFile.delete(); } catch (Exception e) { } if (!success) { final String msg = CorePlugin.Util.getString("FileUtils.Unable_to_delete_file_in", dirPath); //$NON-NLS-1$ throw new TeiidException(msg); } } }