#58597: Fix tests to not do setAccessible(), add some doPrivileged, too.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1713891 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
da19b14670
commit
73a8488838
@ -38,7 +38,7 @@ public class RawDataBlock
|
||||
private byte[] _data;
|
||||
private boolean _eof;
|
||||
private boolean _hasData;
|
||||
private static POILogger log = POILogFactory.getLogger(RawDataBlock.class);
|
||||
static POILogger log = POILogFactory.getLogger(RawDataBlock.class);
|
||||
|
||||
/**
|
||||
* Constructor RawDataBlock
|
||||
|
@ -46,7 +46,7 @@ public final class POILogFactory {
|
||||
* The name of the class to use. Initialised the
|
||||
* first time we need it
|
||||
*/
|
||||
private static String _loggerClassName = null;
|
||||
static String _loggerClassName = null;
|
||||
|
||||
/**
|
||||
* Construct a POILogFactory.
|
||||
|
@ -32,7 +32,6 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
@ -46,6 +45,7 @@ import java.util.zip.ZipFile;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import org.apache.poi.EncryptedDocumentException;
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.POIXMLException;
|
||||
import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
@ -579,11 +579,8 @@ public final class TestPackage {
|
||||
assertTrue(tempFile2.delete());
|
||||
}
|
||||
|
||||
private static ContentTypeManager getContentTypeManager(OPCPackage pkg)
|
||||
throws IOException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
|
||||
Field f = OPCPackage.class.getDeclaredField("contentTypeManager");
|
||||
f.setAccessible(true);
|
||||
return (ContentTypeManager)f.get(pkg);
|
||||
private static ContentTypeManager getContentTypeManager(OPCPackage pkg) {
|
||||
return POITestCase.getFieldValue(OPCPackage.class, pkg, ContentTypeManager.class, "contentTypeManager");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -34,7 +34,6 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.ConnectException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
@ -54,6 +53,7 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.openxml4j.opc.PackageAccess;
|
||||
import org.apache.poi.poifs.crypt.dsig.DigestInfo;
|
||||
@ -247,9 +247,7 @@ public class TestSignatureInfo {
|
||||
XSSFWorkbook wb = new XSSFWorkbook(pkg);
|
||||
wb.setSheetName(0, "manipulated");
|
||||
// ... I don't know, why commit is protected ...
|
||||
Method m = XSSFWorkbook.class.getDeclaredMethod("commit");
|
||||
m.setAccessible(true);
|
||||
m.invoke(wb);
|
||||
POITestCase.callMethod(XSSFWorkbook.class, wb, Void.class, "commit", new Class[0], new Object[0]);
|
||||
|
||||
// todo: test a manipulation on a package part, which is not signed
|
||||
// ... maybe in combination with #56164
|
||||
|
@ -20,12 +20,9 @@
|
||||
package org.apache.poi.xslf.usermodel;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.xslf.util.PPTX2PNG;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
@ -34,32 +31,6 @@ import org.junit.Test;
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public class TestPPTX2PNG {
|
||||
private static boolean jaxpDebugEnable = false;
|
||||
|
||||
@BeforeClass
|
||||
public static void activateJaxpDebug() {
|
||||
jaxpDebugEnable = setDebugFld(true);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void resetJaxpDebug() {
|
||||
setDebugFld(jaxpDebugEnable);
|
||||
}
|
||||
|
||||
private static boolean setDebugFld(boolean enable) {
|
||||
// enable jaxp debugging because of jaxb/stax error in gump build
|
||||
try {
|
||||
Class<?> clz = Class.forName("javax.xml.stream.FactoryFinder");
|
||||
Field fld = clz.getDeclaredField("debug");
|
||||
fld.setAccessible(true);
|
||||
boolean isDebug = (Boolean)fld.get(null);
|
||||
fld.set(null, enable);
|
||||
return isDebug;
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void render() throws Exception {
|
||||
|
@ -28,8 +28,8 @@ import static org.junit.Assert.fail;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.ss.usermodel.BaseTestWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
@ -106,9 +106,7 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook {
|
||||
@SuppressWarnings("resource")
|
||||
SXSSFWorkbook wb = new SXSSFWorkbook(null, 10, false, true);
|
||||
|
||||
Field f = SXSSFWorkbook.class.getDeclaredField("_sharedStringSource");
|
||||
f.setAccessible(true);
|
||||
SharedStringsTable sss = (SharedStringsTable)f.get(wb);
|
||||
SharedStringsTable sss = POITestCase.getFieldValue(SXSSFWorkbook.class, wb, SharedStringsTable.class, "_sharedStringSource");
|
||||
|
||||
assertNotNull(sss);
|
||||
|
||||
@ -119,7 +117,7 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook {
|
||||
row.createCell(2).setCellValue("A");
|
||||
|
||||
XSSFWorkbook xssfWorkbook = (XSSFWorkbook) SXSSFITestDataProvider.instance.writeOutAndReadBack(wb);
|
||||
sss = (SharedStringsTable)f.get(wb);
|
||||
sss = POITestCase.getFieldValue(SXSSFWorkbook.class, wb, SharedStringsTable.class, "_sharedStringSource");
|
||||
assertEquals(2, sss.getUniqueCount());
|
||||
assertTrue(wb.dispose());
|
||||
|
||||
|
@ -19,12 +19,18 @@ package org.apache.poi.hwpf.model;
|
||||
|
||||
import java.lang.reflect.AccessibleObject;
|
||||
import java.lang.reflect.Field;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.Arrays;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.hwpf.HWPFDocFixture;
|
||||
import org.apache.poi.hwpf.model.types.DOPAbstractType;
|
||||
import org.apache.poi.util.SuppressForbidden;
|
||||
|
||||
// TODO: Add DocumentProperties#equals ???
|
||||
|
||||
public final class TestDocumentProperties
|
||||
extends TestCase
|
||||
@ -43,8 +49,20 @@ public final class TestDocumentProperties
|
||||
DocumentProperties newDocProperties =
|
||||
new DocumentProperties(buf, 0, size);
|
||||
|
||||
Field[] fields = DocumentProperties.class.getSuperclass().getDeclaredFields();
|
||||
final Field[] fields;
|
||||
try {
|
||||
fields = AccessController.doPrivileged(new PrivilegedExceptionAction<Field[]>() {
|
||||
@Override
|
||||
@SuppressForbidden("Test only")
|
||||
public Field[] run() throws Exception {
|
||||
final Field[] fields = DocumentProperties.class.getSuperclass().getDeclaredFields();
|
||||
AccessibleObject.setAccessible(fields, true);
|
||||
return fields;
|
||||
}
|
||||
});
|
||||
} catch (PrivilegedActionException pae) {
|
||||
throw pae.getException();
|
||||
}
|
||||
|
||||
for (int x = 0; x < fields.length; x++)
|
||||
{
|
||||
|
@ -21,8 +21,15 @@ import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.poi.util.SuppressForbidden;
|
||||
|
||||
/**
|
||||
* Parent class for POI JUnit TestCases, which provide additional
|
||||
* features
|
||||
@ -67,4 +74,45 @@ public class POITestCase {
|
||||
}
|
||||
fail("Unable to find " + needle + " in " + haystack);
|
||||
}
|
||||
|
||||
/** Utility method to get the value of a private/protected field.
|
||||
* Only use this method in test cases!!!
|
||||
*/
|
||||
public static <R,T> R getFieldValue(final Class<? super T> clazz, final T instance, final Class<R> fieldType, final String fieldName) {
|
||||
try {
|
||||
return AccessController.doPrivileged(new PrivilegedExceptionAction<R>() {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressForbidden("For test usage only")
|
||||
public R run() throws Exception {
|
||||
Field f = clazz.getDeclaredField(fieldName);
|
||||
f.setAccessible(true);
|
||||
return (R) f.get(instance);
|
||||
}
|
||||
});
|
||||
} catch (PrivilegedActionException pae) {
|
||||
throw new AssertionError("Cannot access field '" + fieldName + "' of class " + clazz);
|
||||
}
|
||||
}
|
||||
|
||||
/** Utility method to call a private/protected method.
|
||||
* Only use this method in test cases!!!
|
||||
*/
|
||||
public static <R,T> R callMethod(final Class<? super T> clazz, final T instance, final Class<R> returnType, final String methodName,
|
||||
final Class<?>[] parameterTypes, final Object[] parameters) {
|
||||
try {
|
||||
return AccessController.doPrivileged(new PrivilegedExceptionAction<R>() {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressForbidden("For test usage only")
|
||||
public R run() throws Exception {
|
||||
Method m = clazz.getDeclaredMethod(methodName, parameterTypes);
|
||||
m.setAccessible(true);
|
||||
return (R) m.invoke(instance, parameters);
|
||||
}
|
||||
});
|
||||
} catch (PrivilegedActionException pae) {
|
||||
throw new AssertionError("Cannot access method '" + methodName + "' of class " + clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,13 +17,13 @@
|
||||
|
||||
package org.apache.poi.hssf.record.aggregates;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
import junit.framework.AssertionFailedError;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
import org.apache.poi.hssf.record.Record;
|
||||
import org.apache.poi.hssf.record.SharedFormulaRecord;
|
||||
@ -176,21 +176,7 @@ public final class TestSharedValueManager extends TestCase {
|
||||
* {@link RowRecordsAggregate}.
|
||||
*/
|
||||
public static SharedValueManager extractFromRRA(RowRecordsAggregate rra) {
|
||||
Field f;
|
||||
try {
|
||||
f = RowRecordsAggregate.class.getDeclaredField("_sharedValueManager");
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
f.setAccessible(true);
|
||||
try {
|
||||
return (SharedValueManager) f.get(rra);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return POITestCase.getFieldValue(RowRecordsAggregate.class, rra, SharedValueManager.class, "_sharedValueManager");
|
||||
}
|
||||
|
||||
public void testBug52527() {
|
||||
|
@ -23,6 +23,7 @@ import static org.junit.Assert.fail;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.hssf.HSSFITestDataProvider;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
||||
@ -45,21 +46,7 @@ public final class TestHSSFName extends BaseTestNamedRange {
|
||||
* @return a reference to the wrapped {@link NameRecord}
|
||||
*/
|
||||
public static NameRecord getNameRecord(HSSFName definedName) {
|
||||
|
||||
Field f;
|
||||
try {
|
||||
f = HSSFName.class.getDeclaredField("_definedNameRec");
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
f.setAccessible(true);
|
||||
try {
|
||||
return (NameRecord) f.get(definedName);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return POITestCase.getFieldValue(HSSFName.class, definedName, NameRecord.class, "_definedNameRec");
|
||||
}
|
||||
|
||||
public TestHSSFName() {
|
||||
|
@ -18,6 +18,8 @@
|
||||
package org.apache.poi.hssf.usermodel;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.apache.poi.ddf.EscherContainerRecord;
|
||||
import org.apache.poi.ddf.EscherSpgrRecord;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
@ -228,17 +230,7 @@ public class TestShapeGroup extends TestCase{
|
||||
}
|
||||
|
||||
private static EscherSpgrRecord getSpgrRecord(HSSFShapeGroup group) {
|
||||
Field spgrField = null;
|
||||
try {
|
||||
spgrField = group.getClass().getDeclaredField("_spgrRecord");
|
||||
spgrField.setAccessible(true);
|
||||
return (EscherSpgrRecord) spgrField.get(group);
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
return POITestCase.getFieldValue(HSSFShapeGroup.class, group, EscherSpgrRecord.class, "_spgrRecord");
|
||||
}
|
||||
|
||||
public void testClearShapes(){
|
||||
|
@ -20,12 +20,12 @@ package org.apache.poi.poifs.storage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Random;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.util.DummyPOILogger;
|
||||
import org.apache.poi.util.POILogger;
|
||||
|
||||
/**
|
||||
* Class to test RawDataBlock functionality
|
||||
@ -82,10 +82,10 @@ public final class TestRawDataBlock extends TestCase {
|
||||
*/
|
||||
public void testShortConstructor() throws Exception {
|
||||
// Get the logger to be used
|
||||
POILogger oldLogger = RawDataBlock.log;
|
||||
DummyPOILogger logger = new DummyPOILogger();
|
||||
Field fld = RawDataBlock.class.getDeclaredField("log");
|
||||
fld.setAccessible(true);
|
||||
fld.set(null, logger);
|
||||
try {
|
||||
RawDataBlock.log = logger;
|
||||
assertEquals(0, logger.logged.size());
|
||||
|
||||
// Test for various data sizes
|
||||
@ -127,6 +127,9 @@ public final class TestRawDataBlock extends TestCase {
|
||||
assertEquals(0, logger.logged.size());
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
RawDataBlock.log = oldLogger;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,10 +139,10 @@ public final class TestRawDataBlock extends TestCase {
|
||||
*/
|
||||
public void testSlowInputStream() throws Exception {
|
||||
// Get the logger to be used
|
||||
POILogger oldLogger = RawDataBlock.log;
|
||||
DummyPOILogger logger = new DummyPOILogger();
|
||||
Field fld = RawDataBlock.class.getDeclaredField("log");
|
||||
fld.setAccessible(true);
|
||||
fld.set(null, logger);
|
||||
try {
|
||||
RawDataBlock.log = logger;
|
||||
assertEquals(0, logger.logged.size());
|
||||
|
||||
// Test for various ok data sizes
|
||||
@ -176,6 +179,9 @@ public final class TestRawDataBlock extends TestCase {
|
||||
1, logger.logged.size()
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
RawDataBlock.log = oldLogger;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -19,12 +19,11 @@ package org.apache.poi.poifs.storage;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.poifs.common.POIFSConstants;
|
||||
import org.apache.poi.util.DummyPOILogger;
|
||||
import org.apache.poi.util.POILogger;
|
||||
|
||||
/**
|
||||
* Class to test RawDataBlockList functionality
|
||||
@ -57,10 +56,10 @@ public final class TestRawDataBlockList extends TestCase {
|
||||
*/
|
||||
public void testShortConstructor() throws Exception {
|
||||
// Get the logger to be used
|
||||
POILogger oldLogger = RawDataBlock.log;
|
||||
DummyPOILogger logger = new DummyPOILogger();
|
||||
Field fld = RawDataBlock.class.getDeclaredField("log");
|
||||
fld.setAccessible(true);
|
||||
fld.set(null, logger);
|
||||
try {
|
||||
RawDataBlock.log = logger;
|
||||
assertEquals(0, logger.logged.size());
|
||||
|
||||
// Test for various short sizes
|
||||
@ -78,5 +77,8 @@ public final class TestRawDataBlockList extends TestCase {
|
||||
new RawDataBlockList(new ByteArrayInputStream(data), POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS);
|
||||
assertEquals(1, logger.logged.size());
|
||||
}
|
||||
} finally {
|
||||
RawDataBlock.log = oldLogger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -947,15 +947,4 @@ public class TestMathX extends AbstractNumericTestCase {
|
||||
d = 2d/3; s = 3.33;
|
||||
assertEquals("floor ", 0, MathX.floor(d, s));
|
||||
}
|
||||
|
||||
public void testCoverage() throws Exception {
|
||||
// get the default constructor
|
||||
final Constructor<MathX> c = MathX.class.getDeclaredConstructor(new Class[] {});
|
||||
|
||||
// make it callable from the outside
|
||||
c.setAccessible(true);
|
||||
|
||||
// call it
|
||||
c.newInstance((Object[]) null);
|
||||
}
|
||||
}
|
||||
|
@ -240,19 +240,6 @@ public class TestHexDump {
|
||||
byteOut.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConstruct() throws Exception {
|
||||
// to cover private constructor
|
||||
// get the default constructor
|
||||
final Constructor<HexDump> c = HexDump.class.getDeclaredConstructor(new Class[] {});
|
||||
|
||||
// make it callable from the outside
|
||||
c.setAccessible(true);
|
||||
|
||||
// call it
|
||||
assertNotNull(c.newInstance((Object[]) null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMain() throws Exception {
|
||||
File file = TempFile.createTempFile("HexDump", ".dat");
|
||||
|
@ -22,8 +22,6 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
@ -42,11 +40,9 @@ public final class TestPOILogger extends POILogger {
|
||||
*/
|
||||
@Test
|
||||
public void testVariousLogTypes() throws Exception {
|
||||
Field f = POILogFactory.class.getDeclaredField("_loggerClassName");
|
||||
f.setAccessible(true);
|
||||
String oldLCN = (String)f.get(null);
|
||||
String oldLCN = POILogFactory._loggerClassName;
|
||||
try {
|
||||
f.set(null, TestPOILogger.class.getName());
|
||||
POILogFactory._loggerClassName = TestPOILogger.class.getName();
|
||||
POILogger log = POILogFactory.getLogger( "foo" );
|
||||
assertTrue(log instanceof TestPOILogger);
|
||||
|
||||
@ -71,7 +67,7 @@ public final class TestPOILogger extends POILogger {
|
||||
log.log(POILogger.ERROR, "log\nforging", "\nevil","\nlog");
|
||||
assertEquals("log forging evil log", tlog.lastLog);
|
||||
} finally {
|
||||
f.set(null, oldLCN);
|
||||
POILogFactory._loggerClassName = oldLCN;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user