This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch OAK-10522 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 0df365f7ceebe225dcae606a7c2bf1e48a15c119 Author: Julian Reschke <[email protected]> AuthorDate: Thu Nov 2 18:57:57 2023 +0100 OAK-10522: avoid use of SecurityManager in indexing test --- .../apache/jackrabbit/oak/index/IndexCommand.java | 8 ++- .../org/apache/jackrabbit/oak/index/ReindexIT.java | 58 ++++------------------ 2 files changed, 16 insertions(+), 50 deletions(-) diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java index 8e4339cae4..f694c31adc 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java @@ -82,6 +82,11 @@ public class IndexCommand implements Command { Class.forName("org.apache.tika.parser.pdf.PDFParser"); } + // to be overridden by test cases that want to check the return value + public void exit(int status) { + System.exit(status); + } + @Override public void execute(String... args) throws Exception { OptionParser parser = new OptionParser(); @@ -100,7 +105,8 @@ public class IndexCommand implements Command { checkTikaDependency(); } catch (Throwable e) { System.err.println("Missing tika parser dependencies, use --ignore-missing-tika-dep to force continue"); - System.exit(1); + exit(1); + return; } } diff --git a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java index 91a9760a8b..db709eb8fe 100644 --- a/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java +++ b/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java @@ -52,13 +52,11 @@ import javax.jcr.query.RowIterator; import java.io.File; import java.io.IOException; import java.io.PrintStream; -import java.security.Permission; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import static org.apache.jackrabbit.guava.common.base.Charsets.UTF_8; -import static java.lang.System.getSecurityManager; -import static java.lang.System.setSecurityManager; import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.getNode; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.hasItem; @@ -69,7 +67,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; public class ReindexIT extends LuceneAbstractIndexCommandTest { private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); @@ -129,18 +126,25 @@ public class ReindexIT extends LuceneAbstractIndexCommandTest { @Test public void reindexIgnoreMissingTikaDepThrow() throws Exception{ + final AtomicInteger exitCode = new AtomicInteger(-1); IndexCommand command = new IndexCommand() { @Override public void checkTikaDependency() throws ClassNotFoundException { throw new ClassNotFoundException(); } + + @Override + public void exit(int status) { + exitCode.set(status); + } }; String[] args = { "--reindex", "--", // -- indicates that options have ended and rest needs to be treated as non option "test" }; - assertExits(1, () -> command.execute(args)); + command.execute(args); + assertEquals("Epxpect to exit with status 1", 1, exitCode.get()); assertEquals("Missing tika parser dependencies, use --ignore-missing-tika-dep to force continue", errContent.toString("UTF-8").trim()); } @@ -422,48 +426,4 @@ public class ReindexIT extends LuceneAbstractIndexCommandTest { } return results; } - - public static <E extends Throwable> void assertExits(final int expectedStatus, final ThrowingExecutable<E> executable) throws E { - final SecurityManager originalSecurityManager = getSecurityManager(); - setSecurityManager(new SecurityManager() { - @Override - public void checkPermission(final Permission perm) { - if (originalSecurityManager != null) - originalSecurityManager.checkPermission(perm); - } - - @Override - public void checkPermission(final Permission perm, final Object context) { - if (originalSecurityManager != null) - originalSecurityManager.checkPermission(perm, context); - } - - @Override - public void checkExit(final int status) { - super.checkExit(status); - throw new ExitException(status); - } - }); - try { - executable.run(); - fail("Expected System.exit(" + expectedStatus + ") to be called, but it wasn't called."); - } catch (final ExitException e) { - assertEquals(expectedStatus, e.status); - } finally { - setSecurityManager(originalSecurityManager); - } - } - - public interface ThrowingExecutable<E extends Throwable> { - void run() throws E; - } - - private static class ExitException extends SecurityException { - final int status; - - private ExitException(final int status) { - this.status = status; - } - } - }
