You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2009/04/29 18:35:07 UTC
svn commit: r769821 - in /felix/trunk/karaf: ./ gshell/ gshell/itests/
itests/ itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/
itests/src/test/resources/org/apache/servicemix/kernel/gshell/itests/
testing/
Author: gnodet
Date: Wed Apr 29 16:35:06 2009
New Revision: 769821
URL: http://svn.apache.org/viewvc?rev=769821&view=rev
Log:
FELIX-1099: switch from spring-dm integration tests to pax-exam
Added:
felix/trunk/karaf/itests/
- copied from r769691, felix/trunk/karaf/gshell/itests/
felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/AbstractIntegrationTest.java
Removed:
felix/trunk/karaf/gshell/itests/
felix/trunk/karaf/itests/src/test/resources/org/apache/servicemix/kernel/gshell/itests/
felix/trunk/karaf/testing/
Modified:
felix/trunk/karaf/gshell/pom.xml
felix/trunk/karaf/itests/pom.xml
felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/CoreTest.java
felix/trunk/karaf/pom.xml
Modified: felix/trunk/karaf/gshell/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/pom.xml?rev=769821&r1=769820&r2=769821&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/pom.xml (original)
+++ felix/trunk/karaf/gshell/pom.xml Wed Apr 29 16:35:06 2009
@@ -43,7 +43,6 @@
<module>gshell-log</module>
<module>gshell-config</module>
<module>gshell-packages</module>
- <module>itests</module>
</modules>
</project>
\ No newline at end of file
Modified: felix/trunk/karaf/itests/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/itests/pom.xml?rev=769821&r1=769691&r2=769821&view=diff
==============================================================================
--- felix/trunk/karaf/itests/pom.xml (original)
+++ felix/trunk/karaf/itests/pom.xml Wed Apr 29 16:35:06 2009
@@ -28,17 +28,22 @@
</parent>
<groupId>org.apache.servicemix.kernel.gshell</groupId>
- <artifactId>org.apache.servicemix.kernel.gshell.itests</artifactId>
+ <artifactId>itests</artifactId>
<packaging>jar</packaging>
<version>1.2.0-SNAPSHOT</version>
- <name>Apache ServiceMix Kernel :: GShell ITests</name>
+ <name>Apache ServiceMix Kernel :: ITests</name>
<description>
- Provides the OSGi GShell commands
+ Integration tests
</description>
<dependencies>
<dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.framework</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.servicemix.kernel.gshell</groupId>
<artifactId>org.apache.servicemix.kernel.gshell.core</artifactId>
<scope>test</scope>
@@ -59,17 +64,52 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.kernel.testing</groupId>
- <artifactId>org.apache.servicemix.kernel.testing.support</artifactId>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.junit</artifactId>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-container-default</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-junit-extender-impl</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ </dependency>
</dependencies>
+ <repositories>
+ <repository>
+ <id>ops4j.releases</id>
+ <url>http://repository.ops4j.org/maven2</url>
+ </repository>
+ <repository>
+ <id>ops4j.snapshots</id>
+ <url>http://repository.ops4j.org/mvn-snapshots</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>ops4j.releases</id>
+ <url>http://repository.ops4j.org/maven2</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
<build>
<plugins>
<plugin>
Added: felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/AbstractIntegrationTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/AbstractIntegrationTest.java?rev=769821&view=auto
==============================================================================
--- felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/AbstractIntegrationTest.java (added)
+++ felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/AbstractIntegrationTest.java Wed Apr 29 16:35:06 2009
@@ -0,0 +1,93 @@
+/*
+ * 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.servicemix.kernel.gshell.itests;
+
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Inject;
+import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.util.tracker.ServiceTracker;
+
+public abstract class AbstractIntegrationTest {
+
+ public static final long DEFAULT_TIMEOUT = 30000;
+
+ @Inject
+ protected BundleContext bundleContext;
+
+ protected <T> T getOsgiService(Class<T> type, long timeout) {
+ return getOsgiService(type, null, timeout);
+ }
+
+ protected <T> T getOsgiService(Class<T> type) {
+ return getOsgiService(type, null, DEFAULT_TIMEOUT);
+ }
+
+ protected <T> T getOsgiService(Class<T> type, String filter, long timeout) {
+ ServiceTracker tracker = null;
+ try {
+ String flt;
+ if (filter != null) {
+ if (filter.startsWith("(")) {
+ flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")" + filter + ")";
+ } else {
+ flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")(" + filter + "))";
+ }
+ } else {
+ flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
+ }
+ Filter osgiFilter = FrameworkUtil.createFilter(flt);
+ tracker = new ServiceTracker(bundleContext, osgiFilter, null);
+ tracker.open();
+ // Note that the tracker is not closed to keep the reference
+ // This is buggy, has the service reference may change i think
+ Object svc = type.cast(tracker.waitForService(timeout));
+ if (svc == null) {
+ throw new RuntimeException("Gave up waiting for service " + flt);
+ }
+ return type.cast(svc);
+ } catch (InvalidSyntaxException e) {
+ throw new IllegalArgumentException("Invalid filter", e);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected Bundle installBundle(String groupId, String artifactId) throws Exception {
+ MavenArtifactProvisionOption mvnUrl = mavenBundle(groupId, artifactId);
+ return bundleContext.installBundle(mvnUrl.getURL());
+ }
+
+ protected Bundle getInstalledBundle(String symbolicName) {
+ for (Bundle b : bundleContext.getBundles()) {
+ if (b.getSymbolicName().equals(symbolicName)) {
+ return b;
+ }
+ }
+ return null;
+ }
+
+ public static MavenArtifactProvisionOption mavenBundle(String groupId, String artifactId) {
+ return CoreOptions.mavenBundle().groupId(groupId).artifactId(artifactId).versionAsInProject();
+ }
+
+}
Modified: felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/CoreTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/CoreTest.java?rev=769821&r1=769691&r2=769821&view=diff
==============================================================================
--- felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/CoreTest.java (original)
+++ felix/trunk/karaf/itests/src/test/java/org/apache/servicemix/kernel/gshell/itests/CoreTest.java Wed Apr 29 16:35:06 2009
@@ -19,42 +19,36 @@
import org.apache.geronimo.gshell.commandline.CommandLineExecutionFailed;
import org.apache.geronimo.gshell.registry.NoSuchCommandException;
import org.apache.geronimo.gshell.shell.Shell;
-import org.apache.servicemix.kernel.testing.support.AbstractIntegrationTest;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import static org.ops4j.pax.exam.CoreOptions.felix;
+import static org.ops4j.pax.exam.CoreOptions.mavenConfiguration;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.CoreOptions.bootClasspathLibrary;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.OptionUtils;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.configProfile;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.logProfile;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.profile;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import org.osgi.framework.Bundle;
-public class CoreTest extends AbstractIntegrationTest {
-
- static {
- System.setProperty("servicemix.startLocalConsole", "false");
- System.setProperty("servicemix.startRemoteShell", "false");
- }
-
- @Override
- protected String getManifestLocation() {
- return "classpath:org/apache/servicemix/kernel/gshell/itests/MANIFEST.MF";
- }
-
- @Override
- protected String[] getTestBundlesNames() {
- return new String[] {
- getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jline"),
- getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-httpclient"),
- getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-jexl"),
- getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-vfs"),
- getBundle("org.apache.mina", "mina-core"),
- getBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.oro"),
- getBundle("org.apache.servicemix.kernel.jaas", "org.apache.servicemix.kernel.jaas.config"),
- getBundle("org.apache.sshd", "sshd-core"),
- getBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.core"),
- getBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.osgi")
- };
- }
+@RunWith(JUnit4TestRunner.class)
+public class CoreTest extends AbstractIntegrationTest{
+ @Test
public void testHelp() throws Exception {
Shell shell = getOsgiService(Shell.class);
shell.execute("help");
}
+ @Test
public void testInstallCommand() throws Exception {
Shell shell = getOsgiService(Shell.class);
@@ -66,7 +60,8 @@
assertTrue(e.getCause() instanceof NoSuchCommandException);
}
- Bundle b = installBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.log", null, "jar");
+ Bundle b = getInstalledBundle("org.apache.servicemix.kernel.gshell.log");
+ b.start();
shell.execute("log/display");
@@ -81,6 +76,7 @@
}
}
+ @Test
public void testCommandGroup() throws Exception {
Shell shell = getOsgiService(Shell.class);
shell.execute("osgi");
@@ -88,30 +84,31 @@
shell.execute("..");
}
- public void testInstallFeature() throws Exception {
- Shell shell = getOsgiService(Shell.class);
-
- try {
- shell.execute("obr");
- fail("command should not exist");
- } catch (CommandLineExecutionFailed e) {
- assertNotNull(e.getCause());
- assertTrue(e.getCause() instanceof NoSuchCommandException);
- }
- try {
- shell.execute("wrapper");
- fail("command should not exist");
- } catch (CommandLineExecutionFailed e) {
- assertNotNull(e.getCause());
- assertTrue(e.getCause() instanceof NoSuchCommandException);
- }
- String url = getClass().getClassLoader().getResource("features.xml").toString();
- addFeatureRepo(url);
- installFeature("obr");
- installFeature("wrapper");
- shell.execute("obr");
- shell.execute("wrapper");
- }
+// @Test
+// public void testInstallFeature() throws Exception {
+// Shell shell = getOsgiService(Shell.class);
+//
+// try {
+// shell.execute("obr");
+// fail("command should not exist");
+// } catch (CommandLineExecutionFailed e) {
+// assertNotNull(e.getCause());
+// assertTrue(e.getCause() instanceof NoSuchCommandException);
+// }
+// try {
+// shell.execute("wrapper");
+// fail("command should not exist");
+// } catch (CommandLineExecutionFailed e) {
+// assertNotNull(e.getCause());
+// assertTrue(e.getCause() instanceof NoSuchCommandException);
+// }
+// String url = getClass().getClassLoader().getResource("features.xml").toString();
+// addFeatureRepo(url);
+// installFeature("obr");
+// installFeature("wrapper");
+// shell.execute("obr");
+// shell.execute("wrapper");
+// }
/**
* TODO: This test seems to fail, there must be a timing issue somewhere
@@ -125,5 +122,48 @@
}
*/
+ @Configuration
+ public static Option[] configuration() {
+ Option[] options = options(
+ // install log service using pax runners profile abstraction (there are more profiles, like DS)
+ logProfile(),
+ configProfile(),
+ profile("spring.dm").version("1.2.0-rc1"),
+
+ // this is how you set the default log level when using pax logging (logProfile)
+ systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
+ systemProperty("servicemix.name").value("root"),
+ systemProperty("servicemix.base").value("target/smx.base"),
+ systemProperty("servicemix.startLocalConsole").value("false"),
+ systemProperty("servicemix.startRemoteShell").value("false"),
+
+ // hack system packages
+ systemPackages("org.apache.servicemix.kernel.main.spi;version=1.0.0", "org.apache.servicemix.kernel.jaas.boot"),
+ bootClasspathLibrary(mavenBundle("org.apache.servicemix.kernel.jaas", "org.apache.servicemix.kernel.jaas.boot")).afterFramework(),
+ bootClasspathLibrary(mavenBundle("org.apache.servicemix.kernel", "org.apache.servicemix.kernel.main")).afterFramework(),
+
+ // Bundles
+ mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jline"),
+ mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-httpclient"),
+ mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-jexl"),
+ mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-vfs"),
+ mavenBundle("org.apache.mina", "mina-core"),
+ mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.oro"),
+ mavenBundle("org.apache.servicemix.kernel.jaas", "org.apache.servicemix.kernel.jaas.config"),
+ mavenBundle("org.apache.sshd", "sshd-core"),
+ mavenBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.core"),
+ mavenBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.osgi"),
+ mavenBundle("org.apache.servicemix.kernel.gshell", "org.apache.servicemix.kernel.gshell.log").noStart(),
+
+ felix()
+ );
+
+ // use config generated by the Maven plugin (until PAXEXAM-62/64 get resolved)
+ if (CoreTest.class.getClassLoader().getResource("META-INF/maven/paxexam-config.args") != null) {
+ options = OptionUtils.combine(options, mavenConfiguration());
+ }
+
+ return options;
+ }
}
Modified: felix/trunk/karaf/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/pom.xml?rev=769821&r1=769820&r2=769821&view=diff
==============================================================================
--- felix/trunk/karaf/pom.xml (original)
+++ felix/trunk/karaf/pom.xml Wed Apr 29 16:35:06 2009
@@ -39,10 +39,10 @@
<module>filemonitor</module>
<module>gshell</module>
<module>spring</module>
- <module>testing</module>
<module>jaas</module>
<module>client</module>
<module>management</module>
+ <module>itests</module>
<module>assembly</module>
<module>demos</module>
</modules>
@@ -92,6 +92,7 @@
<log4j.version>1.2.14</log4j.version>
<mina.version>2.0.0-M5</mina.version>
<oro.version>2.0.8_1</oro.version>
+ <pax.exam.version>0.5.0</pax.exam.version>
<pax.logging.version>1.3.0</pax.logging.version>
<pax.url.version>0.3.3</pax.url.version>
<servicemix.legal.version>1.0</servicemix.legal.version>
@@ -787,6 +788,26 @@
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam</artifactId>
+ <version>${pax.exam.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-junit</artifactId>
+ <version>${pax.exam.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-container-default</artifactId>
+ <version>${pax.exam.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-junit-extender-impl</artifactId>
+ <version>${pax.exam.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>