@@ -66,7 +69,6 @@
org.apache.felix
org.apache.felix.framework
- ${karaf.felix.version}
provided
diff --git a/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedContainerConfiguration.java b/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedContainerConfiguration.java
index b8c44673..85ebe314 100644
--- a/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedContainerConfiguration.java
+++ b/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedContainerConfiguration.java
@@ -20,7 +20,6 @@
import org.jboss.arquillian.container.osgi.OSGiContainerConfiguration;
import org.jboss.arquillian.container.spi.ConfigurationException;
-import org.jboss.osgi.metadata.spi.NotNullException;
/**
* KarafContainerConfiguration
@@ -52,7 +51,9 @@ public void setKarafBeginningStartLevel(Integer startLevel) {
public void validate() throws ConfigurationException {
super.validate();
- NotNullException.assertValue(karafHome, "karafHome");
+ if (karafHome == null) {
+ throw new IllegalArgumentException("Null " + "karafHome");
+ }
File karafHomeDir = new File(karafHome);
if (!karafHomeDir.isDirectory())
throw new IllegalStateException("Not a valid Karaf home dir: " + karafHomeDir);
diff --git a/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedDeployableContainer.java b/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedDeployableContainer.java
index 98663ecf..686aa8a6 100644
--- a/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedDeployableContainer.java
+++ b/container/karaf/embedded/src/main/java/org/jboss/arquillian/container/osgi/karaf/embedded/KarafEmbeddedDeployableContainer.java
@@ -26,8 +26,9 @@
import org.osgi.framework.BundleException;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.ServiceReference;
import org.osgi.framework.launch.Framework;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
+import org.osgi.service.startlevel.StartLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -120,13 +121,14 @@ public void log(Level level, String message, Throwable th) {
protected void awaitKarafBeginningStartLevel(final BundleContext syscontext, final Integer beginningStartLevel, long timeout, TimeUnit unit) {
final CountDownLatch latch = new CountDownLatch(1);
- final FrameworkStartLevel fwrkStartLevel = syscontext.getBundle().adapt(FrameworkStartLevel.class);
+ ServiceReference sref = syscontext.getServiceReference(StartLevel.class.getName());
+ final StartLevel startLevel = (StartLevel) syscontext.getService(sref);
FrameworkListener listener = new FrameworkListener() {
@Override
public void frameworkEvent(FrameworkEvent event) {
if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
- int startLevel = fwrkStartLevel.getStartLevel();
- if (startLevel == beginningStartLevel) {
+ int startLevelVal = startLevel.getStartLevel();
+ if (startLevelVal == beginningStartLevel) {
latch.countDown();
}
}
@@ -134,8 +136,8 @@ public void frameworkEvent(FrameworkEvent event) {
};
syscontext.addFrameworkListener(listener);
try {
- int startLevel = fwrkStartLevel.getStartLevel();
- if (startLevel < beginningStartLevel) {
+ int startLevelVal = startLevel.getStartLevel();
+ if (startLevelVal < beginningStartLevel) {
try {
if (!latch.await(timeout, unit))
throw new IllegalStateException("Giving up waiting to reach start level: " + beginningStartLevel);
diff --git a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/ArquillianDeployerTestCase.java b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/ArquillianDeployerTestCase.java
index dfe808f2..0262a88f 100644
--- a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/ArquillianDeployerTestCase.java
+++ b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/ArquillianDeployerTestCase.java
@@ -42,12 +42,12 @@
@RunWith(Arquillian.class)
public class ArquillianDeployerTestCase {
- private static final String GOOD_BUNDLE = "good-bundle";
- private static final String BAD_BUNDLE = "bad-bundle";
+ private static final String GOOD_BUNDLE = "good-bundle.jar";
+ private static final String BAD_BUNDLE = "bad-bundle.jar";
@Deployment
public static JavaArchive create() {
- return ShrinkWrap.create(JavaArchive.class, "deployer-tests");
+ return ShrinkWrap.create(JavaArchive.class, "deployer-tests.jar");
}
@ArquillianResource
@@ -147,7 +147,7 @@ public InputStream openStream() {
OSGiManifestBuilder builder = OSGiManifestBuilder.newInstance();
builder.addBundleSymbolicName(BAD_BUNDLE);
builder.addBundleManifestVersion(2);
- builder.addImportPackage("org.acme.foo");
+ builder.addImportPackages("org.acme.foo");
return builder.openStream();
}
});
diff --git a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/MultipleBundleDeploymentsTestCase.java b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/MultipleBundleDeploymentsTestCase.java
index 6928d0a9..4f54b931 100644
--- a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/MultipleBundleDeploymentsTestCase.java
+++ b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/MultipleBundleDeploymentsTestCase.java
@@ -31,7 +31,7 @@
import org.junit.runner.RunWith;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.wiring.FrameworkWiring;
+import org.osgi.service.packageadmin.PackageAdmin;
/**
* Test multiple bundle deployments
@@ -42,23 +42,26 @@
@RunWith(Arquillian.class)
public class MultipleBundleDeploymentsTestCase {
- static final String BUNDLE_A = "bundle-a";
- static final String BUNDLE_B = "bundle-b";
+ static final String BUNDLE_A = "bundle-a.jar";
+ static final String BUNDLE_B = "bundle-b.jar";
@ArquillianResource
BundleContext context;
+ @ArquillianResource
+ PackageAdmin packageAdmin;
+
@Deployment
public static Archive> deployment() {
// The default deployment is needed if we don't want to @RunAsClient
- final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests");
+ final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests.jar");
archive.setManifest(new Asset() {
@Override
public InputStream openStream() {
OSGiManifestBuilder builder = OSGiManifestBuilder.newInstance();
builder.addBundleSymbolicName(archive.getName());
builder.addBundleManifestVersion(2);
- builder.addImportPackages(FrameworkWiring.class);
+ builder.addImportPackages(PackageAdmin.class);
return builder.openStream();
}
});
@@ -97,10 +100,10 @@ public InputStream openStream() {
@Test
public void testBundleDeployments() throws Exception {
- Bundle bundleA = context.getBundle(BUNDLE_A);
+ Bundle bundleA = packageAdmin.getBundles(BUNDLE_A, null)[0];
Assert.assertEquals("Bundle INSTALLED", Bundle.INSTALLED, bundleA.getState());
- Bundle bundleB = context.getBundle(BUNDLE_B);
+ Bundle bundleB = packageAdmin.getBundles(BUNDLE_B, null)[0];
Assert.assertEquals("Bundle INSTALLED", Bundle.INSTALLED, bundleB.getState());
}
}
diff --git a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/OperateOnDeploymentTestCase.java b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/OperateOnDeploymentTestCase.java
index 22292ed7..f970a65e 100644
--- a/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/OperateOnDeploymentTestCase.java
+++ b/container/karaf/embedded/src/test/java/org/jboss/test/arquillian/container/karaf/embedded/OperateOnDeploymentTestCase.java
@@ -41,13 +41,13 @@
@RunWith(Arquillian.class)
public class OperateOnDeploymentTestCase {
- static final String BUNDLE_A = "bundle-a";
- static final String BUNDLE_B = "bundle-b";
+ static final String BUNDLE_A = "bundle-a.jar";
+ static final String BUNDLE_B = "bundle-b.jar";
@Deployment
public static Archive> deployment() {
// The default deployment is needed if we don't want to @RunAsClient
- final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests");
+ final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests.jar");
archive.setManifest(new Asset() {
@Override
public InputStream openStream() {
diff --git a/container/karaf/managed/src/main/java/org/jboss/arquillian/container/osgi/karaf/managed/KarafManagedDeployableContainer.java b/container/karaf/managed/src/main/java/org/jboss/arquillian/container/osgi/karaf/managed/KarafManagedDeployableContainer.java
index 4630866d..51aa1d78 100644
--- a/container/karaf/managed/src/main/java/org/jboss/arquillian/container/osgi/karaf/managed/KarafManagedDeployableContainer.java
+++ b/container/karaf/managed/src/main/java/org/jboss/arquillian/container/osgi/karaf/managed/KarafManagedDeployableContainer.java
@@ -228,9 +228,13 @@ public boolean accept(File dir, String name) {
awaitKarafBeginningStartLevel(beginningStartLevel, 30, TimeUnit.SECONDS);
// Await the bootstrap complete marker service to become available
- String completeService = config.getBootstrapCompleteService();
- if (completeService != null)
- awaitBootstrapCompleteService(completeService, 30, TimeUnit.SECONDS);
+ String completeServices = config.getBootstrapCompleteService();
+ if (completeServices != null) {
+ List completeServicesList = Arrays.asList(completeServices.split(","));
+ for (String completeService : completeServicesList) {
+ awaitBootstrapCompleteService(completeService, 30, TimeUnit.SECONDS);
+ }
+ }
} catch (RuntimeException rte) {
destroyKarafProcess();
@@ -273,11 +277,14 @@ public void undeploy(Archive> archive) throws DeploymentException {
String bundleState = null;
try {
long bundleId = handle.getBundleId();
- CompositeData bundleType = bundleStateMBean.getBundle(bundleId);
+ CompositeData bundleType = getBundle(bundleId);
if (bundleType != null) {
bundleState = (String) bundleType.get(BundleStateMBean.STATE);
}
} catch (IOException e) {
+ // ignore if the operation fails
+ return;
+ } catch (IllegalArgumentException e) {
// ignore non-existent bundle
return;
}
@@ -426,7 +433,7 @@ private void awaitKarafBeginningStartLevel(final Integer beginningStartLevel, lo
private void awaitBootstrapCompleteService(String serviceName, long timeout, TimeUnit unit) throws TimeoutException, InterruptedException, IOException {
long timeoutMillis = System.currentTimeMillis() + unit.toMillis(timeout);
while (System.currentTimeMillis() < timeoutMillis) {
- TabularData list = serviceStateMBean.listServices(serviceName, null);
+ TabularData list = listServices(serviceName);
if (list.size() > 0) {
return;
} else {
@@ -493,6 +500,33 @@ private List listBundles(String symbolicName) throws IOException {
return bundleList;
}
+ private CompositeData getBundle(long bundleIdentifier) throws IOException {
+ TabularData listBundles = bundleStateMBean.listBundles();
+ Iterator> iterator = listBundles.values().iterator();
+ while (iterator.hasNext()) {
+ CompositeData bundleType = (CompositeData) iterator.next();
+ Long bundleId = (Long) bundleType.get(BundleStateMBean.IDENTIFIER);
+ if (bundleId.longValue() == bundleIdentifier) {
+ return bundleType;
+ }
+ }
+ throw new IllegalArgumentException("Indicated bundle (id=" + bundleIdentifier + ") does not exist");
+ }
+
+ private TabularData listServices(String clazz) throws IOException {
+ TabularData list = serviceStateMBean.listServices();
+ Iterator> iterator = list.values().iterator();
+ while (iterator.hasNext()) {
+ CompositeData serviceType = (CompositeData) iterator.next();
+ String [] serviceIntfsArray = (String []) serviceType.get(ServiceStateMBean.OBJECT_CLASS);
+ List serviceIntfsList = Arrays.asList(serviceIntfsArray);
+ if (!serviceIntfsList.contains(clazz)) {
+ iterator.remove();
+ }
+ }
+ return list;
+ }
+
static class BundleHandle {
private long bundleId;
private String symbolicName;
diff --git a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/ArquillianDeployerTestCase.java b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/ArquillianDeployerTestCase.java
index d2b03324..ab9a221b 100644
--- a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/ArquillianDeployerTestCase.java
+++ b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/ArquillianDeployerTestCase.java
@@ -42,12 +42,12 @@
@RunWith(Arquillian.class)
public class ArquillianDeployerTestCase {
- private static final String GOOD_BUNDLE = "good-bundle";
- private static final String BAD_BUNDLE = "bad-bundle";
+ private static final String GOOD_BUNDLE = "good-bundle.jar";
+ private static final String BAD_BUNDLE = "bad-bundle.jar";
@Deployment
public static JavaArchive create() {
- return ShrinkWrap.create(JavaArchive.class, "deployer-tests");
+ return ShrinkWrap.create(JavaArchive.class, "deployer-tests.jar");
}
@ArquillianResource
@@ -147,7 +147,7 @@ public InputStream openStream() {
OSGiManifestBuilder builder = OSGiManifestBuilder.newInstance();
builder.addBundleSymbolicName(BAD_BUNDLE);
builder.addBundleManifestVersion(2);
- builder.addImportPackage("org.acme.foo");
+ builder.addImportPackages("org.acme.foo");
return builder.openStream();
}
});
diff --git a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/MultipleBundleDeploymentsTestCase.java b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/MultipleBundleDeploymentsTestCase.java
index c6a1ed16..b448a40f 100644
--- a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/MultipleBundleDeploymentsTestCase.java
+++ b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/MultipleBundleDeploymentsTestCase.java
@@ -31,7 +31,8 @@
import org.junit.runner.RunWith;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.wiring.FrameworkWiring;
+import org.osgi.service.packageadmin.PackageAdmin;
+
/**
* Test multiple bundle deployments
@@ -42,23 +43,26 @@
@RunWith(Arquillian.class)
public class MultipleBundleDeploymentsTestCase {
- static final String BUNDLE_A = "bundle-a";
- static final String BUNDLE_B = "bundle-b";
+ static final String BUNDLE_A = "bundle-a.jar";
+ static final String BUNDLE_B = "bundle-b.jar";
@ArquillianResource
BundleContext context;
+ @ArquillianResource
+ PackageAdmin packageAdmin;
+
@Deployment
public static Archive> deployment() {
// The default deployment is needed if we don't want to @RunAsClient
- final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests");
+ final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests.jar");
archive.setManifest(new Asset() {
@Override
public InputStream openStream() {
OSGiManifestBuilder builder = OSGiManifestBuilder.newInstance();
builder.addBundleSymbolicName(archive.getName());
builder.addBundleManifestVersion(2);
- builder.addImportPackages(FrameworkWiring.class);
+ builder.addImportPackages(PackageAdmin.class);
return builder.openStream();
}
});
@@ -97,10 +101,10 @@ public InputStream openStream() {
@Test
public void testBundleDeployments() throws Exception {
- Bundle bundleA = context.getBundle(BUNDLE_A);
+ Bundle bundleA = packageAdmin.getBundles(BUNDLE_A, null)[0];
Assert.assertEquals("Bundle INSTALLED", Bundle.INSTALLED, bundleA.getState());
- Bundle bundleB = context.getBundle(BUNDLE_B);
+ Bundle bundleB = packageAdmin.getBundles(BUNDLE_B, null)[0];
Assert.assertEquals("Bundle INSTALLED", Bundle.INSTALLED, bundleB.getState());
}
}
diff --git a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/OperateOnDeploymentTestCase.java b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/OperateOnDeploymentTestCase.java
index 83638a74..996244a9 100644
--- a/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/OperateOnDeploymentTestCase.java
+++ b/container/karaf/managed/src/test/java/org/jboss/test/arquillian/container/karaf/managed/OperateOnDeploymentTestCase.java
@@ -41,13 +41,13 @@
@RunWith(Arquillian.class)
public class OperateOnDeploymentTestCase {
- static final String BUNDLE_A = "bundle-a";
- static final String BUNDLE_B = "bundle-b";
+ static final String BUNDLE_A = "bundle-a.jar";
+ static final String BUNDLE_B = "bundle-b.jar";
@Deployment
public static Archive> deployment() {
// The default deployment is needed if we don't want to @RunAsClient
- final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests");
+ final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "multiple-tests.jar");
archive.setManifest(new Asset() {
@Override
public InputStream openStream() {
diff --git a/pom.xml b/pom.xml
index 6bf1d541..15fd36ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,22 +25,22 @@
- 4.2.1
- 2.3.3
+ 3.2.2
+ 2.2.11
1.1.2.Final
3.1.3.GA
1.4.1.Final
- 3.0.3.Final
- 4.0.0.CR1
- 4.0.0.Final
- 2.0.0.Final
+ 2.1.2.Final
+ 2.2.0.Final
+ 3.2.0.Final
+ 1.2.1.Final
1.1.2
2.0.0
4.11
1.8.4
- 5.0.0
+ 4.2.0
1.5.11
- 3.7.1
+ 3.6.0.v20100517
diff --git a/protocol/pom.xml b/protocol/pom.xml
index 59e28856..4bc6c72f 100644
--- a/protocol/pom.xml
+++ b/protocol/pom.xml
@@ -66,6 +66,11 @@
slf4j-log4j12
test
+
+ org.jboss.logging
+ jboss-logging
+ test
+
diff --git a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherExtension.java b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherExtension.java
index 30c4b9d8..8052176b 100644
--- a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherExtension.java
+++ b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherExtension.java
@@ -34,6 +34,8 @@ public void register(ExtensionBuilder builder) {
builder.service(TestEnricher.class, OSGiTestEnricher.class);
builder.service(AuxiliaryArchiveAppender.class, OSGiAuxiliaryArchiveAppender.class);
builder.service(ResourceProvider.class, BundleContextProvider.class);
+ builder.service(ResourceProvider.class, StartLevelProvider.class);
+ builder.service(ResourceProvider.class, PackageAdminProvider.class);
builder.service(ResourceProvider.class, BundleProvider.class);
}
}
diff --git a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherRemoteExtension.java b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherRemoteExtension.java
index 1d9658e8..ee4dae03 100644
--- a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherRemoteExtension.java
+++ b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiEnricherRemoteExtension.java
@@ -35,6 +35,8 @@ public void register(ExtensionBuilder builder) {
if(Validate.classExists("org.osgi.framework.Bundle")) {
builder.service(TestEnricher.class, OSGiTestEnricher.class);
builder.service(ResourceProvider.class, BundleContextProvider.class);
+ builder.service(ResourceProvider.class, StartLevelProvider.class);
+ builder.service(ResourceProvider.class, PackageAdminProvider.class);
builder.service(ResourceProvider.class, BundleProvider.class);
}
}
diff --git a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiTestEnricher.java b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiTestEnricher.java
index d0080411..c45d18df 100644
--- a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiTestEnricher.java
+++ b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/OSGiTestEnricher.java
@@ -16,27 +16,44 @@
*/
package org.jboss.arquillian.testenricher.osgi;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.osgi.StartLevelAware;
import org.jboss.arquillian.test.spi.TestEnricher;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.BundleReference;
-import org.osgi.framework.startlevel.BundleStartLevel;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.service.startlevel.StartLevel;
/**
* The OSGi TestEnricher
*
- * The enricher supports start level aware bundle deployments.
+ * The enricher supports following injections and annotations:
*
*
*
+ @Inject
+ BundleContext context;
+
+ @Inject
+ Bundle bundle;
+
+ @Inject
+ StartLevel startLevel;
+
+ @Inject
+ PackageAdmin packageAdmin;
+
@Deployment
- @StartLevelAware(startLevel = 3)
+ @StartLevelAware(startLevel = 3, autostart = true)
public static JavaArchive create() {
final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "start-level-bundle");
...
@@ -54,8 +71,28 @@ public class OSGiTestEnricher implements TestEnricher {
@Override
public void enrich(Object testCase) {
- // Process {@link StartLevelAware} on the {@link Deployment}
+ BundleContext bundleContext = BundleContextProvider.getBundleContext();
+ if (bundleContext == null) {
+ log.fine("System bundle context not available");
+ return;
+ }
+
Class extends Object> testClass = testCase.getClass();
+ for (Field field : testClass.getDeclaredFields()) {
+ if (field.isAnnotationPresent(Inject.class)) {
+ if (field.getType().isAssignableFrom(BundleContext.class)) {
+ injectBundleContext(testCase, field);
+ } else if (field.getType().isAssignableFrom(Bundle.class)) {
+ injectBundle(testCase, field);
+ } else if (field.getType().isAssignableFrom(PackageAdmin.class)) {
+ injectPackageAdmin(testCase, field);
+ } else if (field.getType().isAssignableFrom(StartLevel.class)) {
+ injectStartLevel(testCase, field);
+ }
+ }
+ }
+
+ // Process {@link StartLevelAware} on the {@link Deployment}
for (Method method : testClass.getDeclaredMethods()) {
if (method.isAnnotationPresent(Deployment.class)) {
Deployment andep = method.getAnnotation(Deployment.class);
@@ -65,8 +102,8 @@ public void enrich(Object testCase) {
if (bundle != null) {
int bundleStartLevel = startLevelAware.startLevel();
log.fine("Setting bundle start level of " + bundle + " to: " + bundleStartLevel);
- BundleStartLevel startLevel = bundle.adapt(BundleStartLevel.class);
- startLevel.setStartLevel(bundleStartLevel);
+ StartLevel startLevel = getStartLevel();
+ startLevel.setBundleStartLevel(bundle, bundleStartLevel);
if (startLevelAware.autostart()) {
try {
bundle.start();
@@ -85,6 +122,60 @@ public Object[] resolve(Method method) {
return null;
}
+ private void injectBundleContext(Object testCase, Field field) {
+ try {
+ BundleContext context = BundleContextProvider.getBundleContext();
+ log.warning("Deprecated @Inject BundleContext, use @ArquillianResource BundleContext");
+ field.set(testCase, context);
+ } catch (IllegalAccessException ex) {
+ throw new IllegalStateException("Cannot inject BundleContext", ex);
+ }
+ }
+
+ private void injectBundle(Object testCase, Field field) {
+ try {
+ Bundle bundle = getBundle(testCase);
+ log.warning("Deprecated @Inject Bundle, use @ArquillianResource Bundle");
+ field.set(testCase, bundle);
+ } catch (IllegalAccessException ex) {
+ throw new IllegalStateException("Cannot inject Bundle", ex);
+ }
+ }
+
+ private void injectPackageAdmin(Object testCase, Field field) {
+ try {
+ PackageAdmin packageAdmin = getPackageAdmin();
+ log.warning("Deprecated @Inject PackageAdmin, use @ArquillianResource PackageAdmin");
+ field.set(testCase, packageAdmin);
+ } catch (IllegalAccessException ex) {
+ throw new IllegalStateException("Cannot inject PackageAdmin", ex);
+ }
+ }
+
+ private void injectStartLevel(Object testCase, Field field) {
+ try {
+ StartLevel startLevel = getStartLevel();
+ log.warning("Deprecated @Inject StartLevel, use @ArquillianResource StartLevel");
+ field.set(testCase, startLevel);
+ } catch (IllegalAccessException ex) {
+ throw new IllegalStateException("Cannot inject StartLevel", ex);
+ }
+ }
+
+ private PackageAdmin getPackageAdmin() {
+ BundleContext context = BundleContextProvider.getBundleContext();
+ ServiceReference sref = context.getServiceReference(PackageAdmin.class.getName());
+ PackageAdmin packageAdmin = (PackageAdmin) context.getService(sref);
+ return packageAdmin;
+ }
+
+ private StartLevel getStartLevel() {
+ BundleContext context = BundleContextProvider.getBundleContext();
+ ServiceReference sref = context.getServiceReference(StartLevel.class.getName());
+ StartLevel startLevel = (StartLevel) context.getService(sref);
+ return startLevel;
+ }
+
private Bundle getBundle(Object testCase) {
// [ARQ-459] Allow TestRunner to TestEnricher communication
Bundle bundle = BundleAssociation.getBundle();
diff --git a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/PackageAdminProvider.java b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/PackageAdminProvider.java
new file mode 100644
index 00000000..bb3e8750
--- /dev/null
+++ b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/PackageAdminProvider.java
@@ -0,0 +1,75 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2011, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.jboss.arquillian.testenricher.osgi;
+
+import java.lang.annotation.Annotation;
+import org.jboss.arquillian.container.test.impl.enricher.resource.OperatesOnDeploymentAwareProvider;
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+/**
+* {@link OperatesOnDeploymentAwareProvider} implementation to
+* provide {@link PackageAdmin} injection to {@link ArquillianResource}-
+* annotated fields.
+*
+* @author Thomas.Diesler@jboss.com
+* @since 15-Oct-2012
+*/
+public class PackageAdminProvider implements ResourceProvider {
+
+ @Inject
+ @SuiteScoped
+ private InstanceProducer packageAdminProducer;
+
+ @Inject
+ private Instance packageAdmin;
+
+ @Override
+ public boolean canProvide(final Class> type) {
+ return type.isAssignableFrom(PackageAdmin.class);
+ }
+
+ @Override
+ public Object lookup(ArquillianResource resource, Annotation... qualifiers) {
+ initialize();
+ return packageAdmin.get();
+ }
+
+ private void initialize() {
+ BundleContext syscontext = BundleContextProvider.getBundleContext();
+ PackageAdmin service = getPackageAdmin(syscontext);
+ if (service != null) {
+ packageAdminProducer.set(service);
+ }
+ }
+
+ private PackageAdmin getPackageAdmin(BundleContext syscontext) {
+ PackageAdmin result = null;
+ if (syscontext != null) {
+ ServiceReference sref = syscontext.getServiceReference(PackageAdmin.class.getName());
+ result = (PackageAdmin) syscontext.getService(sref);
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/StartLevelProvider.java b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/StartLevelProvider.java
new file mode 100644
index 00000000..6a1d2207
--- /dev/null
+++ b/testenricher/src/main/java/org/jboss/arquillian/testenricher/osgi/StartLevelProvider.java
@@ -0,0 +1,74 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2011, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.jboss.arquillian.testenricher.osgi;
+
+import java.lang.annotation.Annotation;
+import org.jboss.arquillian.container.test.impl.enricher.resource.OperatesOnDeploymentAwareProvider;
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.startlevel.StartLevel;
+
+/**
+* {@link OperatesOnDeploymentAwareProvider} implementation to provide {@link ManagementClient} injection to
+* {@link ArquillianResource}- annotated fields.
+*
+* @author Thomas.Diesler@jboss.com
+* @since 15-Oct-2012
+*/
+public class StartLevelProvider implements ResourceProvider {
+
+ @Inject
+ @SuiteScoped
+ private InstanceProducer startLevelProducer;
+
+ @Inject
+ private Instance startLevel;
+
+ @Override
+ public boolean canProvide(final Class> type) {
+ return type.isAssignableFrom(StartLevel.class);
+ }
+
+ @Override
+ public Object lookup(ArquillianResource resource, Annotation... qualifiers) {
+ initialize();
+ return startLevel.get();
+ }
+
+ private void initialize() {
+ BundleContext syscontext = BundleContextProvider.getBundleContext();
+ StartLevel service = getStartLevel(syscontext);
+ if (service != null) {
+ startLevelProducer.set(service);
+ }
+ }
+
+ private StartLevel getStartLevel(BundleContext syscontext) {
+ StartLevel result = null;
+ if (syscontext != null) {
+ ServiceReference sref = syscontext.getServiceReference(StartLevel.class.getName());
+ result = (StartLevel) syscontext.getService(sref);
+ }
+ return result;
+ }
+}
\ No newline at end of file