blob: 36352d049f7f13610c22f16d4cd5bd1f4781a367 [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.container.internal.container;
public class ContainerDiscoveryTest {
/* @Test
public void testBeansOnly() throws Exception {
AbstractModelBuilder builder = getModelBuilder(Collections.singletonList("OSGI-INF/cdi/beans-only.xml"), null);
final BeansModel beansModel = builder.build();
ContainerState containerState = new ContainerState(null, null) {
@Override
public BeansModel beansModel() {
return beansModel;
}
public <T extends ResourceLoader & ProxyServices> T loader() {
return null;
}
};
ContainerDiscovery.discover(containerState);
Collection<ComponentModel> componentModels = sort(
beansModel.getComponentModels(), (a, b) -> a.getName().compareTo(b.getName()));
assertEquals(2, componentModels.size());
Iterator<ComponentModel> iterator = componentModels.iterator();
assertComponentModel(
iterator.next(),
Bar.class,
0,
Bar.class.getName(),
new String[0],
Collections.emptyList(),
0,
ServiceScope.NONE);
assertComponentModel(
iterator.next(),
Foo.class,
0,
Foo.class.getName(),
new String[0],
Collections.emptyList(),
0,
ServiceScope.NONE);
}
@Test
public void testConfiguration() throws Exception {
AbstractModelBuilder builder = getModelBuilder(Collections.singletonList("OSGI-INF/cdi/beans-configuration.xml"), null);
final BeansModel beansModel = builder.build();
ContainerState containerState = new ContainerState(null, null) {
@Override
public BeansModel beansModel() {
return beansModel;
}
public <T extends ResourceLoader & ProxyServices> T loader() {
return null;
}
};
ContainerDiscovery.discover(containerState);
Collection<ComponentModel> componentModels = sort(
beansModel.getComponentModels(), (a, b) -> a.getName().compareTo(b.getName()));
assertEquals(2, componentModels.size());
Iterator<ComponentModel> compItr = componentModels.iterator();
ComponentModel componentModel = compItr.next();
assertComponentModel(
componentModel,
BarWithConfig.class,
2,
BarWithConfig.class.getName(),
new String[0],
Collections.emptyList(),
0,
ServiceScope.NONE);
Collection<ConfigurationModel> configurations = sort(componentModel.getConfigurations(), (a, b) -> a.getType().getTypeName().compareTo(b.getType().getTypeName()));
Iterator<ConfigurationModel> confItr = configurations.iterator();
assertConfigurationModel(
confItr.next(),
new String[] {"$"},
ConfigurationPolicy.OPTIONAL,
new TypeReference<Bar>() {}.getType());
assertConfigurationModel(
confItr.next(),
new String[] {"$"},
ConfigurationPolicy.REQUIRE,
new TypeReference<Config>() {}.getType());
componentModel = compItr.next();
assertComponentModel(
componentModel,
FooWithConfig.class,
1,
FooWithConfig.class.getName(),
new String[0],
Collections.emptyList(),
0,
ServiceScope.NONE);
configurations = sort(componentModel.getConfigurations(), (a, b) -> a.getType().getTypeName().compareTo(b.getType().getTypeName()));
confItr = configurations.iterator();
assertConfigurationModel(
confItr.next(),
new String[] {"$", "foo.config"},
ConfigurationPolicy.OPTIONAL,
new TypeReference<Config>() {}.getType());
}
@Test
public void testReferences() throws Exception {
AbstractModelBuilder builder = getModelBuilder(Collections.singletonList("OSGI-INF/cdi/beans-references.xml"), null);
final BeansModel beansModel = builder.build();
ContainerState containerState = new ContainerState(null, null) {
@Override
public BeansModel beansModel() {
return beansModel;
}
public <T extends ResourceLoader & ProxyServices> T loader() {
return null;
}
};
ContainerDiscovery.discover(containerState);
Collection<ComponentModel> componentModels = sort(
beansModel.getComponentModels(), (a, b) -> a.getName().compareTo(b.getName()));
assertEquals(2, componentModels.size());
Iterator<ComponentModel> compItr = componentModels.iterator();
ComponentModel componentModel = compItr.next();
assertComponentModel(
componentModel,
BarWithReference.class,
0,
BarWithReference.class.getName(),
new String[0],
Collections.emptyList(),
1,
ServiceScope.NONE);
Collection<ReferenceModel> references = componentModel.getReferences();
Iterator<ReferenceModel> refIter = references.iterator();
assertReferenceModel(
refIter.next(),
BarReference.class,
ReferenceCardinality.MANDATORY,
CollectionType.SERVICE,
BarReference.class,
"barReference",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.BUNDLE,
BarReference.class,
"",
Sets.hashSet(BarReference.class, Object.class));
componentModel = compItr.next();
assertComponentModel(
componentModel,
FooWithReference.class,
0,
FooWithReference.class.getName(),
new String[0],
Collections.emptyList(),
1,
ServiceScope.NONE);
references = componentModel.getReferences();
refIter = references.iterator();
assertReferenceModel(
refIter.next(),
FooReference.class,
ReferenceCardinality.MANDATORY,
CollectionType.SERVICE,
FooReference.class,
"fooReference",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.BUNDLE,
FooReference.class,
"",
Sets.hashSet(FooReference.class, Object.class));
}
@Test
public void testAnnotatedBeans() throws Exception {
AbstractModelBuilder builder = getModelBuilder(Collections.singletonList("OSGI-INF/cdi/beans-annotated.xml"), null);
final BeansModel beansModel = builder.build();
ContainerState containerState = new ContainerState(null, null) {
@Override
public BeansModel beansModel() {
return beansModel;
}
public <T extends ResourceLoader & ProxyServices> T loader() {
return null;
}
};
ContainerDiscovery.discover(containerState);
Collection<ComponentModel> componentModels = sort(
beansModel.getComponentModels(), (a, b) -> a.getName().compareTo(b.getName()));
assertEquals(2, componentModels.size());
Iterator<ComponentModel> compItr = componentModels.iterator();
ComponentModel componentModel = compItr.next();
assertComponentModel(
componentModel,
FooAnnotated.class,
0,
"foo.annotated",
new String[] {"service.ranking:Integer=12"},
Arrays.asList(Foo.class.getName()),
0,
ServiceScope.SINGLETON);
componentModel = compItr.next();
assertComponentModel(
componentModel,
BarAnnotated.class,
1,
BarAnnotated.class.getName(),
new String[0],
Collections.emptyList(),
6,
ServiceScope.NONE);
Collection<ReferenceModel> references = sort(componentModel.getReferences(), (a, b) -> a.getName().compareTo(b.getName()));
Iterator<ReferenceModel> refIter = references.iterator();
assertReferenceModel(
refIter.next(),
Collection.class,
ReferenceCardinality.MULTIPLE,
CollectionType.SERVICE,
new TypeReference<Collection<Foo>>() {}.getType(),
"collectionFoos",
ReferencePolicy.DYNAMIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.DEFAULT,
Foo.class,
"",
Sets.hashSet(new TypeReference<Collection<Foo>>() {}.getType(), Object.class));
assertReferenceModel(
refIter.next(),
Foo.class,
ReferenceCardinality.OPTIONAL,
CollectionType.SERVICE,
Foo.class,
"foo",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.DEFAULT,
Foo.class,
"",
Sets.hashSet(Foo.class, Object.class));
assertReferenceModel(
refIter.next(),
Foo.class,
ReferenceCardinality.MULTIPLE,
CollectionType.SERVICE,
Foo.class,
"foos",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.DEFAULT,
Foo.class,
"",
Sets.hashSet(Foo.class, Object.class));
assertReferenceModel(
refIter.next(),
Collection.class,
ReferenceCardinality.MULTIPLE,
CollectionType.PROPERTIES,
new TypeReference<Collection<Map<String, Object>>>(){}.getType(),
"propertiesFoos",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.DEFAULT,
Foo.class,
"",
Sets.hashSet(new TypeReference<Collection<Map<String, Object>>>(){}.getType(), Object.class));
assertReferenceModel(
refIter.next(),
Collection.class,
ReferenceCardinality.MULTIPLE,
CollectionType.REFERENCE,
new TypeReference<Collection<ServiceReference<Foo>>>(){}.getType(),
"serviceReferencesFoos",
ReferencePolicy.STATIC,
ReferencePolicyOption.RELUCTANT,
ReferenceScope.PROTOTYPE,
Foo.class,
"",
Sets.hashSet(new TypeReference<Collection<ServiceReference<Foo>>>(){}.getType(), Object.class));
assertReferenceModel(
refIter.next(),
Collection.class,
ReferenceCardinality.MULTIPLE,
CollectionType.TUPLE,
new TypeReference<Collection<Map.Entry<Map<String, Object>, Foo>>>(){}.getType(),
"tupleFoos",
ReferencePolicy.STATIC,
ReferencePolicyOption.GREEDY,
ReferenceScope.DEFAULT,
Foo.class,
"",
Sets.hashSet(new TypeReference<Collection<Map.Entry<Map<String, Object>, Foo>>>(){}.getType(), Object.class));
}
@Test(expected = DefinitionException.class)
public void testDescriptorError1() throws Exception {
AbstractModelBuilder builder = getModelBuilder(Collections.singletonList("OSGI-INF/cdi/beans-badly-annotated.xml"), null);
final BeansModel beansModel = builder.build();
ContainerState containerState = new ContainerState(null, null) {
@Override
public BeansModel beansModel() {
return beansModel;
}
public <T extends ResourceLoader & ProxyServices> T loader() {
return null;
}
};
ContainerDiscovery.discover(containerState);
}
protected void assertComponentModel(
ComponentModel componentModel,
Class<?> beanClass,
int confSize,
String name,
String[] properties,
List<String> provides,
int refSize,
ServiceScope scope) {
assertEquals(beanClass, componentModel.getBeanClass());
assertEquals(confSize, componentModel.getConfigurations().size());
assertEquals(name, componentModel.getName());
assertArrayEquals(properties, componentModel.getProperties());
assertEquals(provides, componentModel.getProvides());
assertEquals(refSize, componentModel.getReferences().size());
assertEquals(scope, componentModel.getServiceScope());
}
protected void assertConfigurationModel(
ConfigurationModel configurationModel,
String[] pid,
ConfigurationPolicy policy,
Type type) {
assertArrayEquals(pid, configurationModel.getPid());
assertEquals(policy, configurationModel.getConfigurationPolicy());
assertEquals(type, configurationModel.getType());
}
private void assertReferenceModel(
ReferenceModel referenceModel,
Class<?> beanClass,
ReferenceCardinality cardinality,
CollectionType collectionType,
Type injectionPointType,
String name,
ReferencePolicy policy,
ReferencePolicyOption option,
ReferenceScope scope,
Class<?> serviceClass,
String target,
Set<Type> types) {
assertEquals(beanClass, referenceModel.getBeanClass());
assertEquals(cardinality, referenceModel.getCardinality());
assertEquals(collectionType, referenceModel.getCollectionType());
assertEquals(injectionPointType, referenceModel.getInjectionPointType());
assertEquals(name, referenceModel.getName());
assertEquals(policy, referenceModel.getPolicy());
assertEquals(option, referenceModel.getPolicyOption());
assertEquals(scope, referenceModel.getScope());
assertEquals(serviceClass, referenceModel.getServiceClass());
assertEquals(target, referenceModel.getTarget());
assertEquals(types, referenceModel.getTypes());
}
*/
}