Simplify `log4j-osgi-test`
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java
index 6a1879e..b032f43 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/AbstractLoadBundleTest.java
@@ -19,13 +19,10 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.io.PrintStream;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.apache.logging.log4j.osgi.tests.junit.OsgiRule;
import org.apache.logging.log4j.util.ServiceLoaderUtil;
import org.junit.Assert;
import org.junit.Before;
@@ -39,18 +36,19 @@
/**
* Tests a basic Log4J 'setup' in an OSGi container.
*/
-public abstract class AbstractLoadBundleTest {
+abstract class AbstractLoadBundleTest {
private BundleContext bundleContext;
@Rule
- public OsgiRule osgi = new OsgiRule(getFactory());
+ public final OsgiRule osgi;
- /**
- * Called before each @Test.
- */
+ AbstractLoadBundleTest(final FrameworkFactory frameworkFactory) {
+ this.osgi = new OsgiRule(frameworkFactory);
+ }
+
@Before
- public void before() throws BundleException {
+ public void before() {
bundleContext = osgi.getFramework().getBundleContext();
}
@@ -76,59 +74,6 @@
return installBundle("org.apache.logging.log4j.api.test");
}
- protected abstract FrameworkFactory getFactory();
-
- private void log(final Bundle dummy) throws ReflectiveOperationException {
- // use reflection to log in the context of the dummy bundle
-
- final Class<?> logManagerClass = dummy.loadClass("org.apache.logging.log4j.LogManager");
- final Method getLoggerMethod = logManagerClass.getMethod("getLogger", Class.class);
-
- final Class<?> loggerClass = dummy.loadClass("org.apache.logging.log4j.configuration.CustomConfiguration");
-
- final Object logger = getLoggerMethod.invoke(null, loggerClass);
- final Method errorMethod = logger.getClass().getMethod("error", Object.class);
-
- errorMethod.invoke(logger, "Test OK");
- }
-
- private PrintStream setupStream(final Bundle api, final PrintStream newStream) throws ReflectiveOperationException {
- // use reflection to access the classes internals and in the context of the api bundle
-
- final Class<?> statusLoggerClass = api.loadClass("org.apache.logging.log4j.status.StatusLogger");
-
- final Field statusLoggerField = statusLoggerClass.getDeclaredField("STATUS_LOGGER");
- statusLoggerField.setAccessible(true);
- final Object statusLoggerFieldValue = statusLoggerField.get(null);
-
- final Field loggerField = statusLoggerClass.getDeclaredField("logger");
- loggerField.setAccessible(true);
- final Object loggerFieldValue = loggerField.get(statusLoggerFieldValue);
-
- final Class<?> simpleLoggerClass = api.loadClass("org.apache.logging.log4j.simple.SimpleLogger");
-
- final Field streamField = simpleLoggerClass.getDeclaredField("stream");
- streamField.setAccessible(true);
-
- final PrintStream oldStream = (PrintStream) streamField.get(loggerFieldValue);
-
- streamField.set(loggerFieldValue, newStream);
-
- return oldStream;
- }
-
- private void start(final Bundle api, final Bundle core, final Bundle dummy) throws BundleException {
- api.start();
- core.start();
- dummy.start();
- }
-
- private void stop(final Bundle api, final Bundle core, final Bundle dummy) throws BundleException {
- dummy.stop();
- core.stop();
- api.stop();
- }
-
private void uninstall(final Bundle api, final Bundle core, final Bundle dummy) throws BundleException {
dummy.uninstall();
core.uninstall();
@@ -139,7 +84,7 @@
* Tests starting, then stopping, then restarting, then stopping, and finally uninstalling the API and Core bundles
*/
@Test
- public void testApiCoreStartStopStartStop() throws BundleException, ReflectiveOperationException {
+ public void testApiCoreStartStopStartStop() throws BundleException {
final Bundle api = getApiBundle();
final Bundle core = getCoreBundle();
@@ -191,25 +136,18 @@
// fails if LOG4J2-1637 is not fixed
try {
core.start();
- } catch (final BundleException ex) {
- boolean shouldRethrow = true;
- final Throwable t = ex.getCause();
- if (t != null) {
- final Throwable t2 = t.getCause();
- if (t2 != null) {
- final String cause = t2.toString();
- final boolean result =
- cause.equals("java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger") // Equinox
- || cause.equals(
- "java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger not found by org.apache.logging.log4j.core [2]"); // Felix
- Assert.assertFalse(
- "org.apache.logging.log4j package is not properly imported in org.apache.logging.log4j.core bundle, check that the package is exported from api and is not split between api and core",
- result);
- shouldRethrow = !result;
+ } catch (final BundleException error0) {
+ boolean log4jClassNotFound = false;
+ final Throwable error1 = error0.getCause();
+ if (error1 != null) {
+ final Throwable error2 = error1.getCause();
+ if (error2 != null) {
+ log4jClassNotFound = error2.toString()
+ .startsWith("java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger");
}
}
- if (shouldRethrow) {
- throw ex; // rethrow if the cause of the exception is something else
+ if (!log4jClassNotFound) {
+ throw error0;
}
}
@@ -255,9 +193,6 @@
/**
* Tests whether the {@link ServiceLoaderUtil} finds services in other bundles.
- *
- * @throws BundleException
- * @throws ReflectiveOperationException
*/
@Test
public void testServiceLoader() throws BundleException, ReflectiveOperationException {
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfiguration.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfiguration.java
index 81a97d9..8948b00 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfiguration.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfiguration.java
@@ -35,25 +35,20 @@
* This Configuration is the same as the DefaultConfiguration but shows how a
* custom configuration can be built programmatically
*/
-public class CustomConfiguration extends AbstractConfiguration {
-
- /**
- * The name of the default configuration.
- */
- public static final String CONFIG_NAME = "Custom";
+final class CustomConfiguration extends AbstractConfiguration {
private final ListAppender appender = new ListAppender();
- public CustomConfiguration(final LoggerContext loggerContext) {
+ CustomConfiguration(final LoggerContext loggerContext) {
this(loggerContext, ConfigurationSource.NULL_SOURCE);
}
/**
* Constructor to create the default configuration.
*/
- public CustomConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
+ CustomConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
super(loggerContext, source);
- setName(CONFIG_NAME);
+ setName("Custom");
appender.start();
addAppender(appender);
final LoggerConfig root = getRootLogger();
@@ -72,9 +67,9 @@
appender.getEvents().clear();
}
- private static class ListAppender extends AbstractLifeCycle implements Appender {
+ private static final class ListAppender extends AbstractLifeCycle implements Appender {
- private final List<LogEvent> events = Collections.<LogEvent>synchronizedList(new ArrayList<>());
+ private final List<LogEvent> events = Collections.synchronizedList(new ArrayList<>());
@Override
public void append(final LogEvent event) {
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfigurationFactory.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfigurationFactory.java
index 695a105..ddbfe68 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfigurationFactory.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/CustomConfigurationFactory.java
@@ -29,7 +29,7 @@
*/
@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY)
@Order(50)
-public class CustomConfigurationFactory extends ConfigurationFactory {
+public final class CustomConfigurationFactory extends ConfigurationFactory {
/**
* Valid file extensions for XML files.
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/equinox/EquinoxLoadApiBundleTest.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/EquinoxLoadApiBundleTest.java
similarity index 78%
rename from log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/equinox/EquinoxLoadApiBundleTest.java
rename to log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/EquinoxLoadApiBundleTest.java
index b373650..c406035 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/equinox/EquinoxLoadApiBundleTest.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/EquinoxLoadApiBundleTest.java
@@ -14,19 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.osgi.tests.equinox;
+package org.apache.logging.log4j.osgi.tests;
-import org.apache.logging.log4j.osgi.tests.AbstractLoadBundleTest;
import org.eclipse.osgi.launch.EquinoxFactory;
-import org.osgi.framework.launch.FrameworkFactory;
/**
* Tests loading the Core bundle into an Eclipse Equinox OSGi container.
*/
public class EquinoxLoadApiBundleTest extends AbstractLoadBundleTest {
- @Override
- protected FrameworkFactory getFactory() {
- return new EquinoxFactory();
+ public EquinoxLoadApiBundleTest() {
+ super(new EquinoxFactory());
}
}
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/felix/FelixLoadApiBundleTest.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/FelixLoadApiBundleTest.java
similarity index 76%
rename from log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/felix/FelixLoadApiBundleTest.java
rename to log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/FelixLoadApiBundleTest.java
index 59f2930..e82cebb 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/felix/FelixLoadApiBundleTest.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/FelixLoadApiBundleTest.java
@@ -14,18 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.osgi.tests.felix;
+package org.apache.logging.log4j.osgi.tests;
-import org.apache.logging.log4j.osgi.tests.AbstractLoadBundleTest;
-import org.osgi.framework.launch.FrameworkFactory;
+import org.apache.felix.framework.FrameworkFactory;
/**
* Tests loading the Core bundle into an Apache Felix OSGi container.
*/
public class FelixLoadApiBundleTest extends AbstractLoadBundleTest {
- @Override
- protected FrameworkFactory getFactory() {
- return new org.apache.felix.framework.FrameworkFactory();
+ public FelixLoadApiBundleTest() {
+ super(new FrameworkFactory());
}
}
diff --git a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/junit/OsgiRule.java b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/OsgiRule.java
similarity index 94%
rename from log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/junit/OsgiRule.java
rename to log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/OsgiRule.java
index b965992..7fa2cd6 100644
--- a/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/junit/OsgiRule.java
+++ b/log4j-osgi-test/src/test/java/org/apache/logging/log4j/osgi/tests/OsgiRule.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.osgi.tests.junit;
+package org.apache.logging.log4j.osgi.tests;
import java.util.HashMap;
import java.util.Map;
@@ -26,12 +26,13 @@
/**
* JUnit rule to initialize and shutdown an OSGi framework.
*/
-public class OsgiRule extends ExternalResource {
+class OsgiRule extends ExternalResource {
private final FrameworkFactory factory;
+
private Framework framework;
- public OsgiRule(final FrameworkFactory factory) {
+ OsgiRule(final FrameworkFactory factory) {
this.factory = factory;
}