blob: c8149dbe4cf76399fa254cea207500fa4570e05b [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.providing;
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.runtime.core.Common;
import org.apache.felix.ipojo.runtime.core.components.TotoProvider;
import org.apache.felix.ipojo.runtime.core.services.Tota;
import org.apache.felix.ipojo.runtime.core.services.Toto;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.ServiceReference;
import java.util.Properties;
import static org.junit.Assert.*;
public class TestComp0 extends Common {
private ComponentFactory tataFactory;
private ComponentFactory totoFactory;
private ComponentFactory tataFactory2;
private ComponentInstance totoProv, totoProv2;
private ComponentInstance under;
@Before
public void setUp() {
tataFactory = (ComponentFactory) ipojoHelper.getFactory("tata");
totoFactory = (ComponentFactory) ipojoHelper.getFactory("toto");
tataFactory2 = (ComponentFactory) ipojoHelper.getFactory("comp-6");
tataFactory2.stop();
tataFactory.stop();
Properties props = new Properties();
props.put("instance.name", "toto provider");
try {
totoProv = totoFactory.createComponentInstance(props);
} catch (Exception e) {
fail("Cannot create an instance : " + e.getMessage());
}
Properties props3 = new Properties();
props3.put("instance.name", "toto provider 2");
try {
totoProv2 = totoFactory.createComponentInstance(props3);
} catch (Exception e) {
fail("Cannot create an instance : " + e.getMessage());
}
totoProv.stop();
totoProv2.stop();
Factory factory = ipojoHelper.getFactory("comp-0");
Properties props2 = new Properties();
props2.put("instance.name", "ff");
try {
under = factory.createComponentInstance(props2);
} catch (Exception e) {
e.printStackTrace();
fail("Cannot create an instance : " + e.getMessage());
}
}
@After
public void tearDown() {
tataFactory.start();
totoProv.dispose();
totoProv = null;
totoProv2.dispose();
totoProv2 = null;
tataFactory2.start();
// Reset counters
TotoProvider.toto = 0;
TotoProvider.toto_2 = 0;
TotoProvider.toto_3 = 0;
TotoProvider.toto_4 = 0;
TotoProvider.toto1 = 0;
}
@Test
public void testSimple() {
// Neither factory nor instance
assertTrue("Assert under state - 1", under.getState() == ComponentInstance.INVALID);
assertNull("Assert no tota service - 1", getContext().getServiceReference(Tota.class.getName()));
// Start the importer
totoProv.start();
assertNotNull("Assert toto service - 1", getContext().getServiceReference(Toto.class.getName()));
assertTrue("Assert under state - 2", under.getState() == ComponentInstance.INVALID);
assertNull("Assert no tota service - 2", getContext().getServiceReference(Tota.class.getName()));
// Start the factory
tataFactory.start();
assertTrue("Assert under state - 3", under.getState() == ComponentInstance.VALID);
assertNotNull("Assert tota service - 3", getContext().getServiceReference(Tota.class.getName()));
ServiceReference ref = getContext().getServiceReference(Tota.class.getName());
Tota tota = (Tota) getContext().getService(ref);
invokeAll(tota);
// Check toto
Properties props = tota.getProps();
Integer toto = (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");
assertEquals("Assert toto - 3", toto.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);
//Check tata
props = tota.getPropsTata();
Integer tata = (Integer) props.get("tata");
Integer tataStr = (Integer) props.get("tataStr");
Integer tataStrs = (Integer) props.get("tataStrs");
Integer tata_2 = (Integer) props.get("tata_2");
Integer tata_3 = (Integer) props.get("tata_3");
Integer tata1 = (Integer) props.get("tata1");
Integer tata1_1 = (Integer) props.get("tata1_1");
Integer tata5 = (Integer) props.get("tata5");
Integer tata5_1 = (Integer) props.get("tata5_1");
Integer tata5_2 = (Integer) props.get("tata5_2");
assertEquals("Assert tata - 3", tata.intValue(), 1);
assertEquals("Assert tataStr - 3", tataStr.intValue(), 1);
assertEquals("Assert tataStrs - 3", tataStrs.intValue(), 0);
assertEquals("Assert tata_2 - 3", tata_2.intValue(), 1);
assertEquals("Assert tata_3 - 3", tata_3.intValue(), 1);
assertEquals("Assert tata1 - 3", tata1.intValue(), 1);
assertEquals("Assert tata1_1 - 3", tata1_1.intValue(), 1);
assertEquals("Assert tata5 - 3", tata5.intValue(), 1);
assertEquals("Assert tata5_1 - 3", tata5_1.intValue(), 1);
assertEquals("Assert tata5_2 - 3", tata5_2.intValue(), 1);
getContext().ungetService(ref);
tota = null;
// Start a second import
totoProv2.start();
assertTrue("Assert under state - 4", under.getState() == ComponentInstance.VALID);
assertNotNull("Assert tota service - 4", getContext().getServiceReference(Tota.class.getName()));
ref = getContext().getServiceReference(Tota.class.getName());
tota = (Tota) getContext().getService(ref);
invokeAll(tota);
// Check toto
props = tota.getProps();
toto = (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");
assertEquals("Assert toto - 4", toto.intValue(), 2);
assertEquals("Assert toto_2 - 4", toto_2.intValue(), 2);
assertEquals("Assert toto_3 - 4", toto_3.intValue(), 2);
assertEquals("Assert toto_4 - 4", toto_4.intValue(), 0);
//Check tata
props = tota.getPropsTata();
tata = (Integer) props.get("tata");
tataStr = (Integer) props.get("tataStr");
tataStrs = (Integer) props.get("tataStrs");
tata_2 = (Integer) props.get("tata_2");
tata_3 = (Integer) props.get("tata_3");
tata1 = (Integer) props.get("tata1");
tata1_1 = (Integer) props.get("tata1_1");
tata5 = (Integer) props.get("tata5");
tata5_1 = (Integer) props.get("tata5_1");
tata5_2 = (Integer) props.get("tata5_2");
assertEquals("Assert tata - 4", tata.intValue(), 2);
assertEquals("Assert tataStr - 4", tataStr.intValue(), 2);
assertEquals("Assert tataStrs - 4", tataStrs.intValue(), 0);
assertEquals("Assert tata_2 - 4", tata_2.intValue(), 2);
assertEquals("Assert tata_3 - 4", tata_3.intValue(), 2);
assertEquals("Assert tata1 - 4", tata1.intValue(), 2);
assertEquals("Assert tata1_1 - 4", tata1_1.intValue(), 2);
assertEquals("Assert tata5 - 4", tata5.intValue(), 2);
assertEquals("Assert tata5_1 - 4", tata5_1.intValue(), 2);
assertEquals("Assert tata5_2 - 4", tata5_2.intValue(), 2);
getContext().ungetService(ref);
tota = null;
tataFactory.stop();
assertTrue("Assert under state - 5", under.getState() == ComponentInstance.INVALID);
assertNull("Assert no tota service - 5", getContext().getServiceReference(Tota.class.getName()));
totoProv2.stop();
tataFactory.start();
assertTrue("Assert under state - 6", under.getState() == ComponentInstance.VALID);
assertNotNull("Assert tota service - 6", getContext().getServiceReference(Tota.class.getName()));
ref = getContext().getServiceReference(Tota.class.getName());
tota = (Tota) getContext().getService(ref);
invokeAll(tota);
// Check toto
props = tota.getProps();
toto = (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");
assertEquals("Assert toto - 6", toto.intValue(), 3);
assertEquals("Assert toto_2 - 6", toto_2.intValue(), 3);
assertEquals("Assert toto_3 - 6", toto_3.intValue(), 3);
assertEquals("Assert toto_4 - 6", toto_4.intValue(), 0);
//Check tata
props = tota.getPropsTata();
tata = (Integer) props.get("tata");
tataStr = (Integer) props.get("tataStr");
tataStrs = (Integer) props.get("tataStrs");
tata_2 = (Integer) props.get("tata_2");
tata_3 = (Integer) props.get("tata_3");
tata1 = (Integer) props.get("tata1");
tata1_1 = (Integer) props.get("tata1_1");
tata5 = (Integer) props.get("tata5");
tata5_1 = (Integer) props.get("tata5_1");
tata5_2 = (Integer) props.get("tata5_2");
assertEquals("Assert tata - 6", tata.intValue(), 1);
assertEquals("Assert tataStr - 6", tataStr.intValue(), 1);
assertEquals("Assert tataStrs - 6", tataStrs.intValue(), 0);
assertEquals("Assert tata_2 - 6", tata_2.intValue(), 1);
assertEquals("Assert tata_3 - 6", tata_3.intValue(), 1);
assertEquals("Assert tata1 - 6", tata1.intValue(), 1);
assertEquals("Assert tata1_1 - 6", tata1_1.intValue(), 1);
assertEquals("Assert tata5 - 6", tata5.intValue(), 1);
assertEquals("Assert tata5_1 - 6", tata5_1.intValue(), 1);
assertEquals("Assert tata5_2 - 6", tata5_2.intValue(), 1);
getContext().ungetService(ref);
tota = null;
// Is arch exposed
assertNotNull("Test arch", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
totoProv.stop();
assertTrue("Assert under state - 7", under.getState() == ComponentInstance.INVALID);
assertNotNull("Test arch-2", ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), "ff"));
assertNull("Assert no tota service - 7", getContext().getServiceReference(Tota.class.getName()));
under.dispose();
under = null;
}
private void invoke(Tota 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, 0);
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, 0);
}
private void invokeArrays(Tota tota) {
int[] a = new int[]{1, 2, 3};
assertEquals("Assert invoke tataint[]", tota.tataInts(a), a);
long[] b = new long[]{1, 2, 3};
assertEquals("Assert invoke tataLong[]", tota.tataLongs(b), b);
double[] c = new double[]{1, 2, 3};
assertEquals("Assert invoke tataDouble[]", tota.tataDoubles(c), c);
char[] d = new char[]{'a', 'b', 'c'};
assertEquals("Assert invoke tataChar[]", tota.tataChars(d), d);
boolean[] e = new boolean[]{true, false};
assertEquals("Assert invoke tataBoolean[]", tota.tataBooleans(e), e);
byte[] f = new byte[]{(byte) 1};
assertEquals("Assert invoke tataByte[]", tota.tataBytes(f), f);
short[] g = new short[]{(short) 1};
assertEquals("Assert invoke tataShort[]", tota.tataShorts(g), g);
float[] h = new float[]{5, 6, 7};
assertEquals("Assert invoke tataFloat[]", tota.tataFloats(h), h);
}
private void invokeStr(Tota tota) {
tota.tataStr();
}
private void invokeTata(Tota tota) {
tota.tata(1, 2);
tota.tata("tototototo");
}
private void invokeTata1(Tota tota) {
assertEquals("Assert tata1", tota.tata1("foo"), "foo");
assertEquals("Assert tata1 - 2", tota.tata1(new char[]{'a', 'b', 'c'}), "abc");
}
private void invokeTata5(Tota tota) {
assertEquals("Assert tata5 -1", tota.tata5("foo", 1), "foo" + 1);
assertEquals("Assert tata5 - 2", tota.tata5(new String[]{"a", "b", "c"}, 1), "31");
assertEquals("Assert tata5 - 3", tota.tata5("foo", new int[]{1, 2, 3}), "foo3");
}
private void invokeAdd(Tota tota) {
assertEquals("Assert add", tota.add(1, 1, 1), 3);
}
private void invokeToto(Tota tota) {
tota.toto();
assertEquals("Assert toto", tota.toto("foo"), "foo");
tota.toto(1, 2);
}
private void invokeAll(Tota tota) {
invoke(tota);
invokeArrays(tota);
invokeStr(tota);
invokeTata(tota);
invokeTata1(tota);
invokeTata5(tota);
invokeAdd(tota);
invokeToto(tota);
}
}