blob: 3e8918c782c9575f0aa598321407b7870de0bb08 [file] [log] [blame]
/**
* 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.apache.aries.cdi.test.cases;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.util.AnnotationLiteral;
import org.apache.aries.cdi.test.interfaces.BeanService;
import org.apache.aries.cdi.test.interfaces.BundleContextBeanQualifier;
import org.apache.aries.cdi.test.interfaces.FieldInjectedReference;
import org.junit.Ignore;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@SuppressWarnings("rawtypes")
public class CdiBeanTests extends AbstractTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
containerDTO = getContainerDTO(cdiBundle);
}
public void testConstructorInjectedService() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","ConstructorInjectedService")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("PREFIXCONSTRUCTOR", bean.doSomething());
}
public void testFieldInjectedReference_BundleScoped() throws Exception {
Iterator<ServiceReference<FieldInjectedReference>> iterator = bundleContext.getServiceReferences(
FieldInjectedReference.class, String.format("(objectClass=*.%s)","FieldInjectedBundleScopedImpl")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<FieldInjectedReference> serviceReference = iterator.next();
assertNotNull(serviceReference);
assertNotNull(serviceReference.getBundle());
FieldInjectedReference fieldInjectedReference = bundleContext.getService(serviceReference);
assertNotNull(fieldInjectedReference);
assertNotNull(fieldInjectedReference.getProperties());
assertNotNull(fieldInjectedReference.getGenericReference());
assertNotNull(fieldInjectedReference.getRawReference());
assertNotNull(fieldInjectedReference.getService());
assertEquals("value", fieldInjectedReference.getProperties().get("key"));
assertEquals("value", fieldInjectedReference.getGenericReference().getProperty("key"));
assertEquals("value", fieldInjectedReference.getRawReference().getProperty("key"));
}
public void testFieldInjectedReference_PrototypeScoped() throws Exception {
Iterator<ServiceReference<FieldInjectedReference>> iterator = bundleContext.getServiceReferences(
FieldInjectedReference.class, String.format("(objectClass=*.%s)","FieldInjectedPrototypeScopedImpl")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<FieldInjectedReference> serviceReference = iterator.next();
assertNotNull(serviceReference);
assertNotNull(serviceReference.getBundle());
FieldInjectedReference fieldInjectedReference = bundleContext.getService(serviceReference);
assertNotNull(fieldInjectedReference);
assertNotNull(fieldInjectedReference.getProperties());
assertNotNull(fieldInjectedReference.getGenericReference());
assertNotNull(fieldInjectedReference.getRawReference());
assertNotNull(fieldInjectedReference.getService());
assertEquals("value", fieldInjectedReference.getProperties().get("key"));
assertEquals("value", fieldInjectedReference.getGenericReference().getProperty("key"));
assertEquals("value", fieldInjectedReference.getRawReference().getProperty("key"));
}
public void testFieldInjectedService() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","FieldInjectedService")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("PREFIXFIELD", bean.doSomething());
}
public void testMethodInjectedService() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","MethodInjectedService")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("PREFIXMETHOD", bean.doSomething());
}
@SuppressWarnings("unchecked")
public void testBeanAsServiceWithProperties() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","ServiceWithProperties")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("test.value.b2", serviceReference.getProperty("test.key.b2"));
assertTrue(serviceReference.getProperty("p.Boolean") instanceof Boolean);
assertTrue(serviceReference.getProperty("p.Boolean.array") instanceof Boolean[]);
assertEquals(2, ((Boolean[])serviceReference.getProperty("p.Boolean.array")).length);
assertTrue(serviceReference.getProperty("p.Boolean.list") instanceof List);
assertEquals(2, ((List<Boolean>)serviceReference.getProperty("p.Boolean.list")).size());
assertTrue(serviceReference.getProperty("p.Boolean.set") instanceof Set);
assertEquals(2, ((Set<Boolean>)serviceReference.getProperty("p.Boolean.set")).size());
assertTrue(serviceReference.getProperty("p.Byte") instanceof Byte);
assertTrue(serviceReference.getProperty("p.Byte.array") instanceof Byte[]);
assertEquals(2, ((Byte[])serviceReference.getProperty("p.Byte.array")).length);
assertTrue(serviceReference.getProperty("p.Byte.list") instanceof List);
assertEquals(2, ((List<Byte>)serviceReference.getProperty("p.Byte.list")).size());
assertTrue(serviceReference.getProperty("p.Byte.set") instanceof Set);
assertEquals(2, ((Set<Byte>)serviceReference.getProperty("p.Byte.set")).size());
assertTrue(serviceReference.getProperty("p.Character") instanceof Character);
assertTrue(serviceReference.getProperty("p.Character.array") instanceof Character[]);
assertEquals(2, ((Character[])serviceReference.getProperty("p.Character.array")).length);
assertTrue(serviceReference.getProperty("p.Character.list") instanceof List);
assertEquals(2, ((List<Character>)serviceReference.getProperty("p.Character.list")).size());
assertTrue(serviceReference.getProperty("p.Character.set") instanceof Set);
assertEquals(2, ((Set<Character>)serviceReference.getProperty("p.Character.set")).size());
assertTrue(serviceReference.getProperty("p.Double") instanceof Double);
assertTrue(serviceReference.getProperty("p.Double.array") instanceof Double[]);
assertEquals(2, ((Double[])serviceReference.getProperty("p.Double.array")).length);
assertTrue(serviceReference.getProperty("p.Double.list") instanceof List);
assertEquals(2, ((List<Double>)serviceReference.getProperty("p.Double.list")).size());
assertTrue(serviceReference.getProperty("p.Double.set") instanceof Set);
assertEquals(2, ((Set<Double>)serviceReference.getProperty("p.Double.set")).size());
assertTrue(serviceReference.getProperty("p.Float") instanceof Float);
assertTrue(serviceReference.getProperty("p.Float.array") instanceof Float[]);
assertEquals(2, ((Float[])serviceReference.getProperty("p.Float.array")).length);
assertTrue(serviceReference.getProperty("p.Float.list") instanceof List);
assertEquals(2, ((List<Float>)serviceReference.getProperty("p.Float.list")).size());
assertTrue(serviceReference.getProperty("p.Float.set") instanceof Set);
assertEquals(2, ((Set<Float>)serviceReference.getProperty("p.Float.set")).size());
assertTrue(serviceReference.getProperty("p.Integer") instanceof Integer);
assertTrue(serviceReference.getProperty("p.Integer.array") instanceof Integer[]);
assertEquals(2, ((Integer[])serviceReference.getProperty("p.Integer.array")).length);
assertTrue(serviceReference.getProperty("p.Integer.list") instanceof List);
assertEquals(2, ((List<Integer>)serviceReference.getProperty("p.Integer.list")).size());
assertTrue(serviceReference.getProperty("p.Integer.set") instanceof Set);
assertEquals(2, ((Set<Integer>)serviceReference.getProperty("p.Integer.set")).size());
assertTrue(serviceReference.getProperty("p.Long") instanceof Long);
assertTrue(serviceReference.getProperty("p.Long.array") instanceof Long[]);
assertEquals(2, ((Long[])serviceReference.getProperty("p.Long.array")).length);
assertTrue(serviceReference.getProperty("p.Long.list") instanceof List);
assertEquals(2, ((List<Long>)serviceReference.getProperty("p.Long.list")).size());
assertTrue(serviceReference.getProperty("p.Long.set") instanceof Set);
assertEquals(2, ((Set<Long>)serviceReference.getProperty("p.Long.set")).size());
assertTrue(serviceReference.getProperty("p.Short") instanceof Short);
assertTrue(serviceReference.getProperty("p.Short.array") instanceof Short[]);
assertEquals(2, ((Short[])serviceReference.getProperty("p.Short.array")).length);
assertTrue(serviceReference.getProperty("p.Short.list") instanceof List);
assertEquals(2, ((List<Short>)serviceReference.getProperty("p.Short.list")).size());
assertTrue(serviceReference.getProperty("p.Short.set") instanceof Set);
assertEquals(2, ((Set<Short>)serviceReference.getProperty("p.Short.set")).size());
assertTrue(serviceReference.getProperty("p.String") instanceof String);
assertTrue(serviceReference.getProperty("p.String.array") instanceof String[]);
assertEquals(2, ((String[])serviceReference.getProperty("p.String.array")).length);
assertTrue(serviceReference.getProperty("p.String.list") instanceof List);
assertEquals(2, ((List<String>)serviceReference.getProperty("p.String.list")).size());
assertTrue(serviceReference.getProperty("p.String.set") instanceof Set);
assertEquals(2, ((Set<String>)serviceReference.getProperty("p.String.set")).size());
// glubInteger = 45, gooString = "green"
assertTrue(serviceReference.getProperty("glub.integer") instanceof Integer);
assertEquals(45, ((Integer)serviceReference.getProperty("glub.integer")).intValue());
assertTrue(serviceReference.getProperty("goo.string") instanceof String);
assertEquals("green", ((String)serviceReference.getProperty("goo.string")));
}
public void testBundleContextInjection() throws Exception {
BeanManager beanManager = getBeanManager(cdiBundle);
assertNotNull(beanManager);
@SuppressWarnings("serial")
Set<Bean<?>> beans = beanManager.getBeans(Object.class, new AnnotationLiteral<BundleContextBeanQualifier>() {});
Bean<?> bean = beanManager.resolve(beans);
CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
Object bcb = beanManager.getReference(bean, Object.class, ctx);
assertNotNull(bcb);
@SuppressWarnings("unchecked")
BeanService<BundleContext> bti = (BeanService<BundleContext>)bcb;
assertNotNull(bti.get());
assertTrue(bti.get() instanceof BundleContext);
}
@Ignore // This test doesn't make sense because there's only a single bean for the reference!!!
public void _testInstanceProperties() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","Instance_ServiceProperties")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
@SuppressWarnings("unchecked")
BeanService<Map<String, Object>> bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals(3, Integer.decode(bean.doSomething()).intValue());
Map<String, Object> map = bean.get();
assertNotNull(map);
}
@Ignore // This test doesn't make sense because there's only a single bean for the reference!!!
public void _testInstanceServiceReference() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","Instance_ServiceReference")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
@SuppressWarnings("unchecked")
BeanService<ServiceReference<?>> bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals(3, Integer.decode(bean.doSomething()).intValue());
ServiceReference<?> sr = bean.get();
assertNotNull(sr);
}
@Ignore // This test doesn't make sense because there's only a single bean for the reference!!!
public void _testInstance_Optional() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
BeanService.class, String.format("(objectClass=*.%s)","Instance_Optional")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
@SuppressWarnings("unchecked")
BeanService<Callable<String>> bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals(0, Integer.decode(bean.doSomething()).intValue());
assertNull(bean.get());
}
}