Author: centic
Date: Mon Apr 21 08:51:13 2025
New Revision: 1925190
URL: http://svn.apache.org/viewvc?rev=1925190&view=rev
Log:
Avoid race-condition with sample-file being changed/empty
Also improve output EmptyfileException
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/extractor/ooxml/TestExtractorFactory.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFSlideShowFactory.java
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/extractor/ooxml/TestExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/extractor/ooxml/TestExtractorFactory.java?rev=1925190&r1=1925189&r2=1925190&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/extractor/ooxml/TestExtractorFactory.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/extractor/ooxml/TestExtractorFactory.java
Mon Apr 21 08:51:13 2025
@@ -17,7 +17,6 @@
package org.apache.poi.extractor.ooxml;
import static org.apache.poi.POITestCase.assertContains;
-import static org.apache.poi.extractor.ExtractorFactory.createExtractor;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
@@ -26,12 +25,14 @@ import static org.junit.jupiter.api.Asse
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Locale;
import java.util.stream.Stream;
+import org.apache.poi.EmptyFileException;
import org.apache.poi.POIDataSamples;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.extractor.POIOLE2TextExtractor;
@@ -142,7 +143,7 @@ class TestExtractorFactory {
@ParameterizedTest
@MethodSource("testFileData")
void testFile(String testcase, File file, String extractor, int count)
throws Exception {
- try (POITextExtractor ext = createExtractor(file)) {
+ try (POITextExtractor ext = ExtractorFactory.createExtractor(file)) {
assertNotNull(ext);
testExtractor(ext, testcase, extractor, count);
}
@@ -154,7 +155,7 @@ class TestExtractorFactory {
// test processing of InputStream
try (FileInputStream fis = new FileInputStream(testFile);
POIFSFileSystem poifs = new POIFSFileSystem(fis);
- POITextExtractor ext = createExtractor(poifs)) {
+ POITextExtractor ext = ExtractorFactory.createExtractor(poifs)) {
assertNotNull(ext);
testExtractor(ext, testcase, extractor, count);
}
@@ -165,7 +166,7 @@ class TestExtractorFactory {
void testOOXML(String testcase, File testFile, String extractor, int
count) throws Exception {
// test processing of InputStream
try (FileInputStream fis = new FileInputStream(testFile);
- POITextExtractor ext = createExtractor(fis)) {
+ POITextExtractor ext = ExtractorFactory.createExtractor(fis)) {
assertNotNull(ext);
testExtractor(ext, testcase, extractor, count);
}
@@ -187,15 +188,31 @@ class TestExtractorFactory {
@Test
void testFileInvalid() {
//noinspection resource
- IOException ex = assertThrows(IOException.class, () ->
createExtractor(txt));
- assertEquals("Can't create extractor - unsupported file type:
UNKNOWN", ex.getMessage());
+ IOException ex = assertThrows(IOException.class, () ->
ExtractorFactory.createExtractor(txt));
+ assertEquals("Can't create extractor - unsupported file type:
UNKNOWN", ex.getMessage(),
+ "Had: " + ex);
}
@Test
void testInputStreamInvalid() throws IOException {
try (FileInputStream fis = new FileInputStream(txt)) {
- IOException ex = assertThrows(IOException.class, () ->
createExtractor(fis));
- assertTrue(ex.getMessage().contains(FileMagic.UNKNOWN.name()));
+ IOException ex = assertThrows(IOException.class, () ->
ExtractorFactory.createExtractor(fis));
+ assertTrue(ex.getMessage().contains(FileMagic.UNKNOWN.name()),
"Had: " + ex);
+ }
+ }
+
+ @Test
+ void testInputStreamEmpty() throws IOException {
+ try (ByteArrayInputStream fis = new ByteArrayInputStream(new byte[0]))
{
+ EmptyFileException ex = assertThrows(EmptyFileException.class, ()
-> ExtractorFactory.createExtractor(fis));
+ }
+ }
+
+ @Test
+ void testInputStreamTooShort() throws IOException {
+ try (ByteArrayInputStream fis = new ByteArrayInputStream(new byte[] {
0 })) {
+ IOException ex = assertThrows(IOException.class, () ->
ExtractorFactory.createExtractor(fis));
+ assertTrue(ex.getMessage().contains(FileMagic.UNKNOWN.name()),
"Had: " + ex);
}
}
@@ -204,7 +221,8 @@ class TestExtractorFactory {
// Not really an Extractor test, but we'll leave it to test POIFS
reaction anyway ...
//noinspection resource
IOException ex = assertThrows(IOException.class, () -> new
POIFSFileSystem(txt));
- assertTrue(ex.getMessage().contains("Invalid header signature; read
0x3D20726F68747541, expected 0xE11AB1A1E011CFD0"));
+ assertTrue(ex.getMessage().contains("Invalid header signature; read
0x3D20726F68747541, expected 0xE11AB1A1E011CFD0"),
+ "Had: " + ex);
}
@Test
@@ -240,7 +258,7 @@ class TestExtractorFactory {
try {
// Check we get the right extractors now
- try (POITextExtractor extractor = createExtractor(new
POIFSFileSystem(new FileInputStream(xls)))) {
+ try (POITextExtractor extractor =
ExtractorFactory.createExtractor(new POIFSFileSystem(new
FileInputStream(xls)))) {
assertInstanceOf(EventBasedExcelExtractor.class, extractor);
assertTrue(extractor.getText().length() > 200);
}
@@ -259,7 +277,7 @@ class TestExtractorFactory {
assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
// And back
- try (POITextExtractor extractor = createExtractor(new
POIFSFileSystem(new FileInputStream(xls)))) {
+ try (POITextExtractor extractor = ExtractorFactory.createExtractor(new
POIFSFileSystem(new FileInputStream(xls)))) {
assertInstanceOf(ExcelExtractor.class, extractor);
assertTrue(extractor.getText().length() > 200);
}
@@ -298,7 +316,7 @@ class TestExtractorFactory {
void testEmbedded(String format, File file, String expected) throws
Exception {
int numWord = 0, numXls = 0, numPpt = 0, numMsg = 0, numWordX = 0;
- try (final POIOLE2TextExtractor ext = (POIOLE2TextExtractor)
createExtractor(file)) {
+ try (final POIOLE2TextExtractor ext = (POIOLE2TextExtractor)
ExtractorFactory.createExtractor(file)) {
final POITextExtractor[] embeds =
ExtractorFactory.getEmbeddedDocsTextExtractors(ext);
for (POITextExtractor embed : embeds) {
@@ -470,6 +488,6 @@ class TestExtractorFactory {
}
private static POITextExtractor ex(String filename) throws IOException {
- return createExtractor(ssTests.getFile(filename));
+ return ExtractorFactory.createExtractor(ssTests.getFile(filename));
}
}
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFSlideShowFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFSlideShowFactory.java?rev=1925190&r1=1925189&r2=1925190&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFSlideShowFactory.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFSlideShowFactory.java
Mon Apr 21 08:51:13 2025
@@ -42,7 +42,9 @@ import org.apache.poi.util.IOUtils;
import org.apache.poi.util.TempFile;
import org.apache.poi.xssf.XSSFTestDataSamples;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Isolated;
+@Isolated // testFactoryFromFile() changes sample-files, thus should run in
isolation until this is removed
public final class TestXSLFSlideShowFactory extends BaseTestSlideShowFactory {
private static final POIDataSamples _slTests =
POIDataSamples.getSlideShowInstance();
private static final String filename = "SampleShow.pptx";
@@ -54,7 +56,7 @@ public final class TestXSLFSlideShowFact
@Test
void testFactoryFromFile() {
// Remove thrown.* when bug 58779 is resolved
- // In the mean time, this function will modify SampleShow.pptx on disk.
+ // In the meantime, this function will modify SampleShow.pptx on disk.
AssertionError ex = assertThrows(AssertionError.class, () ->
testFactoryFromFile(filename),
"Bug 58779: " + removeExpectedExceptionMsg);
assertTrue(ex.getMessage().contains("SampleShow.pptx sample file was
modified as a result of closing the slideshow"));
@@ -97,7 +99,7 @@ public final class TestXSLFSlideShowFact
File file = XSSFTestDataSamples.getSampleFile("workbook.xml");
try (FileInputStream fis = new FileInputStream(file)) {
try {
- SlideShow slideShow = SlideShowFactory.create(fis);
+ SlideShow<?,?> slideShow = SlideShowFactory.create(fis);
if (slideShow != null) slideShow.close();
fail("SlideShowFactory.create should have failed");
} catch (IOException ie) {
@@ -105,7 +107,7 @@ public final class TestXSLFSlideShowFact
}
}
try {
- SlideShow slideShow = SlideShowFactory.create(file);
+ SlideShow<?,?> slideShow = SlideShowFactory.create(file);
if (slideShow != null) slideShow.close();
fail("SlideShowFactory.create should have failed");
} catch (IOException ie) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]