Author: bodewig Date: Fri Aug 12 14:21:44 2011 New Revision: 1157119 URL: http://svn.apache.org/viewvc?rev=1157119&view=rev Log: be more aggressive when closing/deleting temporary files in tests
Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ArTestCase.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/CpioTestCase.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveEntryTest.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java Fri Aug 12 14:21:44 2011 @@ -29,6 +29,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import junit.framework.TestCase; @@ -77,20 +78,13 @@ public abstract class AbstractTestCase e rmdir(dir); rmdir(resultDir); dir = resultDir = null; - if (archive != null && archive.exists()) { - if (!archive.delete()){ - // Note: this exception won't be shown if the test has already failed - throw new Exception("Could not delete "+archive.getPath()); - } + if (!tryHardToDelete(archive)) { + // Note: this exception won't be shown if the test has already failed + throw new Exception("Could not delete "+archive.getPath()); } } protected static void rmdir(File f) { - // Sometimes fails without a pause - perhaps file close is partially asynchronous? - try { - Thread.sleep(20); - } catch (InterruptedException e) { - } String[] s = f.list(); if (s != null) { for (int i = 0; i < s.length; i++) { @@ -98,18 +92,45 @@ public abstract class AbstractTestCase e if (file.isDirectory()){ rmdir(file); } - boolean ok = file.delete(); + boolean ok = tryHardToDelete(file); if (!ok && file.exists()){ System.out.println("Failed to delete "+s[i]+" in "+f.getPath()); } } } - f.delete(); // safer to delete and check + tryHardToDelete(f); // safer to delete and check if (f.exists()){ throw new Error("Failed to delete "+f.getPath()); } } + private static final boolean ON_WINDOWS = + System.getProperty("os.name").toLowerCase(Locale.ENGLISH) + .indexOf("windows") > -1; + + /** + * Accommodate Windows bug encountered in both Sun and IBM JDKs. + * Others possible. If the delete does not work, call System.gc(), + * wait a little and try again. + * + * @return whether deletion was successful + * @since Stolen from FileUtils in Ant 1.8.0 + */ + public static boolean tryHardToDelete(File f) { + if (f != null && f.exists() && !f.delete()) { + if (ON_WINDOWS) { + System.gc(); + } + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + // Ignore Exception + } + return f.delete(); + } + return true; + } + /** * Creates an archive of textbased files in several directories. The * archivername is the factory identifier for the archiver, for example zip, @@ -139,6 +160,7 @@ public abstract class AbstractTestCase e OutputStream stream = null; try { archive = File.createTempFile("test", "." + archivename); + archive.deleteOnExit(); archiveList = new ArrayList<String>(); stream = new FileOutputStream(archive); @@ -201,6 +223,7 @@ public abstract class AbstractTestCase e archiveList = new ArrayList<String>(); try { archive = File.createTempFile("empty", "." + archivename); + archive.deleteOnExit(); stream = new FileOutputStream(archive); out = factory.createArchiveOutputStream(archivename, stream); out.finish(); @@ -227,6 +250,7 @@ public abstract class AbstractTestCase e archiveList = new ArrayList<String>(); try { archive = File.createTempFile("empty", "." + archivename); + archive.deleteOnExit(); stream = new FileOutputStream(archive); out = factory.createArchiveOutputStream(archivename, stream); // Use short file name so does not cause problems for ar @@ -286,9 +310,8 @@ public abstract class AbstractTestCase e */ protected File checkArchiveContent(ArchiveInputStream in, List<String> expected, boolean cleanUp) throws Exception { - File result = File.createTempFile("dir-result", ""); - result.delete(); - result.mkdir(); + File result = mkdir("dir-result"); + result.deleteOnExit(); try { ArchiveEntry entry = null; @@ -354,9 +377,7 @@ public abstract class AbstractTestCase e * element of the two element array). */ protected File[] createTempDirAndFile() throws IOException { - File tmpDir = File.createTempFile("testdir", ""); - tmpDir.delete(); - tmpDir.mkdir(); + File tmpDir = mkdir("testdir"); tmpDir.deleteOnExit(); File tmpFile = File.createTempFile("testfile", "", tmpDir); tmpFile.deleteOnExit(); Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ArTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ArTestCase.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ArTestCase.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ArTestCase.java Fri Aug 12 14:21:44 2011 @@ -215,11 +215,9 @@ public final class ArTestCase extends Ab if (aos != null) { aos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -257,11 +255,9 @@ public final class ArTestCase extends Ab if (aos != null) { aos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -305,14 +301,12 @@ public final class ArTestCase extends Ab if (aos != null) { aos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -357,14 +351,12 @@ public final class ArTestCase extends Ab if (aos != null) { aos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/CpioTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/CpioTestCase.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/CpioTestCase.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/CpioTestCase.java Fri Aug 12 14:21:44 2011 @@ -141,11 +141,9 @@ public final class CpioTestCase extends if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -183,11 +181,9 @@ public final class CpioTestCase extends if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -230,14 +226,12 @@ public final class CpioTestCase extends if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -283,14 +277,12 @@ public final class CpioTestCase extends if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java Fri Aug 12 14:21:44 2011 @@ -136,6 +136,8 @@ public class LongPathTest extends Abstra checkArchiveContent(ais, expected); } catch (AssertionFailedError e) { fail("Error processing "+file.getName()+" "+e); + } finally { + ais.close(); } } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java Fri Aug 12 14:21:44 2011 @@ -158,11 +158,9 @@ public final class TarTestCase extends A if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -199,11 +197,9 @@ public final class TarTestCase extends A if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -246,14 +242,12 @@ public final class TarTestCase extends A if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -298,14 +292,12 @@ public final class TarTestCase extends A if (tos != null) { tos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java Fri Aug 12 14:21:44 2011 @@ -228,11 +228,9 @@ public final class ZipTestCase extends A if (zos != null) { zos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -265,11 +263,9 @@ public final class ZipTestCase extends A if (zos != null) { zos.close(); } - if (archive != null) { - archive.delete(); - } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(archive); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -308,14 +304,12 @@ public final class ZipTestCase extends A if (zos != null) { zos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } @@ -356,14 +350,12 @@ public final class ZipTestCase extends A if (zos != null) { zos.close(); } - if (archive != null) { - archive.delete(); - } + tryHardToDelete(archive); if (fis != null) { fis.close(); } - tmp[1].delete(); - tmp[0].delete(); + tryHardToDelete(tmp[1]); + rmdir(tmp[0]); } } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java Fri Aug 12 14:21:44 2011 @@ -23,6 +23,7 @@ import java.io.FileOutputStream; import java.io.IOException; import junit.framework.TestCase; +import org.apache.commons.compress.AbstractTestCase; import org.apache.commons.compress.archivers.zip.JarMarker; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipExtraField; @@ -32,6 +33,7 @@ public class JarArchiveOutputStreamTest public void testJarMarker() throws IOException { File testArchive = File.createTempFile("jar-aostest", ".jar"); + testArchive.deleteOnExit(); JarArchiveOutputStream out = null; ZipFile zf = null; try { @@ -63,9 +65,7 @@ public class JarArchiveOutputStreamTest } catch (IOException e) { /* swallow */ } } ZipFile.closeQuietly(zf); - if (testArchive.exists()) { - testArchive.delete(); - } + AbstractTestCase.tryHardToDelete(testArchive); } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveEntryTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveEntryTest.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveEntryTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveEntryTest.java Fri Aug 12 14:21:44 2011 @@ -25,6 +25,8 @@ import java.io.IOException; import java.util.Locale; import junit.framework.TestCase; +import org.apache.commons.compress.AbstractTestCase; + public class TarArchiveEntryTest extends TestCase { private static final String OS = @@ -93,6 +95,7 @@ public class TarArchiveEntryTest extends if (tout != null) { tout.close(); } + AbstractTestCase.tryHardToDelete(f); } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java Fri Aug 12 14:21:44 2011 @@ -156,6 +156,7 @@ public class UTF8ZipFilesTest extends Ab public void testZipFileReadsUnicodeFields() throws IOException { File file = File.createTempFile("unicode-test", ".zip"); + file.deleteOnExit(); ZipArchiveInputStream zi = null; try { createTestFile(file, US_ASCII, false, true); @@ -168,15 +169,14 @@ public class UTF8ZipFilesTest extends Ab if (zi != null) { zi.close(); } - if (file.exists()) { - file.delete(); - } + tryHardToDelete(file); } } public void testZipArchiveInputStreamReadsUnicodeFields() throws IOException { File file = File.createTempFile("unicode-test", ".zip"); + file.deleteOnExit(); ZipFile zf = null; try { createTestFile(file, US_ASCII, false, true); @@ -186,9 +186,7 @@ public class UTF8ZipFilesTest extends Ab assertNotNull(zf.getEntry(OIL_BARREL_TXT)); } finally { ZipFile.closeQuietly(zf); - if (file.exists()) { - file.delete(); - } + tryHardToDelete(file); } } @@ -226,13 +224,12 @@ public class UTF8ZipFilesTest extends Ab throws IOException { File file = File.createTempFile(encoding + "-test", ".zip"); + file.deleteOnExit(); try { createTestFile(file, encoding, withEFS, withExplicitUnicodeExtra); testFile(file, encoding); } finally { - if (file.exists()) { - file.delete(); - } + tryHardToDelete(file); } } Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java?rev=1157119&r1=1157118&r2=1157119&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java Fri Aug 12 14:21:44 2011 @@ -30,6 +30,8 @@ import java.net.URL; import java.util.Enumeration; import java.util.Random; +import org.apache.commons.compress.AbstractTestCase; + import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertArrayEquals; @@ -2270,7 +2272,7 @@ public class Zip64SupportIT { if (os != null) { os.close(); } - f.delete(); + AbstractTestCase.tryHardToDelete(f); } } }