blob: 609c23cf3e74d335fa5be0a8703ae69ddeafebf1 [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.test.composite.provides;
import java.util.Properties;
import org.apache.felix.ipojo.ComponentFactory;
import org.apache.felix.ipojo.ComponentInstance;
import org.apache.felix.ipojo.Factory;
import org.apache.felix.ipojo.architecture.Architecture;
import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
import org.apache.felix.ipojo.test.composite.component.TotoProvider;
import org.apache.felix.ipojo.test.composite.service.Tata;
import org.apache.felix.ipojo.test.composite.service.Toto;
import org.apache.felix.ipojo.test.composite.util.Utils;
import org.osgi.framework.ServiceReference;
public class TestComp6 extends OSGiTestCase {
private ComponentFactory tataFactory;
private ComponentFactory totoFactory;
private ComponentInstance totoProv, totoProv2;
private ComponentInstance under;
public void setUp() {
tataFactory = (ComponentFactory) Utils.getFactoryByName(context, "tata");
totoFactory = (ComponentFactory) Utils.getFactoryByName(context, "toto");
tataFactory.stop();
Properties props = new Properties();
props.put("name", "toto provider");
try {
totoProv = totoFactory.createComponentInstance(props);
} catch(Exception e) {
e.printStackTrace();
}
Properties props3 = new Properties();
props3.put("name", "toto provider 2");
try {
totoProv2 = totoFactory.createComponentInstance(props3);
} catch(Exception e) {
e.printStackTrace();
}
totoProv.stop();
totoProv2.stop();
Factory factory = Utils.getFactoryByName(context, "comp-6");
Properties props2 = new Properties();
props2.put("name", "ff");
try {
under = factory.createComponentInstance(props2);
} catch(Exception e) {
e.printStackTrace();
}
}
public void tearDown() {
tataFactory.start();
totoProv.dispose();
totoProv = null;
totoProv2.dispose();
totoProv2 = null;
// Reset counters
TotoProvider.toto = 0;
TotoProvider.toto_2 = 0;
TotoProvider.toto_3 = 0;
TotoProvider.toto_4 = 0;
TotoProvider.toto1 = 0;
}
public void testSimple() {
// Neither factory nor instance
assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
ServiceReference refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
ServiceReference refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNull("Assert no toto service - 1", refToto);
assertNull("Assert no tata service - 1", refTata);
// Start the importer
totoProv.start();
assertTrue("Assert under state - 2 ("+under.getState()+")", under.getState() == ComponentInstance.INVALID);
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNull("Assert no toto service - 2", refToto);
assertNull("Assert no tata service - 2", refTata);
// Start the factory
tataFactory.start();
assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNotNull("Assert toto service - 3", refToto);
assertNotNull("Assert tata service - 3", refTata);
Toto toto = (Toto) context.getService(refToto);
Tata tata = (Tata) context.getService(refTata);
invokeAll(tata);
invokeToto(toto);
// Check toto
Properties props = toto.getProps();
Integer toto_0 = (Integer) props.get("toto");
Integer toto_2 = (Integer) props.get("toto_2");
Integer toto_3 = (Integer) props.get("toto_3");
Integer toto_4 = (Integer) props.get("toto_4");
Integer toto_1 = (Integer) props.get("toto1");
assertEquals("Assert toto - 3 ("+toto_0.intValue()+")", toto_0.intValue(), 1);
assertEquals("Assert toto_2 - 3", toto_2.intValue(), 1);
assertEquals("Assert toto_3 - 3", toto_3.intValue(), 1);
assertEquals("Assert toto_4 - 3", toto_4.intValue(), 0);
assertEquals("Assert toto1 - 3 (" + toto_1.intValue() + ")", toto_1.intValue(), 1);
//Check tata
props = tata.getPropsTata();
Integer tata_0 = (Integer) props.get("tata");
assertEquals("Assert tata - 3", tata_0.intValue(), 1);
context.ungetService(refToto);
context.ungetService(refTata);
toto = null;
tata = null;
// Start a second import
totoProv2.start();
assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNotNull("Assert toto service - 4", refToto);
assertNotNull("Assert tata service - 4", refTata);
toto = (Toto) context.getService(refToto);
tata = (Tata) context.getService(refTata);
invokeAll(tata);
invokeToto(toto);
// Check toto
props = toto.getProps();
toto_0 = (Integer) props.get("toto");
toto_2 = (Integer) props.get("toto_2");
toto_3 = (Integer) props.get("toto_3");
toto_4 = (Integer) props.get("toto_4");
toto_1 = (Integer) props.get("toto1");
assertEquals("Assert toto - 4 ("+toto_0.intValue()+")", toto_0.intValue(), 2);
assertEquals("Assert toto_2 - 4 ("+toto_2.intValue()+")", toto_2.intValue(), 2);
assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
assertEquals("Assert toto1 - 4", toto_1.intValue(), 3);
//Check tata
props = tata.getPropsTata();
tata_0 = (Integer) props.get("tata");
assertEquals("Assert tata - 4", tata_0.intValue(), 2);
context.ungetService(refToto);
context.ungetService(refTata);
toto = null;
tata = null;
// Stop the factory
tataFactory.stop();
assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNull("Assert no toto service - 5", refToto);
assertNull("Assert no tata service - 5", refTata);
totoProv2.stop();
totoProv.stop();
tataFactory.start();
assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNotNull("Assert toto service - 6", refToto);
assertNotNull("Assert tata service - 6", refTata);
toto = (Toto) context.getService(refToto);
tata = (Tata) context.getService(refTata);
invokeAll(tata);
invokeTotoOpt(toto);
// Check tata
props = tata.getPropsTata();
tata_0 = (Integer) props.get("tata");
assertEquals("Assert tata - 6", tata_0.intValue(), 1);
context.ungetService(refToto);
context.ungetService(refTata);
toto = null;
tata = null;
// Is arch exposed
assertNotNull("Test arch", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
tataFactory.stop();
assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
assertNotNull("Test arch-2", Utils.getServiceReferenceByName(context, Architecture.class.getName(), "ff"));
refToto = Utils.getServiceReferenceByName(context, Toto.class.getName(), "ff");
refTata = Utils.getServiceReferenceByName(context, Tata.class.getName(), "ff");
assertNull("Assert no toto service - 7", refToto);
assertNull("Assert no tata service - 7", refTata);
under.dispose();
under = null;
}
private void invoke(Tata tota) {
tota.tata();
assertEquals("Assert invoke tataint", tota.tataInt(2), 2);
assertEquals("Assert invoke tataLong", tota.tataLong(2), 2);
assertEquals("Assert invoke tataDouble", tota.tataDouble(2), 2);
assertEquals("Assert invoke tataChar", tota.tataChar('a'), 'a');
assertTrue("Assert invoke tataBoolean", tota.tataBoolean(true));
assertEquals("Assert invoke tataByte", tota.tataByte((byte)2), 2);
assertEquals("Assert invoke tataShort", tota.tataShort((short)5), 5);
assertEquals("Assert invoke tataFloat", tota.tataFloat(5), 5);
}
private void invokeStr(Tata tota) {
tota.tataStr();
}
private void invokeToto(Toto tota) {
tota.toto();
assertEquals("Assert toto", tota.toto("foo"), "foo");
tota.toto(1,2);
tota.toto1("foo");
}
private void invokeAll(Tata tota) {
invoke(tota);
//invokeArrays(tota);
invokeStr(tota);
//invokeTata(tota);
//invokeTata1(tota);
//invokeTata5(tota);
//invokeAdd(tota);
}
private void invokeTotoOpt(Toto tota) {
try {
tota.toto();
fail("UnsupportedOperationException expected");
} catch(UnsupportedOperationException e) { }
try {
assertEquals("Assert toto", tota.toto("foo"), "foo");
fail("UnsupportedOperationException expected");
} catch(UnsupportedOperationException e) { }
try {
tota.toto(1,2);
fail("UnsupportedOperationException expected");
} catch(UnsupportedOperationException e) { }
try {
tota.toto1("foo");
fail("UnsupportedOperationException expected");
} catch(UnsupportedOperationException e) { }
}
}