]> source.dussan.org Git - poi.git/commitdiff
Bug 57200: Do not try to delete the poifiles-tempdir as it can interfere when multipl...
authorDominik Stadler <centic@apache.org>
Sat, 12 Mar 2016 16:56:33 +0000 (16:56 +0000)
committerDominik Stadler <centic@apache.org>
Sat, 12 Mar 2016 16:56:33 +0000 (16:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734719 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/util/TempFile.java
src/testcases/org/apache/poi/util/TestTempFile.java

index a20341ee1272a0db4243d7525b24886ae139ec8c..b228d237d1d6139a65f6a05ac99f5b779e27a443 100644 (file)
@@ -24,10 +24,12 @@ import java.io.IOException;
  * Interface for creating temporary files. Collects them all into one directory by default.
  */
 public final class TempFile {
-    
     /** The strategy used by {@link #createTempFile(String, String)} to create the temporary files. */
     private static TempFileCreationStrategy strategy = new DefaultTempFileCreationStrategy();
-    
+
+    /** Define a constant for this property as it is sometimes mistypes as "tempdir" otherwise */
+    public static final String JAVA_IO_TMPDIR = "java.io.tmpdir";
+
     /**
      * Configures the strategy used by {@link #createTempFile(String, String)} to create the temporary files.
      *
@@ -93,12 +95,13 @@ public final class TempFile {
         @Override
         public File createTempFile(String prefix, String suffix) throws IOException {
             // Identify and create our temp dir, if needed
-            if (dir == null)
-            {
-                dir = new File(System.getProperty("java.io.tmpdir"), "poifiles");
-                dir.mkdir();
-                if (System.getProperty("poi.keep.tmp.files") == null)
-                    dir.deleteOnExit();
+            if (dir == null) {
+                dir = new File(System.getProperty(JAVA_IO_TMPDIR), "poifiles");
+                if(!dir.exists()) {
+                    if(!dir.mkdirs()) {
+                        throw new IOException("Could not create temporary directory '" + dir + "'");
+                    }
+                }
             }
 
             // Generate a unique new filename 
@@ -111,6 +114,5 @@ public final class TempFile {
             // All done
             return newFile;
         }
-        
     }
 }
index f22be76f7605634f5315b51c47cc23f06489c2a8..7ad40ed47cd86b47510dd0ba7f49ec0a585cd94b 100644 (file)
@@ -24,13 +24,47 @@ import static org.junit.Assert.assertTrue;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.Arrays;
 
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
-/**
- * @author Glen Stampoultzis
- */
 public class TestTempFile {
+    private String previousTempDir;
+
+    private File tempDir;
+
+    @Before
+    public void setUp() throws IOException {
+        previousTempDir = System.getProperty(TempFile.JAVA_IO_TMPDIR);
+
+        // use a separate tempdir for the tests to be able to check for leftover files
+        tempDir = File.createTempFile("TestTempFile", ".tst");
+        assertTrue(tempDir.delete());
+        assertTrue(tempDir.mkdirs());
+        System.setProperty(TempFile.JAVA_IO_TMPDIR, tempDir.getAbsolutePath());
+    }
+
+    @After
+    public void tearDown() {
+        String[] files = tempDir.list();
+        // can have the "poifiles" subdir
+        if(files.length == 1) {
+            assertEquals("Had: " + Arrays.toString(files), "poifiles", files[0]);
+            files = new File(tempDir, files[0]).list();
+            assertEquals("Had: " + Arrays.toString(files), 0, files.length);
+        } else {
+            assertEquals("Had: " + Arrays.toString(files), 0, files.length);
+        }
+
+        if(previousTempDir == null) {
+            System.clearProperty(TempFile.JAVA_IO_TMPDIR);
+        } else {
+            System.setProperty(TempFile.JAVA_IO_TMPDIR, previousTempDir);
+        }
+    }
+
     @Test
     public void testCreateTempFile()
             throws Exception
@@ -43,6 +77,7 @@ public class TestTempFile {
         assertEquals("poifiles", tempFile.getParentFile().getName());
 
         // Can't think of a good way to check whether a file is actually deleted since it would require the VM to stop.
+        assertTrue(tempFile.delete());
     }
     
     @Test