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);
             }
         }
     }


Reply via email to