Search in sources :

Example 71 with Ensure

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();
}
Also used : DependencyManager(org.apache.felix.dm.DependencyManager) ResourceHandler(org.apache.felix.dm.ResourceHandler) Ensure(org.apache.felix.dm.itest.util.Ensure) URL(java.net.URL)

Example 72 with Ensure

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();
}
Also used : DependencyManager(org.apache.felix.dm.DependencyManager) Ensure(org.apache.felix.dm.itest.util.Ensure) Component(org.apache.felix.dm.Component) URL(java.net.URL)

Example 73 with Ensure

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);
}
Also used : Hashtable(java.util.Hashtable) DependencyManager(org.apache.felix.dm.DependencyManager) ServiceReference(org.osgi.framework.ServiceReference) Ensure(org.apache.felix.dm.itest.util.Ensure) Component(org.apache.felix.dm.Component)

Example 74 with Ensure

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();
}
Also used : DependencyManager(org.apache.felix.dm.DependencyManager) Ensure(org.apache.felix.dm.itest.util.Ensure) Component(org.apache.felix.dm.Component)

Example 75 with Ensure

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();
}
Also used : Hashtable(java.util.Hashtable) DependencyManager(org.apache.felix.dm.DependencyManager) Ensure(org.apache.felix.dm.itest.util.Ensure) Component(org.apache.felix.dm.Component)

Aggregations

Ensure (org.apache.felix.dm.itest.util.Ensure)135 Component (org.apache.felix.dm.Component)90 DependencyManager (org.apache.felix.dm.DependencyManager)90 ServiceRegistration (org.osgi.framework.ServiceRegistration)42 Hashtable (java.util.Hashtable)32 Dictionary (java.util.Dictionary)8 URL (java.net.URL)6 HashMap (java.util.HashMap)5 Map (java.util.Map)5 ResourceHandler (org.apache.felix.dm.ResourceHandler)5 IOException (java.io.IOException)4 Dependency (org.apache.felix.dm.Dependency)4 ServiceDependency (org.apache.felix.dm.ServiceDependency)4 ConfigurationAdmin (org.osgi.service.cm.ConfigurationAdmin)4 ArrayList (java.util.ArrayList)2 ForkJoinPool (java.util.concurrent.ForkJoinPool)2 TimeUnit (java.util.concurrent.TimeUnit)2 ComponentStateListener (org.apache.felix.dm.ComponentStateListener)2 TestBase (org.apache.felix.dm.itest.util.TestBase)2 Bundle (org.osgi.framework.Bundle)2