/* * 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); } }