blob: 900c7962831758fd8ff288f9aefa6069e398a14b [file] [log] [blame]
package org.apache.aries.cdi.container.internal.model;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.osgi.service.cdi.CdiConstants;
public class ModelTest {
@Test
public void testModelWithBeansOnly() throws Exception {
AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-only.xml");
BeansModel beansModel = builder.build();
assertNotNull(beansModel);
Collection<String> beanClassNames = beansModel.getBeanClassNames();
assertEquals(2, beanClassNames.size());
assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
}
@Test
public void testModelWithConfiguration() throws Exception {
AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-configuration.xml");
BeansModel beansModel = builder.build();
assertNotNull(beansModel);
Collection<String> beanClassNames = beansModel.getBeanClassNames();
assertEquals(2, beanClassNames.size());
assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
Collection<ConfigurationModel> configurationModels = beansModel.getConfigurationModels();
assertEquals(3, configurationModels.size());
Iterator<ConfigurationModel> iterator = configurationModels.iterator();
ConfigurationModel configurationModel = iterator.next();
assertArrayEquals(new String[] {"com.foo.FooImpl"}, configurationModel.pids());
assertEquals("com.foo.Config", configurationModel.beanClass());
assertEquals(true, configurationModel.required());
configurationModel = iterator.next();
assertArrayEquals(new String[] {"com.foo.other", "and.another"}, configurationModel.pids());
assertEquals("com.foo.Baz", configurationModel.beanClass());
assertEquals(true, configurationModel.required());
configurationModel = iterator.next();
assertArrayEquals(new String[] {"an.optional.configuration"}, configurationModel.pids());
assertEquals(false, configurationModel.required());
}
@Test
public void testModelWithReferences() throws Exception {
AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-references.xml");
BeansModel beansModel = builder.build();
assertNotNull(beansModel);
Collection<String> beanClassNames = beansModel.getBeanClassNames();
assertEquals(2, beanClassNames.size());
assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
Collection<ReferenceModel> referenceModels = beansModel.getReferenceModels();
assertEquals(2, referenceModels.size());
ReferenceModel referenceModel = referenceModels.iterator().next();
assertEquals("java.util.concurrent.Callable", referenceModel.getBeanClass());
assertEquals("(objectClass=java.util.concurrent.Callable)", referenceModel.getTarget());
}
@Test
public void testModelWithServices() throws Exception {
AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-services.xml");
BeansModel beansModel = builder.build();
assertNotNull(beansModel);
Collection<String> beanClassNames = beansModel.getBeanClassNames();
assertEquals(2, beanClassNames.size());
assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
Collection<ServiceModel> serviceModels = beansModel.getServiceModels();
assertEquals(1, serviceModels.size());
ServiceModel serviceModel = serviceModels.iterator().next();
List<String> provides = serviceModel.getProvides();
assertEquals(2, provides.size());
assertEquals("com.foo.Foo", provides.get(0));
String[] serviceProperties = serviceModel.getProperties();
assertEquals(33, serviceProperties.length);
assertEquals("foo:String=fum", serviceProperties[0]);
assertEquals("foo1:String=baz", serviceProperties[1]);
assertEquals("foo2:Long=345987643", serviceProperties[2]);
assertEquals("foo3:Double=3459.87643", serviceProperties[3]);
assertEquals("foo4:Float=3459.87", serviceProperties[4]);
assertEquals("foo5:Integer=724559", serviceProperties[5]);
assertEquals("foo6:Byte=127", serviceProperties[6]);
assertEquals("foo7:Character=X", serviceProperties[7]);
assertEquals("foo8:Boolean=true", serviceProperties[8]);
assertEquals("foo9:Short=32767", serviceProperties[9]);
assertEquals("foo11:String=frog", serviceProperties[10]);
assertEquals("foo11:String=drum", serviceProperties[11]);
assertEquals("foo12:Long=345987643", serviceProperties[12]);
assertEquals("foo12:Long=34", serviceProperties[13]);
assertEquals("foo13:Double=3459.87643", serviceProperties[14]);
assertEquals("foo13:Double=34.3456", serviceProperties[15]);
assertEquals("foo14:Float=3459.87", serviceProperties[16]);
assertEquals("foo14:Float=35.23", serviceProperties[17]);
assertEquals("foo15:Integer=724559", serviceProperties[18]);
assertEquals("foo15:Integer=345", serviceProperties[19]);
assertEquals("foo16:Byte=127", serviceProperties[20]);
assertEquals("foo16:Byte=23", serviceProperties[21]);
assertEquals("foo17:Character=X", serviceProperties[22]);
assertEquals("foo17:Character=t", serviceProperties[23]);
assertEquals("foo18:Boolean=true", serviceProperties[24]);
assertEquals("foo18:Boolean=false", serviceProperties[25]);
assertEquals("foo19:Short=32767", serviceProperties[26]);
assertEquals("foo19:Short=2345", serviceProperties[27]);
assertEquals("foo20:String=bar", serviceProperties[28]);
assertEquals("foo21:List<Short>=32767", serviceProperties[29]);
assertEquals("foo21:List<Short>=2345", serviceProperties[30]);
assertEquals("foo22:Set<Short>=32767", serviceProperties[31]);
assertEquals("foo22:Set<Short>=2345", serviceProperties[32]);
}
@Test
public void testModelWithAllDescriptors() throws Exception {
AbstractModelBuilder builder = getBuilder(null);
BeansModel beansModel = builder.build();
assertNotNull(beansModel);
Collection<String> beanClassNames = beansModel.getBeanClassNames();
assertEquals(2, beanClassNames.size());
assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
}
AbstractModelBuilder getBuilder(final String osgiBeansFile) {
return new AbstractModelBuilder() {
@Override
List<String> getDefaultResources() {
return Arrays.asList(
"OSGI-INF/cdi/beans-configuration.xml",
"OSGI-INF/cdi/beans-only.xml",
"OSGI-INF/cdi/beans-references.xml",
"OSGI-INF/cdi/beans-services.xml"
);
}
@Override
URL getResource(String resource) {
return getClassLoader().getResource(resource);
}
@Override
ClassLoader getClassLoader() {
return getClass().getClassLoader();
}
@Override
Map<String, Object> getAttributes() {
if (osgiBeansFile == null) {
return Collections.emptyMap();
}
return Collections.singletonMap(
CdiConstants.REQUIREMENT_OSGI_BEANS_ATTRIBUTE, Arrays.asList(osgiBeansFile));
}
};
}
}