diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v1_OSGiIT.java similarity index 98% rename from jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/OSGiIT.java rename to jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v1_OSGiIT.java index 8adac99ae..a9ab4540e 100644 --- a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/OSGiIT.java +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v1_OSGiIT.java @@ -52,7 +52,7 @@ import org.osgi.framework.Version; @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) -public class OSGiIT { +public class Slf4j_v1_OSGiIT { @Configuration public Option[] configuration() throws IOException, URISyntaxException { @@ -64,10 +64,13 @@ public class OSGiIT { mavenBundle("org.osgi", "org.osgi.dto", "1.0.0"), mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.16"), mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), + mavenBundle("org.slf4j", "slf4j-api", "1.7.36"), - mavenBundle("commons-logging", "commons-logging", "1.2"), mavenBundle("ch.qos.logback", "logback-core", "1.2.11"), mavenBundle("ch.qos.logback", "logback-classic", "1.2.11"), + + mavenBundle("org.apache.tika", "tika-core", "2.4.1"), + frameworkProperty("repository.home").value("target"), systemProperties( systemProperty("logback.configurationFile") diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_4_OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_4_OSGiIT.java new file mode 100644 index 000000000..5f7975d70 --- /dev/null +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_4_OSGiIT.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.osgi; + +import static org.junit.Assert.assertEquals; +import static org.ops4j.pax.exam.CoreOptions.bundle; +import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.systemProperties; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import static org.ops4j.pax.exam.CoreOptions.vmOption; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.options.SystemPropertyOption; +import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; +import org.ops4j.pax.exam.spi.reactors.PerClass; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; + +@RunWith(PaxExam.class) +@ExamReactorStrategy(PerClass.class) +public class Slf4j_v2_Tika_v2_4_OSGiIT { + + @Configuration + public Option[] configuration() throws IOException, URISyntaxException { + return CoreOptions.options( + junitBundles(), + mavenBundle("org.osgi", "org.osgi.service.log", "1.3.0"), + mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.12"), + mavenBundle("org.apache.felix", "org.apache.felix.jaas", "1.0.2"), + mavenBundle("org.osgi", "org.osgi.dto", "1.0.0"), + mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.16"), + mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), + + //slf4j-api-2.0.7 requirement: + //[slf4j.api [24](R 24.0)] osgi.extender; (&(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0))) + mavenBundle("org.ow2.asm", "asm", "9.5"), + mavenBundle("org.ow2.asm", "asm-tree", "9.5"), + mavenBundle("org.ow2.asm", "asm-analysis", "9.5"), + mavenBundle("org.ow2.asm", "asm-commons", "9.5"), + mavenBundle("org.ow2.asm", "asm-util", "9.5"), + mavenBundle("org.apache.aries.spifly", "org.apache.aries.spifly.dynamic.bundle", "1.3.6"), + + mavenBundle("org.slf4j", "slf4j-api", "2.0.7"), + mavenBundle("ch.qos.logback", "logback-core", "1.3.5"), + mavenBundle("ch.qos.logback", "logback-classic", "1.3.5"), + + mavenBundle("org.apache.tika", "tika-core", "2.4.1"), + + frameworkProperty("repository.home").value("target"), + systemProperties( + systemProperty("logback.configurationFile") + .value("file:" + PathUtils.getBaseDir() + "/src/test/resources/logback-test.xml"), + new SystemPropertyOption("felix.fileinstall.dir").value(getConfigDir())), + jarBundles(), + jpmsOptions()); + } + + private Option jpmsOptions(){ + DefaultCompositeOption composite = new DefaultCompositeOption(); + if (Version.parseVersion(System.getProperty("java.specification.version")).getMajor() > 1){ + if (java.nio.file.Files.exists(java.nio.file.FileSystems.getFileSystem(URI.create("jrt:/")).getPath("modules", "java.se.ee"))){ + composite.add(vmOption("--add-modules=java.se.ee")); + } + composite.add(vmOption("--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.io=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.net=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.nio=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.jar=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.regex=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.zip=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED")); + } + return composite; + } + + private String getConfigDir(){ + return new File(new File("src", "test"), "config").getAbsolutePath(); + } + + private Option jarBundles() throws MalformedURLException { + DefaultCompositeOption composite = new DefaultCompositeOption(); + for (File bundle : new File("target", "test-bundles").listFiles()) { + if (bundle.getName().endsWith(".jar") && bundle.isFile()) { + composite.add(bundle(bundle.toURI().toURL().toString())); + } + } + return composite; + } + + @Inject + private BundleContext context; + + @Test + public void bundleStates() { + for (Bundle bundle : context.getBundles()) { + assertEquals( + String.format("Bundle %s not active. have a look at the logs", bundle.toString()), + Bundle.ACTIVE, bundle.getState()); + } + } + + @Test + public void listBundles() { + for (Bundle bundle : context.getBundles()) { + System.out.println(bundle); + } + } + + @Test + public void listServices() throws InvalidSyntaxException { + for (ServiceReference reference + : context.getAllServiceReferences(null, null)) { + System.out.println(reference); + } + } +} diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_8_OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_8_OSGiIT.java new file mode 100644 index 000000000..81bde16f4 --- /dev/null +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/oak/osgi/Slf4j_v2_Tika_v2_8_OSGiIT.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.osgi; + +import static org.junit.Assert.assertEquals; +import static org.ops4j.pax.exam.CoreOptions.bundle; +import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.systemProperties; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import static org.ops4j.pax.exam.CoreOptions.vmOption; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.options.SystemPropertyOption; +import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; +import org.ops4j.pax.exam.spi.reactors.PerClass; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; + +@RunWith(PaxExam.class) +@ExamReactorStrategy(PerClass.class) +public class Slf4j_v2_Tika_v2_8_OSGiIT { + + @Configuration + public Option[] configuration() throws IOException, URISyntaxException { + return CoreOptions.options( + junitBundles(), + mavenBundle("org.osgi", "org.osgi.service.log", "1.3.0"), + mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.12"), + mavenBundle("org.apache.felix", "org.apache.felix.jaas", "1.0.2"), + mavenBundle("org.osgi", "org.osgi.dto", "1.0.0"), + mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.16"), + mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), + + //slf4j-api-2.0.7 requirement: + //[slf4j.api [24](R 24.0)] osgi.extender; (&(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0))) + mavenBundle("org.ow2.asm", "asm", "9.5"), + mavenBundle("org.ow2.asm", "asm-tree", "9.5"), + mavenBundle("org.ow2.asm", "asm-analysis", "9.5"), + mavenBundle("org.ow2.asm", "asm-commons", "9.5"), + mavenBundle("org.ow2.asm", "asm-util", "9.5"), + mavenBundle("org.apache.aries.spifly", "org.apache.aries.spifly.dynamic.bundle", "1.3.6"), + + mavenBundle("org.slf4j", "slf4j-api", "2.0.7"), + mavenBundle("ch.qos.logback", "logback-core", "1.3.5"), + mavenBundle("ch.qos.logback", "logback-classic", "1.3.5"), + + mavenBundle("org.apache.tika", "tika-core", "2.8.0"), + + frameworkProperty("repository.home").value("target"), + systemProperties( + systemProperty("logback.configurationFile") + .value("file:" + PathUtils.getBaseDir() + "/src/test/resources/logback-test.xml"), + new SystemPropertyOption("felix.fileinstall.dir").value(getConfigDir())), + jarBundles(), + jpmsOptions()); + } + + private Option jpmsOptions(){ + DefaultCompositeOption composite = new DefaultCompositeOption(); + if (Version.parseVersion(System.getProperty("java.specification.version")).getMajor() > 1){ + if (java.nio.file.Files.exists(java.nio.file.FileSystems.getFileSystem(URI.create("jrt:/")).getPath("modules", "java.se.ee"))){ + composite.add(vmOption("--add-modules=java.se.ee")); + } + composite.add(vmOption("--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.io=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.net=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.nio=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.jar=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.regex=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.zip=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED")); + } + return composite; + } + + private String getConfigDir(){ + return new File(new File("src", "test"), "config").getAbsolutePath(); + } + + private Option jarBundles() throws MalformedURLException { + DefaultCompositeOption composite = new DefaultCompositeOption(); + for (File bundle : new File("target", "test-bundles").listFiles()) { + if (bundle.getName().endsWith(".jar") && bundle.isFile()) { + composite.add(bundle(bundle.toURI().toURL().toString())); + } + } + return composite; + } + + @Inject + private BundleContext context; + + @Test + public void bundleStates() { + for (Bundle bundle : context.getBundles()) { + assertEquals( + String.format("Bundle %s not active. have a look at the logs", bundle.toString()), + Bundle.ACTIVE, bundle.getState()); + } + } + + @Test + public void listBundles() { + for (Bundle bundle : context.getBundles()) { + System.out.println(bundle); + } + } + + @Test + public void listServices() throws InvalidSyntaxException { + for (ServiceReference reference + : context.getAllServiceReferences(null, null)) { + System.out.println(reference); + } + } +} diff --git a/jackrabbit-it-osgi/test-bundles.xml b/jackrabbit-it-osgi/test-bundles.xml index 26f981483..be71493c5 100644 --- a/jackrabbit-it-osgi/test-bundles.xml +++ b/jackrabbit-it-osgi/test-bundles.xml @@ -31,12 +31,12 @@ javax.jcr:jcr javax.servlet:javax.servlet-api commons-io:commons-io + commons-logging:commons-logging org.apache.commons:commons-collections4 commons-fileupload:commons-fileupload org.apache.jackrabbit:jackrabbit-jcr-commons org.apache.jackrabbit:jackrabbit-spi org.apache.jackrabbit:jackrabbit-spi-commons - org.apache.tika:tika-core org.apache.httpcomponents:httpclient-osgi org.apache.httpcomponents:httpcore-osgi org.apache.jackrabbit:jackrabbit-webdav