/* * 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.runtime.core.services.FooService; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.osgi.framework.ServiceReference; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedService; import java.util.Dictionary; import java.util.Hashtable; import java.util.Properties; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.fail; import static org.junit.Assert.assertNotNull; public class TestUpdatedNoArgMethodAndManagedService extends Common { /** * Instance where the ManagedServicePID is provided by the component type. */ ComponentInstance instance1; /** * Instance where the ManagedServicePID is provided by the instance. */ ComponentInstance instance2; /** * Instance without configuration. */ ComponentInstance instance3; @Before public void setUp() { String type = "CONFIG-FooProviderType-4Updated2"; Hashtable<String, String> p = new Hashtable<String, String>(); p.put("instance.name", "any-instance"); p.put("foo", "foo"); p.put("bar", "2"); p.put("baz", "baz"); instance1 = ipojoHelper.createComponentInstance(type, p); assertEquals("instance1 created", ComponentInstance.VALID, instance1.getState()); type = "CONFIG-FooProviderType-3Updated2"; Hashtable<String, String> p1 = new Hashtable<String, String>(); p1.put("instance.name", "instance-2"); p1.put("foo", "foo"); p1.put("bar", "2"); p1.put("baz", "baz"); p1.put("managed.service.pid", "instanceMSP"); instance2 = ipojoHelper.createComponentInstance(type, p1); type = "CONFIG-FooProviderType-3Updated2"; Hashtable<String, String> p2 = new Hashtable<String, String>(); p2.put("instance.name", "instance-3"); p2.put("managed.service.pid", "instance-3"); instance3 = ipojoHelper.createComponentInstance(type, p2); } @After public void tearDown() { instance1.dispose(); instance2.dispose(); instance3.dispose(); instance1 = null; instance2 = null; instance3 = null; } @Test public void testStaticInstance1() { ServiceReference fooRef = osgiHelper.waitForService(FooService.class.getName(), "(instance.name=" + instance1.getInstanceName() + ")", 5000); assertNotNull("Check FS availability", fooRef); String fooP = (String) fooRef.getProperty("foo"); Integer barP = (Integer) fooRef.getProperty("bar"); String bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality -1", fooP, "foo"); assertEquals("Check bar equality -1", barP, new Integer(2)); assertEquals("Check baz equality -1", bazP, "baz"); ServiceReference msRef = osgiHelper.getServiceReferenceByPID(ManagedService.class.getName(), "FooProvider-3"); assertNotNull("Check ManagedServiceFactory availability", msRef); // Configuration of baz Dictionary<String, Object> conf = new Hashtable<String, Object>(); conf.put("baz", "zab"); conf.put("bar", new Integer(2)); conf.put("foo", "foo"); ManagedService ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } // Re-check props fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance1.getInstanceName()); fooP = (String) fooRef.getProperty("foo"); barP = (Integer) fooRef.getProperty("bar"); bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality -2", fooP, "foo"); assertEquals("Check bar equality -2", barP, new Integer(2)); assertEquals("Check baz equality -2", bazP, "zab"); // Get Service FooService fs = (FooService) osgiHelper.getRawServiceObject(fooRef); Integer updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated", 1, updated.intValue()); } @Test public void testStaticInstance2() { ServiceReference fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance2.getInstanceName()); assertNotNull("Check FS availability", fooRef); String fooP = (String) fooRef.getProperty("foo"); Integer barP = (Integer) fooRef.getProperty("bar"); String bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality -1", fooP, "foo"); assertEquals("Check bar equality -1", barP, new Integer(2)); assertEquals("Check baz equality -1", bazP, "baz"); ServiceReference msRef = osgiHelper.getServiceReferenceByPID(ManagedService.class.getName(), "instanceMSP"); assertNotNull("Check ManagedService availability", msRef); // Configuration of baz Dictionary<String, Object> conf = new Hashtable<String, Object>(); conf.put("baz", "zab"); conf.put("bar", new Integer(2)); conf.put("foo", "foo"); ManagedService ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } // Recheck props fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance2.getInstanceName()); fooP = (String) fooRef.getProperty("foo"); barP = (Integer) fooRef.getProperty("bar"); bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality -2", fooP, "foo"); assertEquals("Check bar equality -2", barP, new Integer(2)); assertEquals("Check baz equality -2", bazP, "zab"); // Get Service FooService fs = (FooService) osgiHelper.getRawServiceObject(fooRef); Integer updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated", 1, updated.intValue()); conf.put("baz", "zab2"); conf.put("foo", "oof2"); conf.put("bar", new Integer(0)); ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated -2", 2, updated.intValue()); } @Test public void testDynamicInstance1() { ServiceReference fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance1.getInstanceName()); assertNotNull("Check FS availability", fooRef); String fooP = (String) fooRef.getProperty("foo"); Integer barP = (Integer) fooRef.getProperty("bar"); String bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality", fooP, "foo"); assertEquals("Check bar equality", barP, new Integer(2)); assertEquals("Check baz equality", bazP, "baz"); ServiceReference msRef = osgiHelper.getServiceReferenceByPID(ManagedService.class.getName(), "FooProvider-3"); assertNotNull("Check ManagedServiceFactory availability", msRef); // Configuration of baz Dictionary<String, Object> conf = new Hashtable<String, Object>(); conf.put("baz", "zab"); conf.put("foo", "oof"); conf.put("bar", new Integer(0)); ManagedService ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } // Re-check props fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance1.getInstanceName()); fooP = (String) fooRef.getProperty("foo"); barP = (Integer) fooRef.getProperty("bar"); bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality", fooP, "oof"); assertEquals("Check bar equality", barP, new Integer(0)); assertEquals("Check baz equality", bazP, "zab"); // Check field value FooService fs = (FooService) osgiHelper.getRawServiceObject(fooRef); Properties p = fs.fooProps(); fooP = (String) p.get("foo"); barP = (Integer) p.get("bar"); assertEquals("Check foo field equality", fooP, "oof"); assertEquals("Check bar field equality", barP, new Integer(0)); Integer updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated -1", 1, updated.intValue()); conf.put("baz", "zab2"); conf.put("foo", "oof2"); conf.put("bar", new Integer(0)); ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated -2", 2, updated.intValue()); } @Test public void testDynamicInstance2() { ServiceReference fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance2.getInstanceName()); assertNotNull("Check FS availability", fooRef); String fooP = (String) fooRef.getProperty("foo"); Integer barP = (Integer) fooRef.getProperty("bar"); String bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality", fooP, "foo"); assertEquals("Check bar equality", barP, new Integer(2)); assertEquals("Check baz equality", bazP, "baz"); ServiceReference msRef = osgiHelper.getServiceReferenceByPID(ManagedService.class.getName(), "instanceMSP"); assertNotNull("Check ManagedServiceFactory availability", msRef); // Configuration of baz Dictionary<String, Object> conf = new Hashtable<String, Object>(); conf.put("baz", "zab"); conf.put("foo", "oof"); conf.put("bar", new Integer(0)); ManagedService ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } // Recheck props fooRef = ipojoHelper.getServiceReferenceByName(FooService.class.getName(), instance2.getInstanceName()); fooP = (String) fooRef.getProperty("foo"); barP = (Integer) fooRef.getProperty("bar"); bazP = (String) fooRef.getProperty("baz"); assertEquals("Check foo equality", fooP, "oof"); assertEquals("Check bar equality", barP, new Integer(0)); assertEquals("Check baz equality", bazP, "zab"); // Check field value FooService fs = (FooService) osgiHelper.getRawServiceObject(fooRef); Properties p = fs.fooProps(); fooP = (String) p.get("foo"); barP = (Integer) p.get("bar"); assertEquals("Check foo field equality", fooP, "oof"); assertEquals("Check bar field equality", barP, new Integer(0)); Integer updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated", 1, updated.intValue()); conf.put("baz", "zab2"); conf.put("foo", "oof2"); conf.put("bar", new Integer(0)); ms = (ManagedService) osgiHelper.getRawServiceObject(msRef); try { ms.updated(conf); } catch (ConfigurationException e) { fail("Configuration Exception : " + e); } updated = (Integer) fs.fooProps().get("updated"); assertEquals("Check updated -2", 2, updated.intValue()); } }