blob: 3834a6a53acafefbc951cdb30b1b4929df4b0028 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.felix.ipojo.runtime.core;
import org.apache.felix.ipojo.ComponentInstance;
import org.apache.felix.ipojo.PrimitiveInstanceDescription;
import org.apache.felix.ipojo.architecture.Architecture;
import org.apache.felix.ipojo.runtime.core.components.FooProviderType1;
import org.apache.felix.ipojo.runtime.core.services.FooService;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.ServiceReference;
import org.ow2.chameleon.testing.helpers.BaseTest;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.*;
/**
* Check the different method to create POJO object.
*/
public class TestPOJOCreation extends BaseTest {
private ComponentInstance ci_lazzy;
private ComponentInstance ci_immediate;
private ComponentInstance ci_immediate_singleton;
private Architecture lazzyArch;
private Architecture immeArch;
private Architecture immeArchSing;
private ComponentInstance ci_lazzy_sing;
private ComponentInstance ci_lazzy_sev;
private Architecture lazzyArchSing;
private Architecture lazzyArchSev;
private ComponentInstance ci_lazzy_singM;
private ComponentInstance ci_lazzy_sevM;
private Architecture lazzyArchSingM;
private Architecture lazzyArchSevM;
@Override
protected List<String> getExtraExports() {
return Arrays.asList("org.apache.felix.ipojo.runtime.core.components");
}
@Before
public void setUp() {
String factName = "ManipulationCreation-FooProviderType-1";
String compName = "FooProvider-1";
ci_lazzy = ipojoHelper.createComponentInstance(factName, compName);
String factName2 = "ManipulationCreation-ImmediateFooProviderType";
String compName2 = "FooProvider-2";
ci_immediate = ipojoHelper.createComponentInstance(factName2, compName2);
String factName3 = "ManipulationCreation-ImmediateFooProviderTypeSingleton";
String compName3 = "FooProvider-3";
ci_immediate_singleton = ipojoHelper.createComponentInstance(factName3, compName3);
String factName4 = "ManipulationCreation-FooProviderType-1-Sing";
String compName4 = "FooProvider-1-Sing";
ci_lazzy_sing = ipojoHelper.createComponentInstance(factName4, compName4);
String factName5 = "ManipulationCreation-FooProviderType-1-Sev";
String compName5 = "FooProvider-1-Sev";
ci_lazzy_sev = ipojoHelper.createComponentInstance(factName5, compName5);
String factName6 = "ManipulationCreation-FooProviderType-1-SingM";
String compName6 = "FooProvider-1-SingM";
ci_lazzy_singM = ipojoHelper.createComponentInstance(factName6, compName6);
String factName7 = "ManipulationCreation-FooProviderType-1-SevM";
String compName7 = "FooProvider-1-SevM";
ci_lazzy_sevM = ipojoHelper.createComponentInstance(factName7, compName7);
lazzyArch = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName + ")");
immeArch = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName2 + ")");
immeArchSing = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName3 + ")");
lazzyArchSing = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName4 + ")");
lazzyArchSev = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName5 + ")");
lazzyArchSingM = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName6 + ")");
lazzyArchSevM = (Architecture) osgiHelper.getServiceObject(Architecture.class.getName(), "(architecture.instance=" + compName7 + ")");
}
public void tearDown() {
lazzyArch = null;
immeArch = null;
immeArchSing = null;
lazzyArchSing = null;
lazzyArchSev = null;
lazzyArchSingM = null;
lazzyArchSevM = null;
ipojoHelper.dispose();
}
/**
* Check lazy creation.
*/
@Test
public void testLazyCreation() {
assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check lazy and singleton creation.
*/
@Test
public void testLazyCreationSingleton() {
assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArchSing.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_sing.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy_sing.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArchSing.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check lazy and "several" creation.
*/
@Test
public void testLazyCreationSeveral() {
assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArchSev.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_sev.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy_sev.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
FooService fs2 = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertTrue("Check the FooService invocation-2", fs2.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArchSev.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check immediate creation.
*/
@Test
public void testImmediateCreation() {
assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_immediate.getInstanceName());
assertNotNull("Check that a FooService from " + ci_immediate.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArch.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check bundle context injection.
*/
@Test
public void testBundleContext() {
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
Properties p = fs.fooProps();
assertNotNull("Check the bundle context", p.get("context"));
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArch.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Test immediate singleton creation.
*/
@Test
public void testImmediateSingletonCreation() {
assertEquals("Check that one object is created ", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_immediate_singleton.getInstanceName());
assertNotNull("Check that a FooService from " + ci_immediate_singleton.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) immeArchSing.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check creation through a factory method.
* (lazy & singleton creation)
*/
@Test
public void testLazyCreationSingletonM() {
assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArchSingM.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_singM.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy_singM.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
FooService fs2 = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertTrue("Check the FooService invocation", fs2.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArchSingM.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Check creation through a factory method.
* (lazy & several creation)
*/
@Test
public void testLazyCreationSeveralM() {
assertEquals("Check that no objects are created ", 0, ((PrimitiveInstanceDescription) lazzyArchSevM.getInstanceDescription()).getCreatedObjects().length);
ServiceReference ref = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), ci_lazzy_sevM.getInstanceName());
assertNotNull("Check that a FooService from " + ci_lazzy_sevM.getInstanceName() + " is available", ref);
FooService fs = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation", fs.foo());
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArchSevM.getInstanceDescription()).getCreatedObjects().length);
FooService fs2 = (FooService) osgiHelper.getServiceObject(ref);
assertTrue("Check the FooService invocation-2", fs2.foo());
// Only one object as the getService method is called only once (service factory) despite the policy="method".
assertEquals("Check the creation of 1 object", 1, ((PrimitiveInstanceDescription) lazzyArchSevM.getInstanceDescription()).getCreatedObjects().length);
}
/**
* Test a custom constructor.
* Not manipulated.
*/
@Test
public void testCustomConstuctor() {
FooService fs = new FooProviderType1(0, "foo", bc);
Properties props = fs.fooProps();
assertEquals("Check bar", 0, ((Integer) props.get("bar")).intValue());
assertEquals("Check foo", "foo", props.get("foo"));
assertEquals("Check context", bc, props.get("context"));
}
@Test
public void testSuperCall() {
try {
ipojoHelper.createComponentInstance("org.apache.felix.ipojo.runtime.core.components.CallSuperConstructor");
} catch (Throwable e) {
fail(e.getMessage());
}
}
@Test
public void testSuperCallWithNew() {
try {
ipojoHelper.createComponentInstance("org.apache.felix.ipojo.runtime.core.components.CallSuperConstructorWithNew");
} catch (Throwable e) {
fail(e.getMessage());
}
}
@Test
public void testSuperSuperCallWithNew() {
try {
ipojoHelper.createComponentInstance("org.apache.felix.ipojo.runtime.core.components.CallSuperSuperConstructorWithNew");
} catch (Throwable e) {
fail(e.getMessage());
}
}
@Test
public void testSuperCallWithBC() {
try {
ipojoHelper.createComponentInstance("org.apache.felix.ipojo.runtime.core.components.CallSuperConstructorWithBC");
} catch (Throwable e) {
fail(e.getMessage());
}
}
}