use of org.apache.felix.dm.itest.util.Ensure in project felix by apache.
the class ResourceAdapterTest method testBasicResourceAdapter.
public void testBasicResourceAdapter() throws Exception {
DependencyManager m = getDM();
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a resource provider
ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"));
// activate it
m.add(m.createComponent().setImplementation(provider).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
// create a resource adapter for our single resource
// note that we can provide an actual implementation instance here because there will be only one
// adapter, normally you'd want to specify a Class here
m.add(m.createResourceAdapterService("(&(path=/path/to/*.txt)(host=localhost))", false, null, "changed").setImplementation(new ResourceAdapter(e)));
// wait until the single resource is available
e.waitForStep(3, 5000);
// trigger a 'change' in our resource
provider.change();
// wait until the changed callback is invoked
e.waitForStep(4, 5000);
m.clear();
}
use of org.apache.felix.dm.itest.util.Ensure in project felix by apache.
the class ResourceDependencyTest method testResourceDependency.
public void testResourceDependency() throws MalformedURLException {
DependencyManager m = getDM();
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
// create a service provider and consumer
ResourceConsumer c = new ResourceConsumer(e);
Component consumer = m.createComponent().setImplementation(c).add(m.createResourceDependency().setFilter("(&(path=/path/to/*.txt)(host=localhost))").setCallbacks("add", "change", "remove"));
Component dynamicProxyConsumer = m.createComponent().setFactory(new ResourceConsumerFactory(e), "create").add(m.createResourceDependency().setFilter("(path=*.doc)").setCallbacks("add", null));
ResourceProvider provider = new ResourceProvider(context, new URL("file://localhost/path/to/file1.txt"), new URL("file://localhost/path/to/file2.txt"), new URL("file://localhost/path/to/file3.doc"));
Component resourceProvider = m.createComponent().setImplementation(provider).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove"));
// first add the consumer
m.add(consumer);
// then the resource provider, which will provide 3 resources,
// 2 of which match the consumers filter conditions
m.add(resourceProvider);
// make sure our consumer invoked openStream() on both resources,
// increasing the step counter to 2
e.step(3);
// now add another consumer, that matches only one resource, and uses
// a dynamic proxy as its implementation
m.add(dynamicProxyConsumer);
// ensure the resource was injected properly
e.waitForStep(4, 5000);
// now change a resource and see if it gets propagated to the consumer
provider.change(0);
// wait for change callback
e.waitForStep(5, 5000);
e.step(6);
// cleanup
m.remove(dynamicProxyConsumer);
m.remove(resourceProvider);
m.remove(consumer);
// validate that all consumed resources are "unconsumed" again
c.ensure();
m.clear();
}
use of org.apache.felix.dm.itest.util.Ensure in project felix by apache.
the class ServiceDependencyCallbackSignaturesTest method testDependencyCallbackSignatures.
/**
* Tests if all possible dependency callbacks signatures supported by ServiceDependency.
*/
public void testDependencyCallbackSignatures() {
DependencyManager m = getDM();
m_ensure = new Ensure();
Hashtable<String, String> props = new Hashtable<>();
props.put("foo", "bar");
Component provider = m.createComponent().setImplementation(new ProviderImpl()).setInterface(Provider.class.getName(), props);
declareConsumer(m, new Object() {
void bind(Component c, ServiceReference ref, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("bar", ref.getProperty("foo"));
Assert.assertEquals(context.getService(ref), provider);
m_ensure.step();
}
void change(Component c, ServiceReference ref, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", ref.getProperty("foo"));
Assert.assertEquals(context.getService(ref), provider);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c, ServiceReference ref, Object provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertEquals("bar", ref.getProperty("foo"));
Assert.assertNotNull(provider);
Assert.assertEquals(context.getService(ref), provider);
m_ensure.step();
}
void change(Component c, ServiceReference ref, Object provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertEquals("zoo", ref.getProperty("foo"));
Assert.assertNotNull(provider);
Assert.assertEquals(context.getService(ref), provider);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c, ServiceReference ref) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertEquals("bar", ref.getProperty("foo"));
Assert.assertNotNull(context.getService(ref));
Assert.assertEquals(context.getService(ref).getClass(), ProviderImpl.class);
m_ensure.step();
}
void change(Component c, ServiceReference ref) {
Assert.assertNotNull(c);
Assert.assertNotNull(ref);
Assert.assertEquals("zoo", ref.getProperty("foo"));
Assert.assertNotNull(context.getService(ref));
Assert.assertEquals(context.getService(ref).getClass(), ProviderImpl.class);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(provider);
m_ensure.step();
}
void change(Component c, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(provider);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c, Object provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(provider);
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
void change(Component c, Object provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(provider);
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c) {
Assert.assertNotNull(c);
m_ensure.step();
}
void change(Component c) {
Assert.assertNotNull(c);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Component c, Map<String, String> props, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(props);
Assert.assertNotNull(provider);
Assert.assertEquals("bar", props.get("foo"));
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
void change(Component c, Map<String, String> props, Provider provider) {
Assert.assertNotNull(c);
Assert.assertNotNull(props);
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", props.get("foo"));
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(ServiceReference ref, Provider provider) {
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("bar", ref.getProperty("foo"));
m_ensure.step();
}
void change(ServiceReference ref, Provider provider) {
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", ref.getProperty("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(ServiceReference ref, Object provider) {
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("bar", ref.getProperty("foo"));
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
void change(ServiceReference ref, Object provider) {
Assert.assertNotNull(ref);
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", ref.getProperty("foo"));
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(ServiceReference ref) {
Assert.assertNotNull(ref);
Assert.assertEquals("bar", ref.getProperty("foo"));
m_ensure.step();
}
void change(ServiceReference ref) {
Assert.assertNotNull(ref);
Assert.assertEquals("zoo", ref.getProperty("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Provider provider) {
Assert.assertNotNull(provider);
m_ensure.step();
}
void change(Provider provider) {
Assert.assertNotNull(provider);
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Provider provider, Map<?, ?> props) {
Assert.assertNotNull(provider);
Assert.assertEquals("bar", props.get("foo"));
m_ensure.step();
}
void change(Provider provider, Map<?, ?> props) {
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", props.get("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Map<?, ?> props, Provider provider) {
Assert.assertNotNull(provider);
Assert.assertEquals("bar", props.get("foo"));
m_ensure.step();
}
void change(Map<?, ?> props, Provider provider) {
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", props.get("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Provider provider, Dictionary<?, ?> props) {
Assert.assertNotNull(provider);
Assert.assertEquals("bar", props.get("foo"));
m_ensure.step();
}
void change(Provider provider, Dictionary<?, ?> props) {
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", props.get("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Dictionary<?, ?> props, Provider provider) {
Assert.assertNotNull(provider);
Assert.assertEquals("bar", props.get("foo"));
m_ensure.step();
}
void change(Dictionary<?, ?> props, Provider provider) {
Assert.assertNotNull(provider);
Assert.assertEquals("zoo", props.get("foo"));
m_ensure.step();
}
});
declareConsumer(m, new Object() {
void bind(Object provider) {
Assert.assertNotNull(provider);
Assert.assertEquals(provider.getClass(), ProviderImpl.class);
m_ensure.step();
}
void change(Object provider) {
bind(provider);
}
});
m.add(provider);
m_ensure.waitForStep(16, 5000);
props = new Hashtable<>();
props.put("foo", "zoo");
provider.setServiceProperties(props);
m_ensure.waitForStep(32, 5000);
m.remove(provider);
m_ensure.waitForStep(48, 5000);
}
use of org.apache.felix.dm.itest.util.Ensure in project felix by apache.
the class ServiceDependencyInjectionTest method testServiceInjection.
public void testServiceInjection() {
DependencyManager m = getDM();
Ensure e = new Ensure();
// create a service provider and consumer
ServiceProvider provider = new ServiceProvider(e);
Component sp = m.createComponent().setImplementation(provider).setInterface(ServiceInterface2.class.getName(), null);
Component sc = m.createComponent().setImplementation(new ServiceConsumer()).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(true));
Component sc2 = // all dependencies are optional
m.createComponent().setImplementation(new ServiceConsumerNamedInjection(false, false)).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(false).setAutoConfig("m_service")).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(false).setAutoConfig("m_service2")).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(false).setAutoConfig("m_service3"));
Component sc3 = // second dependency is required, first and third are optional
m.createComponent().setImplementation(new ServiceConsumerNamedInjection(false, false)).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(false).setAutoConfig("m_service")).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(true).setAutoConfig("m_service2")).add(m.createServiceDependency().setService(ServiceInterface2.class).setRequired(false).setAutoConfig("m_service3"));
Component sc4 = m.createComponent().setImplementation(new ServiceConsumerNamedInjection(true, false));
Component sc5 = m.createComponent().setImplementation(new ServiceConsumerNamedInjection(true, true));
m.add(sp);
m.add(sc);
m.remove(sc);
m.add(sc2);
m.remove(sc2);
m.add(sc3);
m.remove(sc4);
m.add(sc4);
m.remove(sc4);
m.add(sc5);
m.remove(sc5);
m.remove(sp);
e.waitForStep(11, 5000);
m.clear();
}
use of org.apache.felix.dm.itest.util.Ensure in project felix by apache.
the class ServiceDependencyPropagateTest method testServiceDependencyPropagate.
/**
* Checks that a ServiceDependency propagates the dependency service properties to the provided service properties.
*/
public void testServiceDependencyPropagate() {
DependencyManager m = getDM();
// helper class that ensures certain steps get executed in sequence
Ensure e = new Ensure();
Component c1 = m.createComponent().setImplementation(new C1(e)).add(m.createServiceDependency().setService(C2.class).setRequired(true).setCallbacks("bind", null));
Component c2 = m.createComponent().setInterface(C2.class.getName(), new Hashtable() {
{
put("foo", "bar");
}
}).setImplementation(new C2()).add(m.createServiceDependency().setService(C3.class).setRequired(true).setPropagate(true));
Component c3 = m.createComponent().setInterface(C3.class.getName(), new Hashtable() {
{
put("foo2", "bar2");
put("foo", "overriden");
}
}).setImplementation(new C3());
m.add(c1);
m.add(c2);
m.add(c3);
e.waitForStep(3, 10000);
m.remove(c3);
m.remove(c2);
m.remove(c1);
m.clear();
}
Aggregations