FELIX-5164: added test that validates aspects that are using a callback instance.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1724136 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectWithCallbacksServiceDependencyTest.java b/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectWithCallbacksServiceDependencyTest.java
index c5116f2..9905aac 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectWithCallbacksServiceDependencyTest.java
+++ b/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/AspectWithCallbacksServiceDependencyTest.java
@@ -20,8 +20,11 @@
import org.apache.felix.dm.Component;
import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.itest.api.AspectBaseTest.ServiceAspect;
+import org.apache.felix.dm.itest.api.AspectBaseTest.ServiceInterface;
import org.apache.felix.dm.itest.util.Ensure;
import org.apache.felix.dm.itest.util.TestBase;
+import org.osgi.framework.ServiceReference;
/**
@@ -51,7 +54,32 @@
e.step(8);
}
- static interface ServiceInterface {
+ public void testServiceRegistrationAndConsumptionWithAspectCallbackInstance() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+ // create a service provider and consumer
+ Component sp = m.createComponent().setImplementation(new ServiceProvider(e)).setInterface(ServiceInterface.class.getName(), null);
+ Component sc = m.createComponent().setImplementation(new ServiceConsumer(e)).add(m.createServiceDependency()
+ .setService(ServiceInterface.class)
+ .setCallbacks("add", "remove")
+ .setRequired(true));
+ ServiceProviderAspect providerAspect = new ServiceProviderAspect();
+ ServiceProviderAspectCallbackInstance aspectCb = new ServiceProviderAspectCallbackInstance(providerAspect);
+ Component asp = m.createAspectService(ServiceInterface.class, null, 100, aspectCb, "add", null, "remove", "swap")
+ .setImplementation(providerAspect);
+ m.add(sp);
+ m.add(sc);
+ m.add(asp);
+ m.remove(asp);
+ m.remove(sc);
+ m.remove(sp);
+
+ // ensure we executed all steps inside the component instance
+ e.step(8);
+ }
+
+ static interface ServiceInterface {
public void invoke(String caller);
}
@@ -69,6 +97,26 @@
}
}
+ public static class ServiceProviderAspectCallbackInstance {
+ private final ServiceProviderAspect m_aspect;
+
+ ServiceProviderAspectCallbackInstance(ServiceProviderAspect aspect) {
+ m_aspect = aspect;
+ }
+
+ public void add(ServiceInterface service) {
+ m_aspect.add(service);
+ }
+
+ public void remove(ServiceInterface service) {
+ m_aspect.remove(service);
+ }
+
+ public void swap(ServiceInterface previous, ServiceInterface current) {
+ m_aspect.swap(previous, current);
+ }
+ }
+
static class ServiceProviderAspect implements ServiceInterface {
private volatile ServiceInterface m_service;