From: Dominik Stadler Date: Sat, 12 Mar 2016 16:56:33 +0000 (+0000) Subject: Bug 57200: Do not try to delete the poifiles-tempdir as it can interfere when multipl... X-Git-Tag: REL_3_15_BETA2~455 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2f0d7183db9e714a79f65f4689c3ac6687ddf13a;p=poi.git Bug 57200: Do not try to delete the poifiles-tempdir as it can interfere when multiple applications are using SXSSF on the same machine. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734719 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/util/TempFile.java b/src/java/org/apache/poi/util/TempFile.java index a20341ee12..b228d237d1 100644 --- a/src/java/org/apache/poi/util/TempFile.java +++ b/src/java/org/apache/poi/util/TempFile.java @@ -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; } - } } diff --git a/src/testcases/org/apache/poi/util/TestTempFile.java b/src/testcases/org/apache/poi/util/TestTempFile.java index f22be76f76..7ad40ed47c 100644 --- a/src/testcases/org/apache/poi/util/TestTempFile.java +++ b/src/testcases/org/apache/poi/util/TestTempFile.java @@ -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