/** * 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.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.ops4j.pax.exam.CoreOptions.options; import java.util.Dictionary; import javax.inject.Inject; import javax.management.openmbean.TabularData; import org.apache.aries.jmx.AbstractIntegrationTest; import org.apache.aries.jmx.codec.PropertyData; import org.apache.aries.jmx.test.bundlea.api.InterfaceA; import org.apache.aries.jmx.test.bundleb.api.InterfaceB; import org.apache.aries.jmx.test.bundleb.api.MSF; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.jmx.service.cm.ConfigurationAdminMBean; import org.osgi.service.cm.ConfigurationAdmin; /** * * * @version $Rev$ $Date$ */ public class ConfigurationAdminMBeanTest extends AbstractIntegrationTest { private ConfigurationAdminMBean mbean; @Inject InterfaceA managedServiceA; @Inject @org.ops4j.pax.exam.util.Filter("(" + Constants.SERVICE_PID + "=jmx.test.B.factory)") MSF managedFactory; @Inject ConfigurationAdmin configAdmin; @Configuration public Option[] configuration() { return options( jmxRuntime(), bundlea(), bundleb() ); } @Before public void doSetUp() throws Exception { waitForMBean(ConfigurationAdminMBean.OBJECTNAME); mbean = getMBean(ConfigurationAdminMBean.OBJECTNAME, ConfigurationAdminMBean.class); assertNotNull(mbean); } @Ignore("ManagedServiceFactory tests failing.. " + "Some issues surrounding creating a factory configuration and then retrieving by pid to update.. Needs investigation") @Test @SuppressWarnings("unchecked") public void testMBeanInterface() throws Exception { // get bundles Bundle a = getBundleByName("org.apache.aries.jmx.test.bundlea"); // ManagedService operations assertNull(managedServiceA.getConfig()); // create a configuration for A TabularData data = mbean.getProperties("org.apache.aries.jmx.test.ServiceA"); assertEquals(0, data.size()); PropertyData<String> p1 = PropertyData.newInstance("A1", "first"); data.put(p1.toCompositeData()); PropertyData<Integer> p2 = PropertyData.newInstance("A2", 2); data.put(p2.toCompositeData()); mbean.update("org.apache.aries.jmx.test.ServiceA", data); Thread.sleep(1000); Dictionary<String, Object> config = managedServiceA.getConfig(); assertNotNull(config); assertEquals(3, config.size()); assertEquals("org.apache.aries.jmx.test.ServiceA", config.get(Constants.SERVICE_PID)); assertEquals("first", config.get("A1")); assertEquals(2, config.get("A2")); //delete mbean.deleteForLocation("org.apache.aries.jmx.test.ServiceA", a.getLocation()); Thread.sleep(1000); assertNull(managedServiceA.getConfig()); // ManagedServiceFactory operations String cpid = mbean.createFactoryConfiguration("jmx.test.B.factory"); assertNotNull(cpid); assertTrue(cpid.contains("jmx.test.B.factory")); TabularData fConfig = mbean.getProperties(cpid); assertNotNull(fConfig); assertEquals(0, fConfig.values().size()); PropertyData<String> prop1 = PropertyData.newInstance("B1", "value1"); fConfig.put(prop1.toCompositeData()); PropertyData<Boolean> prop2 = PropertyData.newInstance("B2", true); fConfig.put(prop2.toCompositeData()); mbean.update(cpid, fConfig); Thread.sleep(1000); InterfaceB configured = managedFactory.getConfigured(cpid); assertNotNull(configured); config = configured.getConfig(); assertNotNull(config); assertTrue(config.size() >= 4); assertEquals("jmx.test.B.factory", config.get(ConfigurationAdmin.SERVICE_FACTORYPID)); assertEquals(cpid, config.get(Constants.SERVICE_PID)); assertEquals("value1", config.get("B1")); assertEquals("true", config.get("B2")); assertEquals("jmx.test.B.factory", mbean.getFactoryPid(cpid)); mbean.delete(cpid); Thread.sleep(1000); assertNull(managedFactory.getConfigured(cpid)); // list operations data = mbean.getProperties("org.apache.aries.jmx.test.ServiceA"); assertEquals(0, data.size()); p1 = PropertyData.newInstance("A1", "a1Value"); data.put(p1.toCompositeData()); mbean.update("org.apache.aries.jmx.test.ServiceA", data); Thread.sleep(1000); config = managedServiceA.getConfig(); assertNotNull(config); assertEquals(2, config.size()); assertEquals("org.apache.aries.jmx.test.ServiceA", config.get(Constants.SERVICE_PID)); assertEquals("a1Value", config.get("A1")); String[][] configurations = mbean.getConfigurations("(A1=a1Value)"); assertNotNull(configurations); assertEquals(1, configurations.length); assertEquals("org.apache.aries.jmx.test.ServiceA", configurations[0][0]); assertEquals(a.getLocation(), configurations[0][1]); // delete with filter mbean.deleteConfigurations("(A1=a1Value)"); Thread.sleep(1000); assertNull(managedServiceA.getConfig()); } }