| /** |
| * 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.aries.jmx.cm; |
| |
| import static org.junit.Assert.assertArrayEquals; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.mockito.Matchers.anyString; |
| import static org.mockito.Matchers.eq; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.reset; |
| import static org.mockito.Mockito.verify; |
| import static org.mockito.Mockito.when; |
| import static org.osgi.jmx.JmxConstants.PROPERTIES_TYPE; |
| |
| import java.util.Dictionary; |
| import java.util.Hashtable; |
| |
| import javax.management.openmbean.TabularData; |
| import javax.management.openmbean.TabularDataSupport; |
| |
| import org.apache.aries.jmx.codec.PropertyData; |
| import org.junit.Test; |
| import org.mockito.ArgumentCaptor; |
| import org.osgi.framework.Constants; |
| import org.osgi.service.cm.Configuration; |
| |
| /** |
| * |
| * |
| * @version $Rev$ $Date$ |
| */ |
| public class ConfigurationAdminTest { |
| |
| |
| @Test |
| public void testCreateFactoryConfiguration() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String fpid = "org.apache.aries.jmx.mock.factory"; |
| Configuration config = mock(Configuration.class); |
| |
| when(admin.createFactoryConfiguration(eq(fpid))).thenReturn(config); |
| when(admin.createFactoryConfiguration(eq(fpid), anyString())).thenReturn(config); |
| when(config.getPid()).thenReturn(fpid + "-1260133982371-0"); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| assertEquals(fpid + "-1260133982371-0", mbean.createFactoryConfiguration(fpid)); |
| assertEquals(fpid + "-1260133982371-0", mbean.createFactoryConfigurationForLocation(fpid, "/bundlex")); |
| |
| } |
| |
| |
| @Test |
| public void testDelete() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String pid = "org.apache.aries.jmx.mock"; |
| Configuration config = mock(Configuration.class); |
| |
| when(admin.getConfiguration(pid, null)).thenReturn(config); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| mbean.delete(pid); |
| verify(config).delete(); |
| |
| reset(config); |
| |
| when(admin.getConfiguration(pid, "location")).thenReturn(config); |
| mbean.deleteForLocation(pid, "location"); |
| verify(config).delete(); |
| |
| } |
| |
| |
| @Test |
| public void testDeleteConfigurations() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String filter = "(" + Constants.SERVICE_PID + "=org.apache.aries.jmx.mock)"; |
| |
| Configuration a = mock(Configuration.class); |
| Configuration b = mock(Configuration.class); |
| |
| when(admin.listConfigurations(filter)).thenReturn(new Configuration[] { a, b }); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| mbean.deleteConfigurations(filter); |
| |
| verify(a).delete(); |
| verify(b).delete(); |
| |
| } |
| |
| |
| @Test |
| public void testGetBundleLocation() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String pid = "org.apache.aries.jmx.mock"; |
| Configuration config = mock(Configuration.class); |
| |
| when(admin.getConfiguration(pid, null)).thenReturn(config); |
| when(config.getBundleLocation()).thenReturn("/location"); |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| |
| assertEquals("/location", mbean.getBundleLocation(pid)); |
| |
| } |
| |
| |
| @Test |
| public void testGetConfigurations() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String factoryPid = "org.apache.aries.jmx.factory.mock"; |
| String filter = "(" + org.osgi.service.cm.ConfigurationAdmin.SERVICE_FACTORYPID + "=org.apache.aries.jmx.factory.mock)"; |
| String location = "../location"; |
| |
| Configuration a = mock(Configuration.class); |
| when(a.getPid()).thenReturn(factoryPid + "-2160133952674-0"); |
| when(a.getBundleLocation()).thenReturn(location); |
| Configuration b = mock(Configuration.class); |
| when(b.getPid()).thenReturn(factoryPid + "-1260133982371-1"); |
| when(b.getBundleLocation()).thenReturn(location); |
| |
| when(admin.listConfigurations(filter)).thenReturn(new Configuration[] { a, b}); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| String[][] result = mbean.getConfigurations(filter); |
| assertEquals(2, result.length); |
| assertArrayEquals(new String[]{ factoryPid + "-2160133952674-0", location }, result[0] ); |
| assertArrayEquals(new String[]{ factoryPid + "-1260133982371-1", location }, result[1] ); |
| |
| } |
| |
| |
| @Test |
| public void testGetFactoryPid() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String factoryPid = "org.apache.aries.jmx.factory.mock"; |
| |
| Configuration config = mock(Configuration.class); |
| when(admin.getConfiguration(eq(factoryPid + "-1260133982371-0"), anyString())).thenReturn(config); |
| when(config.getFactoryPid()).thenReturn(factoryPid); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| assertEquals(factoryPid, mbean.getFactoryPid(factoryPid + "-1260133982371-0")); |
| assertEquals(factoryPid, mbean.getFactoryPidForLocation(factoryPid + "-1260133982371-0", "location")); |
| |
| } |
| |
| |
| @Test |
| public void testGetProperties() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String pid = "org.apache.aries.jmx.mock"; |
| Configuration config = mock(Configuration.class); |
| |
| Dictionary<String, Object> props = new Hashtable<String, Object>(); |
| props.put("one", "value"); |
| props.put("two", 2); |
| when(admin.getConfiguration(eq(pid), anyString())).thenReturn(config); |
| when(config.getProperties()).thenReturn(props); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| |
| TabularData properties = mbean.getPropertiesForLocation(pid, null); |
| assertNotNull(properties); |
| assertEquals(PROPERTIES_TYPE, properties.getTabularType()); |
| assertEquals(2, properties.values().size()); |
| PropertyData<? extends Object> oneData = PropertyData.from(properties.get(new Object[]{ "one"})); |
| assertEquals("value", oneData.getValue()); |
| PropertyData<? extends Object> twoData = PropertyData.from(properties.get(new Object[]{ "two"})); |
| assertEquals(2, twoData.getValue()); |
| assertEquals("2", twoData.getEncodedValue()); |
| |
| } |
| |
| |
| |
| @Test |
| public void testSetBundleLocation() throws Exception { |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String pid = "org.apache.aries.jmx.mock"; |
| |
| Configuration config = mock(Configuration.class); |
| when(admin.getConfiguration(pid, null)).thenReturn(config); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| mbean.setBundleLocation(pid, "file:/newlocation"); |
| |
| ArgumentCaptor<String> locationArgument = ArgumentCaptor.forClass(String.class); |
| verify(config).setBundleLocation(locationArgument.capture()); |
| |
| assertEquals("file:/newlocation", locationArgument.getValue()); |
| |
| } |
| |
| |
| @SuppressWarnings("unchecked") |
| @Test |
| public void testUpdateTabularData() throws Exception { |
| |
| TabularData data = new TabularDataSupport(PROPERTIES_TYPE); |
| PropertyData<String> p1 = PropertyData.newInstance("one", "first"); |
| data.put(p1.toCompositeData()); |
| PropertyData<Integer> p2 = PropertyData.newInstance("two", 3); |
| data.put(p2.toCompositeData()); |
| |
| org.osgi.service.cm.ConfigurationAdmin admin = mock(org.osgi.service.cm.ConfigurationAdmin.class); |
| String pid = "org.apache.aries.jmx.mock"; |
| |
| Configuration config = mock(Configuration.class); |
| when(admin.getConfiguration(pid, null)).thenReturn(config); |
| |
| ConfigurationAdmin mbean = new ConfigurationAdmin(admin); |
| mbean.updateForLocation(pid, null, data); |
| |
| ArgumentCaptor<Dictionary> props = ArgumentCaptor.forClass(Dictionary.class); |
| verify(config).update(props.capture()); |
| |
| Dictionary configProperties = props.getValue(); |
| assertEquals("first", configProperties.get("one")); |
| assertEquals(3, configProperties.get("two")); |
| |
| } |
| |
| |
| |
| } |